Seite 1 von 1

modErrorHandler

BeitragVerfasst: Fr 16. Mai 2014, 16:32
von Dmitry
Hi,
eine Frage zum ErrorHanlder.
Wofür braucht man m_conDefaultErrorResumeMode ? Und dann auch in Funktionen immer select case für die Modes?
in welchem Fall was bringt mir das?

Was ich mir vorstellen könnte.
Es gibt eine Funktion, mit Fehlerbehandlung, mit nicht definiertem "wie läuft es weiter".
So kann der Handler abhängig von m_conDefaultErrorResumeMode selbst "entscheiden"
Dann sollte aber drin sowas wie "Property Let DefaultResumeMode" existieren oder?
Oder muss man den Modul manuell bearbeiten? (z.b. #IF DEBUG ...)
Oder wie war es gedacht?


Noch dazu möchte ich vorschlagen den Handler leichter zu machen und zwar:
Code: Alles auswählen
'alias for HandleError
Public Function hErr(Optional ByVal sSource As String, _
                     Optional ByVal sErrDescription As String, _
                     Optional ByVal lErrorNumber As Long, _
                     Optional ByVal lErrHandlerMode As ACLibErrorHandlerMode = m_conDefaultErrorHandlerMode _
                   ) As ACLibErrorResumeMode
    If sSource = vbNullString Then
        sSource = Err.Source
    End If
    If lErrorNumber = 0 Then
        lErrorNumber = Err.Number
    End If
   
    hErr = HandleError(lErrorNumber, sSource, sErrDescription, lErrHandlerMode)
End Function

somit kann man nur
Code: Alles auswählen

x_ErrorHandler:
     Call hErr("Class Y . Method X")
 
z.B. aufrufen.


Danke im Voraus.

Re: modErrorHandler

BeitragVerfasst: Sa 17. Mai 2014, 18:49
von Josef Pötzl
Hallo!

ResumeMode ist dazu gedacht, falls von "außen" auf den Fehler reagiert und eventuell die Fehlerursache behoben wurde, den Anwendungscode weiterlaufen zu lassen.
Im Prinzip wie z. B. bei NotInList bei der Combobox.

Ob das in den jeweiligen Prozeduren Sinn macht, hängt von deren Inhalt ab.
Was keinesfalls passieren darf: in einer Prozedur nur eine Messagebox mit der Fehlerbeschreibung anzeigen und dann die Prozedur abbrechen, ohne den Fehler nach oben weiterzuschieben falls der Fehler nicht behoben wurde bzw. ignoriert werden soll.
Ich selbst bevorzuge in für die Fehlerbehandlung den vbWatchdog, daher baue ich bei Modulen auch gerne per Compiler-Anweisung die Möglichkeit ein, die VBA-Feherbehandlung komplett zu deaktivieren bzw. bau nur dort eine Fehlerbehandlung ein, wo ich bewusst einen bestimmten Fehler abfangen will.

Anm.: Zum Thema "Feherbehandlung" gibt es diesen Thread: viewtopic.php?f=4&t=23

mfg
Josef

Re: modErrorHandler

BeitragVerfasst: Mi 21. Mai 2014, 15:27
von Dmitry
Danke für die Antwort.
Ok, d.h., dass modErrorHandler so eine ClassenVorlage + schon funktionierender ErrorHandler-Modul ist, den man vllt noch anpassen muss?
da selbst bei dem Handler als Modul, nichts geändert wird und immer standard resume mode zurückgegeben wird.
(und deswegen auch die Zeile:
Code: Alles auswählen
procHandleError = m_conDefaultErrorResumeMode    ' Das würde erst bei einer Klasse etwas bringen
)
So, habe ich nun richtig verstanden?


vbWatchdog sieht wirklich vielversprechend aus, nur leider kostenpflichtig.

Re: modErrorHandler

BeitragVerfasst: Fr 23. Mai 2014, 08:47
von Josef Pötzl
Hallo!

Ich setzte z. B. (bevor ich komplett auf vbWatchdog umgestiegen bin) eine Error-Handler-Klasse ein, die bei bestimmten Fehlern (z. B. Connection-Timeout zum Server) ein Ereignis auslöste, das wiederum von einer anderen Klasse abgefangen und zu beheben versucht wurde. Wenn z. B. die Verbindung wieder aufgebaut wurde, wurde der passende Resumemode zurückgegeben.

off-topic:
vbWatchdog sieht wirklich vielversprechend aus, nur leider kostenpflichtig.

Wenn man den Aufwand betrachtet, den man selbst für den Einbau einer allgemeinen Fehlerbehandlung hat, ist der vbWatchdog meiner Meinung nach sehr günstig.


mfg
Josef