Ich treffe häufig auf diese Situation in meinen VB6-Anwendungen
Private Sub DoSomething
On Error Goto err1
Call ProcessLargeBatch1
Call ProcessLargeBatch2
'... more ...'
Exit Sub
err1:
Call Cleanup 'Specific for DoSomething'
Call HandleError 'General error handling: Logging, message box, ...'
End Sub
Die Bereinigungsprozedur macht manchmal Aktionen rückgängig, rollt eine Transaktion zurück, löscht temporäre Dateien und so weiter. In den meisten Fällen kann dieser Vorgang auch fehlschlagen.
Was muss ich in diesem Fall tun? Ich füge eine On Error Resume Next
in den Error-Handler einfügen, aber das löscht die bestehende Err
Objekt. Hinzufügen eines Fehlerhandlers zu Cleanup
hat das gleiche Problem.
Wie lässt sich am besten sicherstellen, dass die ursprünglichen Fehler weiterhin verarbeitet/protokolliert werden?
EDIT : Ein zusätzliches Problem ist, dass ich den Benutzer auch über den Fehler informieren möchte. Manchmal ist es wichtig, dass die Bereinigung schnell erfolgt, und ich möchte nicht, dass das Meldungsfeld die Anwendung für eine lange Zeit blockiert und die Bereinigung durchführt, nachdem der Benutzer den Fehler bestätigt hat.