Warum noch ein Access-Buch?
Für wen ist das Buch?
Jetzt bestellen
+ direkter Download des eBooks!
Nur EUR 59,95!
Fehler gefunden?
Bitte melden!
Wünsche an das Buch?
Her damit!
Was denken die Leser über dieses Buch?
Lesen Sie aktuelle Rezensionen!
Kapitel des noch nicht veröffentlichten Buchs zum Downloaden, Probelesen und Kommentieren
Beispieldatenbanken
Zusätzliches Material

Das Buch im HTML-Format

Für unbestimmte Zeit bieten Addison-Wesley und André Minhorst den kompletten Inhalt des Buchs als Download an. Schauen Sie rein und informieren Sie sich über den Inhalt! Und wenn Ihnen das Buch nützlich erscheint und Sie glauben, dass Sie etwas gelernt haben oder durch das Gelesene sogar etwas Zeit und somit Geld bei Ihrer Arbeit einsparen konnten, können Sie sich ja beim Autor und beim Verlag revanchieren - beispielsweise durch den Kauf dieses Buchs.

Am schönsten wäre es natürlich, wenn Sie das Buch direkt hier bestellen - Sie erhalten das Buch dann direkt vom Verlag, und der Autor und Verlag haben dann noch mehr davon, als wenn Sie es anderswo kaufen.

Danke für Ihr Interesse!

13.3.10 Benutzerdefinierte Fehler

13.3.11 Fehler bei API-Aufrufen

Wenn Sie mit API-Funktionen arbeiten, kann es ebenfalls zu Fehlern kommen, die aber keine Fehlermeldung anzeigen oder den Debugger aufrufen. Die Fehlerursache kann man etwa auf falsche Parameterwerte oder auch auf Systemfehler von Windows zurückführen. API-Funktionen geben so gut wie immer einen Long-Wert zurück, der anzeigt, ob sie erfolgreich durchgeführt werden konnten. Falls nicht, dann ist der Rückgabewert häufig entweder 1 oder 0. Das ist natürlich wenig aussagekräftig und aus diesem Grund sieht das Windows-API vor, dass der genaue Fehler-Code mit der Funktion GetLastError unmittelbar im Anschluss an die fehlgeschlagene Funktion ermittelt werden kann. VBA kennt dazu die synonyme Eigenschaft LastDllError des Err-Objekts.

Die Beispielprozedur TestAPIFehler versucht, per API das Access-Hauptfenster zu maximieren. Dazu kommt die Funktion ShowWindow zum Einsatz, die als Parameter für das Maximieren eine Konstante SW_MAXIMIZED mit dem Long-Wert 3 erwartet. Fälschlicherweise wird sie im Code aber als 300 deklariert.

Private Declare Function ShowWindow Lib "user32.dll" ( _
     ByVal hwnd As Long, ByVal nCmdShow As Long) As Long

Private Declare Function FormatMessage Lib "kernel32.dll" _
    Alias "FormatMessageA" (ByVal dwFlags As Long, _
    ByRef lpSource As Any, ByVal dwMessageId As Long, _
    ByVal dwLanguageId As Long, ByVal lpBuffer As String, _
    ByVal nSize As Long, ByRef Arguments As Long) As Long


Sub TestAPIFehler()
    Dim ret As Long
    Dim sError As String
    Dim nErr As Long
    Dim lLen As Long

    Const SW_SHOWMAXIMIZED As Long = 300 'korrekt: 3
    
    ret = ShowWindow(Application.hWndAccessApp, SW_SHOWMAXIMIZED)
    If ret = 0 Then
        nErr = Err.LastDllError
        sError = String(255, 0)
        lLen = FormatMessage(&H1000, 0&, nErr, 0&, sError, 255, 0&)
        Err.Raise vbObjectError, "TestAPIError", _
            "API-Fehler Nr. " & nErr & ":" & vbCrLf & Chr(34) _
                & Left(sError,lLen - 2) & Chr(34)
    End If
    
End Sub

Listing 13.6: Fehlerbehandlung für Fehler beim Aufruf von API-Funktionen

Dass die Funktion mit diesem Parameter fehlschlägt, erkennt man laut Windows-SDK am Rückgabewert 0. Im Folgenden wird deshalb Err.LastDllError bemüht, um die Windows-Fehlernummer zu erhalten - in diesem Fall 87. Nun wissen Sie allerdings noch nicht, was diese Zahl bedeutet. Mit der API-Funktion FormatMessage lässt sich jedoch der Fehlertext ermitteln, in der Stringvariablen sError speichern und mit Err.Raise an die benutzerdefinierte Fehlerauslösung leiten - Ergebnis: »Falscher Parameter«.

Wenn eine API-Funktion zum Absturz von Access führt, dann nutzt diese Technik allerdings wenig. Solche Fehler kann nur der Windows-Debugger selbst abfangen und mit einer Beendigung des auslösenden Prozesses quittieren.

Nächster Abschnitt:

13.4 Fehlerdokumentation und -übermittlung

© 2006-2008 André Minhorst Alle Rechte vorbehalten.