Anbieterfehler
Bei einem Anbieterfehler wird der Laufzeitfehler -2147467259 zurückgegeben. Wird dieser Fehler zurückgegeben, überprüfen Sie die Errors-Auflistung des aktiven Connection-Objekts, in der einer oder mehrere Fehler mit einer Beschreibung enthalten sind.
Die ADO-Fehlerauflistung
Da bei einem ADO-Vorgang mehrere Anbieterfehler ausgegeben werden können, stellt ADO über das Connection-Objekt eine Auflistung mit Fehlerobjekten bereit. Diese Auflistung enthält keine Objekte, wenn ein Vorgang erfolgreich abgeschlossen wird, und mindestens ein Error-Objekt, wenn ein Fehler aufgetreten ist und der Anbieter einen oder mehrere Fehler ausgelöst hat. Untersuchen Sie die einzelnen Fehlerobjekte, um die genaue Ursache des Fehlers zu ermitteln.
Sobald Sie die Behandlung von Fehlern abgeschlossen haben, können Sie die Clear-Methode aufrufen, um die Auflistung zu löschen. Es ist äußerst wichtig, die Errors-Auflistung explizit zu löschen, bevor Sie die Methoden Resync, UpdateBatch oder CancelBatch für ein Recordset-Objekt bzw. die Open-Methode für ein Connection-Objekt aufrufen oder die Filter-Eigenschaft für ein Recordset-Objekt festlegen. Durch explizites Löschen der Auflistung können Sie sicher sein, dass die Error-Objekte in der Auflistung nicht von einem vorherigen Vorgang stammen.
Einige Vorgänge können zusätzlich zu Fehlern Warnungen generieren. Warnungen werden ebenfalls durch Error-Objekte in der Errors-Auflistung dargestellt. Wenn ein Anbieter der Auflistung eine Warnung hinzufügt, wird kein Laufzeitfehler generiert. Anhand der Count-Eigenschaft der Errors-Auflistung können Sie herausfinden, ob eine Warnung von einem bestimmten Vorgang generiert wurde. Bei einem Wert von 1 oder höher wurde ein Error-Objekt zur Auflistung hinzugefügt. Sobald Sie festgestellt haben, dass die Errors-Auflistung Fehler oder Warnungen enthält, können Sie die Auflistung durchlaufen und Informationen zu den einzelnen Error-Objekten abrufen. Dies ist im folgenden kurzen Visual Basic-Beispiel gezeigt:
' BeginErrorHandlingVB02
Private Function DeleteCustomer(ByVal CompanyName As String) As Long
On Error GoTo DeleteCustomerError
rst.Find "CompanyName='" & CompanyName & "'"
DeleteCustomerError:
Dim objError As ADODB.Error
Dim strError As String
If cnn.Errors.Count > 0 Then
For Each objError In cnn.Errors
strError = strError & "Error #" & objError.Number & _
" " & objError.Description & vbCrLf & _
"NativeError: " & objError.NativeError & vbCrLf & _
"SQLState: " & objError.SQLState & vbCrLf & _
"Reported by: " & objError.Source & vbCrLf & _
"Help file: " & objError.HelpFile & vbCrLf & _
"Help Context ID: " & objError.HelpContext
Next
MsgBox strError
End If
End Function
' EndErrorHandlingVB02
Die Fehlerbehandlungsroutine enthält eine For Each-Schleife, die die einzelnen Objekte in der Errors-Auflistung untersucht. In diesem Beispiel wird eine zusammenfassende Meldung für die Anzeige erstellt. In einem realen Programm würden Sie Code schreiben, um eine geeignete Aufgabe für die einzelnen Fehler auszuführen (z. B. das Schließen aller offenen Dateien und das ordnungsgemäße Herunterfahren des Programms).
Das Error-Objekt
Wenn Sie ein Error-Objekt untersuchen, können Sie ermitteln, welcher Fehler aufgetreten ist. Noch wichtiger ist aber, dass Sie feststellen können, welche Anwendung oder welches Objekt den Fehler verursacht hat. Das Error-Objekt hat die folgenden Eigenschaften:
Eigenschaftenname | Beschreibung |
---|---|
Beschreibung | Eine Beschreibung des Fehlers, der aufgetreten ist. |
HelpContext, HelpFile | Bezieht sich auf das Hilfethema und die Hilfedatei, das bzw. die eine Beschreibung des aufgetretenen Fehlers enthält. |
NativeError | Die anbieterspezifische Fehlernummer. |
Anzahl | Ein Long Integer zur Darstellung der Fehlernummer (unter ErrorValueEnum aufgeführt). |
Quelle | Gibt den Namen des Objekts oder der Anwendung an, das bzw. die einen Fehler generiert hat. |
SQLState | Ein fünfstelligen Fehlercode, den der Anbieter während des Prozesses einer SQL-Anweisung zurückgibt. |
Das ADO-Objekt Error ähnelt dem Visual Basic-Standardobjekt Err. Die Eigenschaften beschreiben den aufgetretenen Fehler. Zusätzlich zur Fehlernummer erhalten Sie zwei weitere Informationen. Die NativeError-Eigenschaft enthält eine spezifische Fehlernummer für den von Ihnen verwendeten Anbieter. Im vorherigen Beispiel ist der Anbieter der Microsoft OLE DB-Anbieter für SQL Server. Folglich enthält NativeError SQL Server-spezifische Fehler. Die SQLState-Eigenschaft verfügt über einen Fünf-Buchstaben-Code, der einen Fehler in einer SQL-Anweisung beschreibt.
Ereignisbezogene Fehler
Das Error-Objekt wird auch verwendet, wenn ereignisbezogene Fehler auftreten. Sie können ermitteln, ob ein Fehler im Prozess aufgetreten ist, der ein ADO-Ereignis ausgelöst hat, indem Sie das als Ereignisparameter übergebene Error-Objekt überprüfen.
Wenn der Vorgang, der ein Ereignis auslöst, erfolgreich abgeschlossen wird, wird der adStatus-Parameter des Ereignishandlers auf adStatusOK gesetzt. Ist der Vorgang, der das Ereignis ausgelöst hat, nicht erfolgreich, wird der adStatus-Parameter auf adStatusErrorsOccurred gesetzt. In diesem Fall enthält der pError-Parameter ein Error-Objekt, das den Fehler beschreibt.