Hallo,
ich habe in meinen Datenbanken eine zentrale Fehlertabelle, d.h. Fehler (auch unterdrückte) werden in eine Tabelle eingetragen. Häufen sich Fehler in bestimmten Unterprozeduren und es ist nicht klar ersichtlich, welche Zeile gemeint ist, füge ich Zeilennummern ein und schreibe sie beim Fehler mit ins Protokoll.
Jetzt habe ich allerdings im Protokoll Zeilennummern, die es gar nicht gibt.
Ich nummeriere 4stellig (aus optischen Gründen) und im Protokoll steht eine 5stellige Erl(?).
Ein anderes Protokoll zeigt mir Zeile 1360 mit Code 53 - Datei nicht gefunden als Fehler an, in Zeile 1360 steht
1360 MsgBox "Ich würde jetzt den Updater starten!", 16, _
"Die Softwarestände sind unterschiedlich"
Die Fehlerbehandlung ruft folgende Zeile auf Fehler:
Fehlerprot "ModulAnmelder", "SWCheck", Err.Number, Err.Description, "Erl=" & Erl, True
Resume Ende
End SubUnd das Fehlermodul sieht so aus Public Sub Fehlerprot(Formul As String, _
Proz As String, _
Code As Long, _
Descr As String, _
Optional Zusatz As String, _
Optional KeinHalt As Boolean)
Dim strSQL As String, Aus As Boolean, Info As String
On Error Resume Next
Descr = Replace(Descr, "'", "-")
strSQL = "INSERT INTO tbl_Stoerung (Melder, Comp, Zeit, Programm, Versio, Formelar," _
& "Prozedur, Code, Descr, Zusatz) " _
& "VALUES ('" & Environ("Username") _
& "', '" & Environ("Computername") _
& "', " & SQLNow _
& ", '" & Prog _
& "', " & Versio _
& ", '" & Formul _
& "', '" & Proz _
& "', " & Code _
& ", '" & Descr
If Nz(KeinHalt, False) Then GoTo Sprung
If Code <> 0 Then
If MsgBox("Hm, da habe ich wohl etwas falsch gemacht," & vbCrLf & vbCrLf & _
"(" & Code & ") - " & Descr & vbCrLf & vbCrLf & _
"Soll ich " & Prog & " entnervt beenden?", _
276, "Ein Fehler ist aufgetreten") = vbYes Then Aus = True
End If
Sprung:
If Aus Then
Info = "(Quit) "
ElseIf KeinHalt Then
Info = "(KeinHalt) "
Else
Info = "(Weiter) "
End If
strSQL = strSQL & "', '" & Info & "- " & Nz(Zusatz, "") & "')"
Debug.Print "-------------------------------"
Debug.Print "Fehler in " & Formul, "Prozedur " & Proz
Debug.Print Code & " - " & Descr
Debug.Print "Zusatz: " & Zusatz
Debug.Print "KeinHalt = " & KeinHalt, Zusatz
Debug.Print "-------------------------------"
CurrentDb.Execute strSQL
If Aus Then Abmelden
On Error GoTo 0
End Sub
Ist Erl doch nicht so zuverlässig wie gedacht?
Gruß
Doming
Zitat von: Doming am Dezember 05, 2025, 08:13:32Ist Erl doch nicht so zuverlässig wie gedacht?
Nun ja, was soll denn Erl() gemäß Dokumentation eigentlich tun?
- Spoiler: Das ist eine Fangfrage.
Wenn Programmcode kompiliert wird (auch VBA wird kompiliert), ist es nicht in allen Fällen zuverlässig möglich eine Anweisung im kompilierten Programm eindeutig einer Zeile im ursprünglichen Quellcode zuzuordnen.
Insbesondere mit VBA-64bit gibt es einige Berichte darüber, dass Erl() nicht zuverlässig die Ausgangszeile des Programmcodes zurückgibt.
Es gibt oft sinnvollere Möglichkeiten um die (möglichen) Ursachen von Fehlern im Programmcode bereits im Voraus zu erkennen. Bei deinem Beispiel mit "Datei nicht gefunden" könnte man vor dem Zugriff prüfen, ob eine erforderliche Datei existiert oder nicht.
hm klar, nach dem Kompilieren ist die Codierung anders, wird mir jetzt auch bewusst. Danke
Ich hatte gehofft, mit dem Erl die Fehlerquelle zu identifizieren... na gut.
In den meisten Fällen passt es ja, wobei mich die 5stelligen Erls trotzdem wundern