Freigeben über


Öffnen von ADO-Verbindungs- und Recordsetobjekten

In diesem Artikel wird erläutert, wie ADO-Verbindungs- und Recordset-Objekte geöffnet werden.

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 finden Sie Beispielcode für verschiedene gängige Techniken für jedes Objekt.

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. Diese Verbindungszeichenfolge ist vom Anbieter abhä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 Recordset-Objekts.
  • Durch Übergeben des ODBC-Datenquellennamens und optional der Benutzer-ID und des Kennworts an die Methode des Open() Connection-Objekts.

Es gibt drei Möglichkeiten zum Öffnen eines Recordset-Objekts in ADO:

  • Durch Öffnen des Recordset-Objekts aus der Connection.Execute() Methode.
  • Durch Öffnen des Recordset-Objekts aus der Command.Execute() Methode.
  • 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.

In diesem Code wird davon ausgegangen, dass Nwind.mdb mit Visual Basic installiert ist und sich in der Datei 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 observante Reader wird feststellen, dass ein einfacher Fehlerhandler für die RecordSet.Open Beispiele wirksam ist. Im Falle eines Fehlers beim Öffnen eines RecordSet-Objekts sollte ADO den explizitsten Fehler des OLEDB-Anbieters zurückgeben. Einige häufige Fehler, die mit dem vorherigen Code auftreten können.

Wenn Sie den Parameter DefaultDir in der Verbindungszeichenfolge weglassen (oder einen Fehler enthält), wird möglicherweise der folgende Fehler angezeigt:

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

Wenn der Dbq-Parameter in der Verbindungszeichenfolge einen Fehler enthält, wird möglicherweise die folgende Fehlermeldung angezeigt:

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

Die vorstehenden Fehler füllen auch die Sammlung von Verbindungsfehlern mit den folgenden Fehlern auf:

ADO-Fehler # -2147467259
Beschreibung [Microsoft][ODBC-Treiber-Manager] Treiber
SQLSetConnectAttr fehlgeschlagen
Microsoft OLE DB-Quellanbieter für ODBC-Treiber

ADO-Fehler # -2147467259
Fehler bei der Beschreibungsanmeldung
Microsoft OLE DB-Quellanbieter für ODBC-Treiber

Notiz

Für jeden Fehler ist die ADO-Fehlernummer identisch, in diesem Fall wird in 0x80004005 übersetzt, was die generische E_FAIL Fehlermeldung ist. Die zugrunde liegende Komponente hat keine bestimmte Fehlernummer für die aufgetretene Bedingung, aber nützliche Informationen wurden nie von weniger auf ADO ausgelöst.

References