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.
No responses yet