Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Erl unplausibel

Begonnen von Doming, Dezember 05, 2025, 08:13:32

⏪ vorheriges - nächstes ⏩

Doming

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 Sub
Und 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

PhilS

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.



Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Doming

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