Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 5/2012.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Zusammenfassung

Integrieren Sie eine Fehlerbehandlung in Ihre Anwendung, die nur wenige Zeilen Code erfordert.

Techniken

VBA

Voraussetzungen

Access 2000 und höher

Beispieldateien

KundenVertraegeAnschreiben.accdb

Shortlink

www.access-im-unternehmen.de/856

Fehlerbehandlung in der Praxis

André Minhorst, Duisburg

Die Fehlerbehandlung ist, wenn man sie konsequent betreibt, erstens eine Menge Schreibarbeit und zweitens, wenn man die Fehlerbehandlung halbautomatisch hinzufügt, eine Fehlerquelle. Mit dem Einsatz von vbWatchdog sieht das anders aus. Dieser Beitrag zeigt, wie sich diese Methode der Fehlerbehandlung im Praxiseinsatz bewährt.

Das Tool vbWatchdog haben wir bereits im Beitrag Fehlerbehandlung mit vbWatchdog (www.access-im-unternehmen.de/779) vorgestellt. Im vorliegenden Beitrag schauen wir uns ein Beispiel einer in einer Anwendung eingesetzten Fehlerbehandlung an, die zwei verschiedene Modi zulässt - einen für den Produktiveinsatz und einen für die Entwicklung.

vbWatchdog können Sie unter folgendem Link herunterladen:

http://www.everythingaccess.com/vbwatchdog.htm

Dort gibt es auch eine kostenlose Testversion.

Nach der Installation finden Sie im VBA-Editor einen Menü-Eintrag namens Add-Ins|vbWatchdog|Add vbWatchdog to this project, mit dem Sie schlicht und einfach ein paar Klassen zum aktuellen VBA-Projekt hinzufügen. Schließlich müssen Sie die Fehlerbehandlung noch aktivieren, wobei Sie gegebenenfalls sogar verschiedene Fehlerbehandlungen verwenden können.

Im Beispiel dieses Beitrags, der Datenbank aus dem Beitrag Kunden, Verträge und Anschreiben verwalten (www.access-im-unternehmen.de/854), kommen gleich zwei verschiedene Fehlerbehandlungen zum Einsatz.

Die erste ist für den Produktiveinsatz gedacht und liefert im Falle eines Fehlers eine Fehlermeldung, die den Benutzer nicht mit unnötigen und nichtssagenden Informationen belastet, sondern diesem schlicht und einfach die Möglichkeit bietet, die Fehlerinformationen zum Entwickler der Anwendung zu senden. Diese Fehlermeldung sieht beispielsweise wie in Abb. 1 aus.

pic001.png

Abb. 1: Für den Benutzer gedachte Fehlermeldung

Ein Klick auf die Schaltfläche Mit Outlook per E-Mail senden führt dann zum Öffnen einer E-Mail mit einigen Informationen, die dem Entwickler beim Beheben des Fehlers behilflich sein könnten (s. Abb. 2).

pic002.png

Abb. 2: Fehlermeldung per E-Mail

Der Benutzer kann den Inhalt der Fehlermeldung auch noch in die Zwischenablage kopieren und diese dann selbstständig an den Entwickler versenden - gegebenenfalls existiert auf der Zielmaschine ja gar kein Outlook.

Die zweite Variante der Fehlerbehandlung ist auf die Phase der Entwicklung der Anwendung ausgelegt. Sie soll nur für den Entwickler sichtbar sein und erlaubt auch das Debuggen des Fehlers.

Die in der Beispieldatenbank verwendete Fehlerbehandlung für den Entwicklermodus liefert Fehlermeldungen wie die aus Abb. 3.

pic003.png

Abb. 3: Entwickler-geeignete Fehlermeldung ...

Ein Klick auf die Schaltfläche Variablen anzeigen liefert auch noch alle Variablen zum Zeitpunkt des Fehlers (s. Abb. 4).

pic004.png

Abb. 4: ... mit Auflistung der Variablen zum Fehlerzeitpunkt

Wenn Sie diese Fehlermeldungen einfach übernehmen möchten, gelingt dies recht einfach. Tragen Sie zunächst einen Aufruf wie den folgenden in einer Prozedur ein, die beim Start der Anwendung aufgerufen wird - beispielsweise in die Beim Laden-Ereignisprozedur eines Startformulars:

Private Sub Form_Load()

    ErrEx_Starten

    End Sub

Die dadurch aufgerufene Prozedur finden Sie im Modul mdlError, das Sie der Zielanwendung hinzufügen müssen:

Public Sub ErrEx_Starten()

If VBA.Command() = "Developer" Then

Errordialog_Entwickler

Else

Errordialog_Benutzer

End If

End Sub

Die Prozedur prüft, ob die Funktion Command den Wert Developer zurückliefert. Hier gibt es eine Querverbindung zum Beitrag Datenbanken im Produktiv- und Entwicklermodus (www.access-im-unternehmen.de/855).

Dieser Beitrag beschreibt eine Starter-Datenbank, mit der Sie festlegen können, mit welchen Eigenschaften eine Datenbank gestartet wird.

Dort geben Sie einem Aufruf der Zieldatenbank unter anderem einen Parameter namens cmd mit, der beispielsweise den Wert Developer enthält. Sollten Sie die Zieldatenbank also mit einer Verknüpfung öffnen, die den Parameter /cmd "Developer" enthält, würde die Funktion Command den Wert Developer liefern, was wiederum dazu führt, dass die Prozedur Errordialog_Entwickler aufgerufen wird. In allen anderen Fällen wird die Prozedur Errordialog_Benutzer zum Einrichten der Fehlerbehandlung für diese Instanz der Anwendung aufgerufen.

Die beiden Prozeduren Errordialog_Entwickler und Errordialog_Benutzer sorgen also für die Einrichtung der Fehlerbehandlung. Schauen wir uns in den folgenden Abschnitten an, wie dies im Detail aussieht.

Entwickler-Fehlermeldung

Die Fehlermeldung, die der Entwickler zu sehen bekommen soll, wird durch die Prozedur Errordialog_Entwickler definiert (s. Listing 1). Diese Prozedur aktiviert auch die Fehlerbehandlung durch vbWatchdog. Die erste Anweisung beendet eine eventuell laufende Fehlerbehandlung und startet diese neu. Dass die Methode Err.Enable nur eine leere Zeichenkette als Parameter erhält, liegt daran, dass beim Auftreten eines Fehlers keine weiteren Aktionen mit Ausnahme der Anzeige der Fehlermeldung erfolgen sollen.

Listing 1: Einrichten und Aktivieren des Entwickler-Fehlerdialogs

Public Sub Errordialog_Entwickler()

    ErrEx.Disable

    ErrEx.Enable ""

    With ErrEx.DialogOptions

        .HTML_MainBody = "<font face=Arial size=13pt color=""#4040FF""><b>" _

            & "Es ist ein Laufzeitfehler aufgetreten.</b></font><br><br><b><ERRDESC></b><br><br>" _

            & "Projekt:|<SOURCEPROJ><br>Modul:|<SOURCEMOD><br>Prozedur:|<SOURCEPROC><br>" _

            & "Fehlernummer:|<ERRNUMBER><br>Fehlermeldung:|<ERRDESC><br>Zeile:|<SOURCELINENUMBER>" _

            & "<br>Zeileninhalt:|<SOURCELINECODE><br>Datum und Zeit:|<ERRDATETIME><br><br><b><u>" _

            & "Was möchten Sie tun?</u></b>"

        .HTML_CallStackItem = "<b><font color=#303030><SOURCEPROJ>.<SOURCEMOD>.<SOURCEPROC>" _

            & "</font></b><br> |<font bgcolor=#F8F8F8>Zeile <SOURCELINENUMBER>: <i>" _

            & "<SOURCELINECODE></i></font><br>"

        .HTML_MoreInfoBody = "<br><b><font face=Arial size=13pt color=#FFFFFF bgcolor=#C0C0C0>" _

            & " Aufrufeliste </font></b><br><br><CALLSTACK>"

        .RemoveAllButtons

        .AddButton "Variablen anzeigen", BUTTONACTION_SHOWVARIABLES

        .AddButton "Quellcode debuggen", BUTTONACTION_ONERRORDEBUG

        .AddButton "Ignorieren und fortsetzen", BUTTONACTION_ONERRORRESUMENEXT

        .AddButton "Beenden", BUTTONACTION_ONERROREND

        .AddButton "Hilfe", BUTTONACTION_SHOWHELP

        .MoreInfoCaption = "Details einblenden"

        .LessInfoCaption = "Details ausblenden"

        .ShowMoreInfoButton = True

        .WindowCaption = "Fehler im Projekt '<SOURCEPROJ>'"

    End With

    With ErrEx.VariablesDialogOptions

        .WindowCaption = "Variablenliste"

        .HTML_CallStackItem = "<b><SOURCEPROJ>.<SOURCEMOD>.<SOURCEPROC></b><br><br><VARIABLES><br>"

        .HTML_MainBody = "<CALLSTACK>"

        .HTML_MoreInfoBody = ""

        .HTML_VariableItem = "<font color=#808080>(<VARSCOPE>)</font>|" _

            & "<VARNAME> As <VARTYPE>| = <VARVALUE><br>"

        .RemoveAllButtons

        .AddButton "Schließen", BUTTONACTION_VARIABLES_CLOSE

    End With

End Sub

Diese enthält bereits alle notwendigen Informationen, sodass diese nicht etwa in der Zwischenablage oder in einer Tabelle zur weiteren Verarbeitung gespeichert werden müssen. Die folgenden Anweisungen definieren genau, wie die Fehlermeldungen aussehen sollen. Als Erstes legt die Prozedur dabei fest, wie der Hauptfehlerdialog aussehen soll. Das dafür verwendete Objekt heißt DialogOptions. Es enthält beispielsweise eine Eigenschaft namens HTML_MainBody. Damit legen Sie fest, wie die Meldung aussehen soll. Dabei werden einige Platzhalter wie etwa <ERRDESC>, <SOURCEPROJ>, <SOURCEMOD>, <SOURCEPROJ>, <ERRNUMBER>, <ERRDESC>, <SOURCELINENUMBER>, <SOURCELINECODE> und <ERRDATETIME> verwendet - deren Funktion erklärt sich eigentlich von selbst.

Die Eigenschaft HTML_CallStackItem nimmt die Aufrufe der Prozeduren bis zum Fehler und HTML_MoreInfoBody die Überschrift für den erweiterten Bereich entgegen. Schauen wir uns an, wo diese Daten für einen einfachen Fehler wie den aus dem folgendem Beispiel landen:

Public Sub Fehlerbeispiel()

    Dim i As Integer

    For i = 3 To 0 Step -1

        Debug.Print 1 / i

    Next i

End Sub

Abb. 5 zeigt einige der Bereiche, die per HTML definiert wurden. Wenn Sie auf Details einblenden klicken, wird auch noch der mit der Eigenschaft HTML_MoreInfoBody festgelegte Bereich sichtbar - der wiederum mit <Callstack> den für die Eigenschaft HTML_CallStackItem definierten Bereich einbindet.

pic005.png

Abb. 5: Verschiedene Bereiche der Fehlermeldung

Die RemoveAllButtons-Methode entfernt alle eingebauten Schaltflächen, die folgenden Methoden fügen die gewünschten Schaltflächen hinzu. Dabei erwartet der erste Parameter jeweils die Beschriftung, der zweite fügt eine Konstante für eine der eingebauten Funktionen hinzu.

So erhält die Schaltfläche, welche die Liste der aktuell verwendeten Variablen und ihrer Werte anzeigen soll, die Beschriftung Variablen anzeigen als ersten Parameter und die Konstante BUTTONACTION_SHOWVARIABLES als zweiten Parameter.

Die Schaltfläche zum Anzeigen weiterer Informationen passen Sie auf eine andere Art an, nämlich indem Sie diese mit der Eigenschaft ShowMoreInfoButton einblenden und die Beschriftung mit der Eigenschaft MoreInfoCaption anpassen. Gleiches gilt für die Schaltfläche, welche die Details wieder ausblendet.

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.