Öffnen von ADO-Verbindungs- und Recordset-Objekten

In diesem Artikel wird beschrieben, wie Sie ADO-Verbindungen und Recordset-Objekte öffnen.

Ursprüngliche Produktversion: SQL Server
Ursprüngliche KB-Nummer: 168336

Zusammenfassung

ActiveX Data Objects (ADO) bietet mehrere Möglichkeiten zum Öffnen der Connection- und Recordset-Objekte. In diesem Artikel wird Beispielcode für mehrere gängige Techniken für jedes Objekt vorgestellt.

Weitere Informationen

Es gibt mehrere Möglichkeiten, ein Connection-Objekt in ADO zu öffnen:

  • Durch Festlegen der ConnectionString Eigenschaft auf eine gültige Connect-Zeichenfolge und anschließendes Aufrufen der Open() -Methode. Dieser Verbindungszeichenfolge ist anbieterabhängig.
  • Durch Übergeben einer gültigen Connect-Zeichenfolge an das erste Argument der Open() Methode.
  • Durch Übergeben eines gültigen Command-Objekts an das erste Argument der Open-Methode eines Recordsets.
  • Durch Übergeben des ODBC-Datenquellennamens und optional der Benutzer-ID und des Kennworts an die -Methode des Verbindungsobjekts Open() .

Es gibt drei Möglichkeiten, ein Recordset-Objekt in ADO zu öffnen:

  • Indem Sie das Recordset aus der Connection.Execute() -Methode öffnen.
  • Indem Sie das Recordset aus der Command.Execute() -Methode öffnen.
  • Durch Öffnen des Recordset-Objekts ohne Connection- oder Command-Objekt und Übergeben einer gültigen Connect-Zeichenfolge an das zweite Argument der Recordset.Open() Methode.

Bei diesem Code wird davon ausgegangen, dass Nwind.mdb mit Visual Basic installiert ist und sich im C:\Program Files\DevStudio\VB directorybefindet:

Option Explicit

Private Sub cmdOpen_Click()

    Dim Conn1 As New adodb.Connection
    Dim Cmd1 As New adodb.Command
    Dim Errs1 As Errors
    Dim Rs1 As New adodb.Recordset
    
    Dim i As Integer
    Dim AccessConnect As String
    
    ' Error Handling Variables
    Dim errLoop As Error
    Dim strTmp As String
    
    AccessConnect = "Driver={Microsoft Access Driver (*.mdb)};" & _
    "Dbq=nwind.mdb;" & _
    "DefaultDir=C:\program files\devstudio\vb;" & _
    "Uid=Admin;Pwd=;"
    
    '---------------------------
    ' Connection Object Methods
    '---------------------------
    
    On Error GoTo AdoError ' Full Error Handling which traverses
    ' Connection object
    
    ' Connection Open method #1: Open via ConnectionString Property
    Conn1.ConnectionString = AccessConnect
    Conn1.Open
    Conn1.Close
    Conn1.ConnectionString = ""
    
    ' Connection Open method #2: Open("[ODBC Connect String]","","")
    Conn1.Open AccessConnect
    Conn1.Close
    
    ' Connection Open method #3: Open("DSN","Uid","Pwd")
    Conn1.Open "Driver={Microsoft Access Driver (*.mdb)};" & _
    "DBQ=nwind.mdb;" & _
    "DefaultDir=C:\program files\devstudio\vb;" & _
    "Uid=Admin;Pwd=;"
    Conn1.Close
    
    '--------------------------
    ' Recordset Object Methods
    '--------------------------
    
    ' Don't assume that we have a connection object.
    On Error GoTo AdoErrorLite
    
    ' Recordset Open Method #1: Open via Connection.Execute(...)
    Conn1.Open AccessConnect
    Set Rs1 = Conn1.Execute("SELECT * FROM Employees")
    Rs1.Close
    Conn1.Close
    
    ' Recordset Open Method #2: Open via Command.Execute(...)
    Conn1.ConnectionString = AccessConnect
    Conn1.Open
    Cmd1.ActiveConnection = Conn1
    Cmd1.CommandText = "SELECT * FROM Employees"
    Set Rs1 = Cmd1.Execute
    Rs1.Close
    Conn1.Close
    Conn1.ConnectionString = ""
    
    ' Recordset Open Method #3: Open via Command.Execute(...)
    Conn1.ConnectionString = AccessConnect
    Conn1.Open
    Cmd1.ActiveConnection = Conn1
    Cmd1.CommandText = "SELECT * FROM Employees"
    Rs1.Open Cmd1
    Rs1.Close
    Conn1.Close
    Conn1.ConnectionString = ""
    
    ' Recordset Open Method #4: Open w/o Connection & w/Connect String
    Rs1.Open "SELECT * FROM Employees", AccessConnect, adOpenForwardOnly
    Rs1.Close
    
    Done:
    Set Rs1 = Nothing
    
    Set Cmd1 = Nothing
    Set Conn1 = Nothing
    
    Exit Sub
    
    AdoError:
    i = 1
    On Error Resume Next
    
    ' Enumerate Errors collection and display properties of
    ' each Error object (if Errors Collection is filled out)
    Set Errs1 = Conn1.Errors
    For Each errLoop In Errs1
        With errLoop
            strTmp = strTmp & vbCrLf & "ADO Error # " & i & ":"
            strTmp = strTmp & vbCrLf & " ADO Error # " & .Number
            strTmp = strTmp & vbCrLf & " Description " & .Description
            strTmp = strTmp & vbCrLf & " Source " & .Source
            i = i + 1
        End With
    Next
    
    AdoErrorLite:
    ' Get VB Error Object's information
    strTmp = strTmp & vbCrLf & "VB Error # " & Str(Err.Number)
    strTmp = strTmp & vbCrLf & " Generated by " & Err.Source
    strTmp = strTmp & vbCrLf & " Description " & Err.Description
    
    MsgBox strTmp
    
    ' Clean up gracefully without risking infinite loop in error handler
    On Error GoTo 0
    GoTo Done
End Sub

FEHLERHINWEISE

Nur das ADO Connection-Objekt verfügt über eine Fehlerauflistung. Der aufmerksame Leser wird feststellen, dass für die RecordSet.Open Beispiele ein einfacher Fehlerhandler wirksam ist. Im Falle eines Fehlers beim Öffnen eines RecordSet-Objekts sollte ADO den explizitsten Fehler vom OLEDB-Anbieter zurückgeben. Es folgen einige häufige Fehler, die beim vorherigen Code auftreten können.

Wenn Sie den DefaultDir-Parameter in der Verbindungszeichenfolge auslassen (oder einen Fehler enthält), erhalten Sie möglicherweise den folgenden Fehler:

ADO-Fehler # -2147467259
Beschreibung [Microsoft][ODBC Microsoft Access 97-Treiber] '(unbekannt)'
ist kein gültiger Pfad. Stellen Sie sicher, dass der Pfadname lautet.
richtig geschrieben und dass Sie mit dem Server verbunden sind
In dem sich die Datei befindet.
Quell-Microsoft OLE DB-Anbieter für ODBC-Treiber

Wenn der Dbq-Parameter in der Verbindungszeichenfolge einen Fehler enthält, erhalten Sie möglicherweise den folgenden Fehler:

ADO-Fehler # -2147467259 Beschreibung [Microsoft][ODBC Microsoft Access 97-Treiber] Datei "(unbekannt)" konnte nicht gefunden werden.
Quell-Microsoft OLE DB-Anbieter für ODBC-Treiber

Die obigen Fehler füllen auch die Auflistung von Verbindungsfehlern mit den folgenden Fehlern auf:

ADO-Fehler # -2147467259
Beschreibung [Microsoft][ODBC-Treiber-Manager] Treiber
FEHLER BEI SQLSetConnectAttr
Quell-Microsoft OLE DB-Anbieter für ODBC-Treiber

ADO-Fehler # -2147467259
Beschreibung: Fehler bei der Anmeldung
Quell-Microsoft OLE DB-Anbieter für ODBC-Treiber

Hinweis

Für jeden Fehler ist die ADO-Fehlernummer identisch. In diesem Fall wird in 0x80004005 übersetzt. Dies ist die generische E_FAIL Fehlermeldung. Die zugrunde liegende Komponente verfügte nicht über eine bestimmte Fehlernummer für die aufgetretene Bedingung, aber nützliche Informationen wurden nie weniger an ADO ausgegeben.

References