Fehlerbehandlung

cybergnom

Mitglied
Hallo,

ich habe folgnedes Problem:

Ich habe eine Anwendung im Hintergrund laufen, die per Timer alle 5 Minuten aktualisiert wird.
Leider tritt in unregelmäßigen Abständen ein Fehler ("Request timed out") auf, durch den die Anwendung beendet wird.

Ich habe versucht, dass Problem mit nem ErrorHandler zu lösen. Das Problem ist jedoch, dass der Eintrag ins LogFile am Ende immer vorgenommen wird und nicht nur bei einem auftretenden Fehler.
Mein Code sieht folgendermaßen aus:


Sub Form Load()
On Error GoTo form_ErrorHandler

.
.
.
.
.

form_Errorhandler:

schreibe Fehler in ein Logfile und überspringe den Fehler im Programm


Ziel ist es, bei Auftreten eines Fehlers den Fehler in einem LogFile zu dokumentieren, das Program aber weiterhin auszuführen (den Fehler quasi zu ignorieren).

Kann mir da jemand weiterhelfen?

MfG
cyber
 
Exit Sub

Vor der Sprungmarke Deines Error-Handlers solltest Du ein

Exit Sub

einfügen, damit die Prozedur, wenn sie ordentlich durchgelaufen ist, nicht auch noch die Fehlerroutine aufruft.
 
Exit Sub einfügen

Try this

Code:
Sub Form Load()
On Error GoTo form_ErrorHandler

.
.
.
.
.

Exit Sub
form_Errorhandler:

schreibe Fehler in ein Logfile und überspringe den Fehler im Programm
End Sub
 
Ziel ist es, bei Auftreten eines Fehlers den Fehler in einem LogFile zu dokumentieren, das Program aber weiterhin auszuführen (den Fehler quasi zu ignorieren).

nimm doch
on error resume next
.
.
.
.

if err.number <> 0 then

'Fehler

end if

so ähnlich. also so macht man das, wenn das programm weiter laufen soll, auch wenns einen fehler gibt.
ansonsten halt

on error goto fehler
.
.
.
exit sub/function
fehler:
writeLog
end sub/function
 
Resume Next

Wird bei Verwendung von Resume Next nicht immer nur der letzte Fehler vor der If-Anweisung ausgegeben? Hatte auch daran gedacht, aber da es nur ein "err" zum abfragen gibt, wird dieses von jedem neuen Fehler überschrieben.

P.S.: Falls unbegründeter Weise immer derselbe Fehler auftritt: err einfach mal wieder auf 0 setzen. Das passiert nicht automatisch, und ich hab daran mal drei Stunde Fehlersuchen verschwendet... *grummel*
 
das glaub ich *g*
aber das resume next benutz ich so gut wie nie, aber für manche zwecke ist es halt sinnvoll.

stimmt schon, immer schön set err = nothing setzen, sonst nicht gut :)
 
hi Ihr

Kann sein dass ich mich schon zu Spät melde, aber ich hätte da eine Idee die Dir für Deine Protokollierung hilft

Private Sub Form_Load()
Dim strFehler as str
On Error Goto Fehler
' symbolische Programmzeilen!
strFehler = "x = y"
x = y: strFehler = "a = z" ' 1. Programmzeile
a = z ' 2. Programmzeile


Exit Sub
Fehler:
WritePrivatePRofileString("Form_Load", "ErrorNr", Cstr(Err.Number), app.path & "\err.ini"
WritePrivatePRofileString("Form_Load", "ErrorPos", "(" & strFehler & ")", app.path & "\err.ini"
End Sub

Wenn der Fehler in der 2. Programmzeile war steht in Deiner ini-Datei

[FormLoad]
ErrorNr=13
ErrorPos=(a = z)

und Du weist wo welcher Fehler war

mbg
rossegger robert
 
Zurück