Service: Visual-Basic 6.0 Tipps: Fehlerbehandlungscode
Diejenigen, die außer mit VB auch mit anderen Programmiersprachen arbeiten, kennen sicherlich die unangenehme Einschränkung von VB: Es gibt keine 'Try'-Konstruktion. Statt dessen müssen wir uns mit der für Puristen inakzeptablen 'On Error Goto'-Konstruktion herumschlagen. Sei es drum: Nach meiner Kenntnis ist es 'gute Praxis', Fehlerbehandlungscode zu schreiben, der in etwa wie folgt aufgebaut ist:
ErrorHandler:
Select Case Err.Number
Case 91 ' Objektvariable nicht gesetzt
' Erzeugen der Objektvariablen oder sonstwas
' ...
Resume
Case 500 ' Ein anderer 'behandelbarer' Fehler
' Fehler beseitigen
' ...
Resume Next
Case Else ' alle unvorhergesehenen Fehler
sMSG = "Ein unvorhergesehener Fehler ist aufgetreten: "
sMSG = sMSG & Err.Description & " (" & Err.Number & ")"
MsgBox sMSG, vbException, "Fehler"
Exit Sub
End Select
In Anbetracht meiner - in VB - eingeschränkten Möglichkeiten ist das doch auch OK so, oder? Nein! Doch! Nein! Warum nicht? Prüfen Sie doch bitte noch einmal diesen Fehlerbehandlungscode und überlegen Sie genau!
Was passiert, wenn in dieser Fehlerbehandlung z.B. im Abschnitt 'Case 91' ein Fehler auftritt? Genau: Das Programm stürzt gnadenlos ab! Sie werden jetzt sagen: 'Aber ein Fehler in der Fehlerbehandlung! So etwas gibt es doch gar nicht.' Wirklich nicht? Warum sollte irgend jemand davor sicher sein, einen Fehler in die Fehlerbehandlung einzubauen, wenn niemand davor sicher ist, einen Fehler in den 'normalen' Code einzubauen?
1. Sichern Sie bereits Ihren 'regulären' Code gegen Fehler ab. Wenn Sie also damit rechnen müssen, dass Sie auf eine nicht instanziierte Objektvariable stoßen könnten (Fehler 91), dann prüfen Sie das, bevor Sie auf die Objektvariable zugreifen.
2. Halten Sie Ihre Fehlerbehandlung kurz! Gehen Sie davon aus, dass Ihre Fehlerbehandlung nur in wirklich unvorhergesehenen Fällen zum Tragen kommt (da Sie ja Ihren 'regulären' Code ausreichend abgesichert haben). Beispiel:
Private Sub ReadFromObject()
' HINWEISE:
' MyObject ist eine globale oder modul-globale Objektvariable
' sMSG ist eine globale Zeichenkettenvariable
On Error Goto ErrReadFromObject
If MyObject Is Nothing Then
Set MyObject = New CMyClass
MyObject.Create
End If
' Hier wird jetzt mit 'MyObject' gearbeitet
With MyObject
.DoThis
.DoThat
' ...
End With
Exit Sub
ErrReadFromObject:
sMSG = "Error: " & Err.Number & " - " & Err.Description
MsgBox sMSG, vbInformation, App.Title
End Sub
Diese Vorgehensweise hat einen entscheidenden Vorteil: Da der Fehlerbehandlungscode einfach ist, wird es Ihnen nicht schwer fallen, ihn zu schreiben.
Oft genug sehen wir VB-Code ohne irgend eine Fehlerbehandlung und haben den Eindruck, dass viele Entwickler die Mühe scheuen, die mit einer umfangreichen Fehlerbehandlung verbunden ist. Insofern möchte ich jedem Entwickler empfehlen, lieber eine einfache aber vorhandene Fehlerbehandlung (wie im vorhergehenden Beispiel) in alle Routinen einzufügen, als ein geplante, aufwändige Fehlerbehandlung, die aber nicht wirklich vorhanden ist.
Übrigens: Meine 'VBExtensionTools' machen es Ihnen sehr leicht, einen Rahmen für eine Routine zu erstellen, der bereits eine Fehlerbehandlung in der oben beschriebenen Art enthält (oder vorhandene Routinen um eine solche Fehlerbehandlung zu ergänzen)! Darüber hinaus machen es Ihnen die VBExtensionTools auch sehr leicht, andere Mechanismen (wie z.B. für Fehlersuche und Fehlerbeseitigung) in Ihre Routinen aufzunehmen.
Wenn Sie wissen wollen, was so alles auf Ihrem PC passiert!
Tischrechner als Software.
Jetzt herunterladen und kostenlos testen!
Tastenkombinationen können PC-Arbeit erheblich beschleunigen.
Eine Reihe von kostenlosen Online-Berechnungen zur Erleichterung der täglichen Arbeit.
Sicherheit im PC-Bereich
Es existiert eine kostenlose, einfache und äußert effektive Methode, fast alle Viren, Trojaner, Würmer ...