Ziel: Fehler verstehen, reproduzieren, sauber beheben

Access schmeißt Dir gerne mal ein „Laufzeitfehler 13“ um die Ohren.
Oder: „Datensatz kann nicht gespeichert werden“.
Wenn Du wissen willst, was wirklich los ist – musst Du debuggen.
Nicht raten.

Variante 1: Fehlerprozedur zentral nutzen

Public Sub Fehlerbehandlung(prozedur As String, fehlerNr As Long, beschreibung As String)
    MsgBox "Fehler in " & prozedur & vbCrLf & _
           "Fehlernummer: " & fehlerNr & vbCrLf & _
           "Beschreibung: " & beschreibung, vbCritical
End Sub

Dann in jedem Modul:

Sub Beispiel()
On Error GoTo Fehler

' 
 dein Code 


Exit Sub
Fehler:
    Call Fehlerbehandlung("Beispiel", Err.Number, Err.Description)
End Sub

So erkennst Du, wo es knallt.

Variante 2: Debug.Print fĂŒr ZwischenstĂ€nde

Debug.Print "Aktueller Wert:", Me.ArtikelID, Me.Preis

Das landet im Direktfenster (Strg+G) – ohne MessageBox.

Hilft bei Schleifen, Bedingungen, SQL-AusdrĂŒcken.

Variante 3: SQL-Strings prĂŒfen vor AusfĂŒhrung

Dim sql As String
sql = "SELECT * FROM tblKunde WHERE Name = '" & Me.txtName & "'"
Debug.Print sql

Ergebnis im Direktfenster copy-pasten und im Abfrageeditor ausfĂŒhren.
So findest Du Tippfehler, fehlende Hochkommas oder ungĂŒltige Datumsformate.

Variante 4: On Error Resume Next – nur gezielt

On Error Resume Next
Kill "C:\Temp\datei.csv"
If Err.Number <> 0 Then
    Debug.Print "Löschen fehlgeschlagen:", Err.Description
    Err.Clear
End If

Nie als Standard einsetzen. Nur da, wo Du Fehler erwartest.

Variante 5: Abfragen mit Parametern testen

Kein DLookup("*", "tblKunde", "ID=" & Me.ID)
Sondern:

Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("SELECT * FROM tblKunde WHERE ID=" & Me.ID)

Dann Zeile fĂŒr Zeile prĂŒfen, was drin ist.

Variante 6: Events im Formular checken

Formulare reagieren auf:

  • BeforeUpdate
  • AfterUpdate
  • OnCurrent
  • OnDirty

Wenn Du nicht sicher bist, wann was lÀuft:

Private Sub Form_Current()
    Debug.Print "Form_Current: " & Now()
End Sub

Oder bei Kombifeld:

Private Sub cboKunde_AfterUpdate()
    Debug.Print "Kunde geÀndert: " & Me.cboKunde
End Sub

Variante 7: Application.Echo zur Fehleranalyse

Application.Echo False
' Aktionen
Application.Echo True

Verhindert Flackern und stört Debuggen weniger.
Achtung: Immer True am Ende – sonst bleibt Access „blind“.

Variante 8: Datenbankfenster und Systemobjekte anzeigen

  • Systemtabellen einblenden → Optionen → Navigationsbereich
  • z. B. MSysObjects, MSysRelationships

Hilft beim PrĂŒfen: wurde Tabelle wirklich gelöscht, verknĂŒpft, aktualisiert?

Variante 9: Breakpoints und „Schrittweise ausfĂŒhren“

  • Haltepunkt setzen mit F9
  • Mit F8 Schritt fĂŒr Schritt durch Code
  • Werte mit Maus anzeigen
  • Watch-Fenster nutzen fĂŒr komplexe Bedingungen

Funktioniert zuverlĂ€ssig – solange kein OnError das Ganze unterdrĂŒckt.

Variante 10: Protokolltabelle fĂŒr Fehler anlegen

Public Sub LogFehler(modul As String, meldung As String)
    CurrentDb.Execute "INSERT INTO tblFehlerLog (Zeitpunkt, Modul, Meldung) VALUES (Now(), '" & modul & "', '" & Replace(meldung, "'", "''") & "')"
End Sub

In der Fehlerbehandlung:

LogFehler "frmKundenSpeichern", Err.Number & ": " & Err.Description

Hilft Dir bei produktiven Systemen mit mehreren Usern.

Best Practices

  • kein Code ohne On Error
  • nie Resume Next als globale Lösung
  • jede SQL-Zeile vor dem AusfĂŒhren loggen oder anzeigen
  • keine MessageBox in Schleifen
  • Direktfenster regelmĂ€ĂŸig aufrĂ€umen
  • immer mit festen Prozedurnamen arbeiten („ModulX“)
  • fĂŒr wiederkehrende Fehler (z. B. „Datensatz gesperrt“) gezielte PrĂŒfung einbauen

Fazit fĂŒr Entwickler

Fehler sind nicht schlimm – solange Du weißt, wo sie herkommen.
Access ist alt, aber mit Debug.Print, On Error und etwas Struktur kannst Du alles nachvollziehen.

Categories:

Tags:

No responses yet

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert