Unsere Webseiten benötigen JavaScript. Dies scheint in Ihrem Browser jedoch deaktiviert zu sein.

News & Tipps zu Microsoft Access

Lesen Sie hier einige der besten Beiträge aus SmartTools Access Weekly sowie ausgewählte Inhalte anderer E-Mail-Newsletter von SmartTools Publishing rund um Microsoft Access.

Beitrag aus SmartTools Access Weekly

Zugriff auf Tabellen effektiv debuggen, Teil 2

Access 365 2024 2021 2019 2016 2013 2010

Wenn Sie in Ihren Datenbanken VBA-Routinen mit Zugriff auf Tabellen entwickeln, treten regelmäßig Fehler mit kryptischen Fehlernummern und wenig hilfreichen Hinweistexten auf. Lesen Sie in diesem Tipp, wie Sie in diesen Fällen dem Fehler schneller auf die Schliche kommen können. Im ersten Teil hatten wir erläutert, dass Access Fehler aus unteren Schichten (ODBC-Treiber, SQL Server) nicht einfach ignoriert, sondern sie lediglich nicht über das "Err"-Objekt anzeigt. Festgehalten werden die Fehler dennoch in einer Auflistung "Errors" des Objektes "DBEngine" (DAO) oder "Connection" (ADO).

Dabei geht Access so vor, dass für jeden Fehler ein Error-Objekt in die Auflistung "Errors" aufgenommen wird. Das letzte Error-Objekt ist Basis des Access-Laufzeitfehlers, die davor liegenden Error-Objekte beinhalten Informationen beispielsweise der Jet-Engine, der Database Engine, des ODBC-Treibers oder einer SQL-Komponente und zwar in der Reihenfolge, in der sie für den jeweiligen Datenzugriff angesprochen werden. Für die Auswertung hatten wir die Prozedur "ListErrors" für den Einsatz mit Datenzugriffen per DAO vorgestellt.

Die folgende Prozedur hilft Ihnen nun, diese Fehlerhistorie bei Datenzugriffen per ADO übersichtlich auszugeben. Kopieren Sie sie zunächst in ein neues oder vorhandenes Modul Ihres VBA-Projektes und richten Sie einen Verweis auf mindestens "Microsoft ActiveX Data Objects 2.8 Library" ein:

Sub ListErrors(blnMsg As Boolean)
  Dim objErr As Error
  Dim strDebug As String
  Dim strMsg As String

  On Error Resume Next
  If CurrentProject.Connection.Errors.Count = 0 Then
    Debug.Print "Keine Fehler protokolliert..."
  Else
    For Each objErr In CurrentProject.Connection.Errors
      With objErr
        strDebug = "Fehler: " & _
                   CStr(.Number) & vbCrLf & _
                   "Ursache: " & _
                   .Description & vbCrLf & _
                   "Quelle: " & _
                   .Source & vbCrLf
        strMsg = strDebug & strMsg
      End With
      Debug.Print strDebug
    Next objErr
    If blnMsg Then MsgBox strMsg
  End If

End Sub

Die Prozedur arbeitet im Großen und Ganzen wie "ListErrors" für DAO, mit dem Unterschied, dass die "Errors"-Auflistung hier statt an "DBEngine" an "CurrentProject.Connection" gebunden ist. Sie schreibt die Fehlerhistorie in das Direktfenster der VBA-Entwicklungsumgebung und zeigt sie wahlweise abschließend über "MsgBox" als Zusammenfassung an. Ausgegeben werden jeweils die Fehlernummer, die Klartextmeldung der jeweiligen Komponente sowie die Bezeichnung der Quelle, die den Fehler gemeldet hat. In Ihrer Datenbank setzen Sie "ListErrors" dann beispielsweise folgendermaßen ein:

On Error Resume Next
.....
Dim rs As New ADODB.Recordset
rs.Open "SELECT * FROM VerknüpfteTabelle", _
        CurrentProject.AccessConnection
If Err <> 0 Then
  ListErrors True
  Exit Sub
End If
.....

Mit dem Parameter "blnMsg" steuern Sie wieder, ob "ListErrors" eine Zusammenfassung per "MsgBox" anzeigen soll (= True) oder nicht (= False) und die Informationen somit nur im Direktbereich ausgegeben werden.