Update: IN der UNION-Klauseln und erstellen Falsche Spaltenanzahl

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 283842 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Problembeschreibung

Mit dem Microsoft OLE DB-Provider für Oracle (MSDAORA) kann die Ausführung einer SQL-Anweisung, die sowohl IN als auch einer UNION-Klausel enthält ein ActiveX Data Objects (ADO)- Recordset -Objekt erstellt, die eine falsche Anzahl von Spalten enthält.

Dieses Problem tritt, wenn einen ADO clientseitigen Cursor verwenden (d. h., dass die CursorLocation -Eigenschaft auf AdUseClient festgelegt ist), aber Sie funktioniert einwandfrei, wenn Sie einen serverseitigen Cursor verwenden.

Lösung

Installieren Sie das neueste Servicepack für Microsoft MDAC 2.5, um dieses Problem zu beheben. Weitere Informationen finden Sie die folgende KB-Artikelnummer:
293312INFO: Wie erhalten Sie die neueste MDAC 2.5 Servicepack
Installieren Sie das neueste Servicepack für Microsoft Data Access Components 2.6, um dieses Problem zu beheben. Weitere Informationen finden Sie die folgende KB-Artikelnummer:
300635INFO: Wie erhalten Sie die neueste MDAC 2.6 Servicepack

Hotfix

Die englische Version dieses Updates sollte die folgenden Dateiattribute (oder höher) aufweisen:
   Version       Size      File name     Platform
   -------------------------------------------------------
   2.53.6007.0   209,168   Msdaora.dll   x86
				

Abhilfe

Das Problem tritt nicht auf, wenn Sie einen serverseitigen Cursor verwenden; die CursorLocation -Eigenschaft wird auf AdUseServer festgelegt.

Status

Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel genannten Microsoft-Produkten handelt. Dieses Problem wurde erstmals in Microsoft Data Access Components 2.6 Service Pack 2, MDAC 2.5 SP3 und MDAC 2.7.

Weitere Informationen

Schritte zum Reproduzieren des Verhaltens

  1. Fügen Sie den folgenden Code in ein neues Visual Basic-Projekt, und legen einen Projektverweis auf Microsoft ActiveX Data Objects 2.5 Library:
    Private Sub Command1_Click()
    
        Dim cn As New ADODB.Connection
        Dim rs As New ADODB.Recordset
        cn.Open "Provider=MSDAORA;Data Source=your_oracle_server;User ID=your_user_name;Password=your_password"
        On Error Resume Next
        cn.Execute "Drop table oratest"
        cn.Execute "CREATE TABLE ORATEST(Col1 VARCHAR2(10) NULL," & _
                   "Col2 VARCHAR2(10) NULL)"
        cn.Execute "insert into oratest values(7,7)"
        cn.Execute " insert into oratest values(6,6)"
        cn.Execute "Drop table DUAL"
        cn.Execute "CREATE TABLE DUAL(C11 VARCHAR2(10) NULL," & _
                   "C12 VARCHAR2(10) NULL)"
        cn.Execute "insert into dual values(6,7)"
        rs.CursorLocation = adUseClient
        rs.Open "select col1, col2 from oratest where col1 in (Select C11 from dual union select C12 from dual)", _
                cn, adOpenStatic,adLockBatchOptimistic
        
        Debug.Print rs.Fields.Count      '<--- incorrect column count       
        Debug.Print rs.Fields(0).Name
        Debug.Print rs.Fields(1).Name
    End Sub
    					
  2. Wenn Sie das oben genannten Projekt ausführen, wird eine falsche Anzahl von Spalten angezeigt. Kann auch angezeigt dem Fehler "Objekt wurde geöffnet" werden, wenn Sie das Recordset Felder Anzahl im Visual Basic Überwachungsfenster beobachten. In diesem Fall würde die Zeile "rs.Fields.Count Debug.Print" keine Ergebnis in das Direktfenster gedruckt.

Eigenschaften

Artikel-ID: 283842 - Geändert am: Freitag, 7. April 2006 - Version: 6.1
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft OLE DB Provider for Oracle Server 1.0
  • Microsoft OLE DB Provider for Oracle Server 1.0
  • Microsoft Data Access Components 2.5
  • Microsoft Data Access Components 2.5 Service Pack 1
  • Microsoft Data Access Components 2.6
Keywords: 
kbmt kbqfe kbhotfixserver kbmdac250sp3fix kbbug kbfix kbmdac260sp2fix kboracle kbprovider KB283842 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 283842
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com