ADO-Laufzeitfehler

ADO-Fehler werden Ihrem Programm als Laufzeitfehler gemeldet. Sie können den Fehlerabfangmechanismus Ihrer Programmiersprache verwenden, um sie abzufangen und zu beheben. In Visual Basic verwenden Sie z. B. die Anweisung On Error. In Visual C++ hängt es von der Methode ab, die Sie verwenden, um auf die ADO-Bibliotheken zuzugreifen. Bei #import verwenden Sie einen Try-Catch-Block. Andernfalls müssen C++-Programmierer das Fehlerobjekt explizit abrufen, indem sie GetErrorInfo aufrufen. Die folgende Visual Basic-Unterprozedur veranschaulicht, wie ein ADO-Fehler abgefangen wird:

' BeginErrorHandlingVB01
Private Sub Form_Load()
' Turn on error handling
On Error GoTo FormLoadError

'Open the database and the recordset for processing.
'
Dim strCnn As String
strCnn = "Provider=sqloledb;" & _
    "Data Source=a-iresmi2000;" & _
    "Initial Catalog=Northwind;Integrated Security=SSPI"

' cnn is a Public Connection Object because
' it was defined WithEvents
Set cnn = New ADODB.Connection
cnn.Open strCnn

' The next line of code intentionally causes
' an error by trying to open a connection
' that has already been opened.
cnn.Open strCnn

' rst is a Public Recordset because it
' was defined WithEvents
Set rst = New ADODB.Recordset
rst.Open "Customers", cnn

Exit Sub

' Error handler
FormLoadError:
    Dim strErr As String
    Select Case Err
        Case adErrObjectOpen
            strErr = "Error #" & Err.Number & ": " & Err.Description & vbCrLf
            strErr = strErr & "Error reported by: " & Err.Source & vbCrLf
            strErr = strErr & "Help File: " & Err.HelpFile & vbCrLf
            strErr = strErr & "Topic ID: " & Err.HelpContext
            MsgBox strErr
            Debug.Print strErr
            Err.Clear
            Resume Next
        ' If some other error occurs that
        ' has nothing to do with ADO, show
        ' the number and description and exit.
        Case Else
            strErr = "Error #" & Err.Number & ": " & Err.Description & vbCrLf
            MsgBox strErr
            Debug.Print strErr
            Unload Me
    End Select
End Sub
' EndErrorHandlingVB01

Mit dieser Form_Load-Ereignisprozedur wird absichtlich ein Fehler erstellt, indem versucht wird, dasselbe Connection-Objekt zweimal zu öffnen. Wenn die Open-Methode zum zweiten Mal aufgerufen wird, wird der Fehlerhandler aktiviert. In diesem Fall ist der Fehler vom Typ adErrObjectOpen, sodass der Fehlerhandler die folgende Meldung anzeigt, bevor das Programm weiter ausgeführt wird:

Error #3705: Operation is not allowed when the object is open.
Error reported by: ADODB.Connection
Help File: E:\WINNT\HELP\ADO260.CHM Topic ID: 1003705

Die Fehlermeldung enthält die einzelnen Informationen, die vom Visual Basic-Err-Objekt bereitgestellt wurden, mit Ausnahme des Werts LastDLLError, der hier keine Anwendung findet. An der Fehlernummer erkennen Sie, welcher Fehler aufgetreten ist. Die Beschreibung ist hilfreich, wenn Sie den Fehler nicht selbst behandeln möchten. Sie können sie einfach an den Benutzer übergeben. Obwohl Sie in der Regel Nachrichten verwenden möchten, die für Ihre Anwendung angepasst sind, können Sie nicht jeden Fehler vorhersehen und die Beschreibung enthält einen Hinweis darauf, was schiefgegangen ist. In dem Beispielcode wurde der Fehler vom Connection-Objekt gemeldet. Hier werden der Typ oder die programmgesteuerte ID des Objekts angezeigt und kein Variablenname.

Hinweis

Das Visual Basic Err-Objekt enthält nur Informationen zum zuletzt aufgetretenen Fehler. Die ADO-Errors-Auflistung des Connection-Objekts enthält ein Error-Objekt für jeden Fehler, der beim letzten ADO-Vorgang aufgetreten ist. Verwenden Sie die Errors-Auflistung anstelle des Err-Objekts, um mehrere Fehler zu behandeln. Weitere Informationen zur Errors-Auflistung finden Sie unter Anbieterfehler. Wenn jedoch kein gültiges Connection-Objekt vorhanden ist, ist das Err-Objekt die einzige Quelle für Informationen über ADO-Fehler.

Welche Arten von Vorgängen führen wahrscheinlich zu ADO-Fehlern? Häufige ADO-Fehler treten z. B. beim Öffnen eines Objekts, wie z. B. eines Connection- oder Recordset-Objekts, bei dem Versuch, Daten zu aktualisieren oder beim Aufrufen einer Methode oder Eigenschaft, die von Ihrem Anbieter nicht unterstützt wird.

OLE DB-Fehler können auch an Ihre Anwendung als Laufzeitfehler in der Errors-Auflistung übergeben werden.

Im folgenden Thema finden Sie weitere Informationen zu ADO-Fehlern.