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!

4.8.1 Validieren direkt bei der Eingabe

4.8.2 Validieren vor dem Speichern

Vor dem Speichern werden vor allem Pflichtfelder geprüft. Falls im obigen Formular die Felder Projekt und Startdatum Pflichtfelder wären, würde die Prüfung wie folgt aussehen:

Private Function Validierung() As Boolean

    If IsNull(Me!Projekt) Then
        MsgBox "Bitte geben Sie einen Projektnamen ein.", _
            vbOKOnly + vbExclamation, "Fehlende Eingabe"
        Me!Projekt.SetFocus
        Exit Function
    End If

    If IsNull(Me!Startdatum) Then

        MsgBox "Bitte geben Sie das Startdatum ein.", _
            vbOKOnly + vbExclamation, "Fehlende Eingabe"
        Me!Startdatum.SetFocus
        Exit Function
    End If

    If Not IsNull(Me!Startdatum) And Not IsNull(Me!Enddatum) Then
        If Me!Startdatum > Me!Enddatum Then
            MsgBox "Das Enddatum darf nicht hinter " _
                & "dem Startdatum liegen.", _
                vbOKOnly + vbExclamation, "Falsche Datumsangabe"
            Me!Enddatum.SetFocus
            Exit Function
        End If
    End If

    Validierung = True

End Function

Listing 4.47: Validierung vor dem Speichern des Datensatzes

Die Prozedur prüft von oben nach unten alle Pflichtfelder. Sobald sie auf eines trifft, das leer ist, gibt sie eine Fehlermeldung aus, setzt den Fokus auf das Feld mit dem fehlenden Inhalt und bricht die Prozedur ab. Außerdem wird der Funktionswert nur auf True gesetzt, wenn alle Validierungen erfolgreich verlaufen sind.

Abhängige Felder prüfen

Im letzten Teil der Routine aus Listing 4.45 finden Sie ein Beispiel, wie sich abhängige Felder prüfen lassen. In diesem Beispiel wird sichergestellt, dass das Startdatum nicht hinter dem Enddatum liegt.

Aufruf der Validierung vor dem Speichern

Nun müssen Sie diese Funktion nur noch von geeigneter Stelle aus aufrufen. Leider reicht es nicht, dies mit der Ereigniseigenschaft Vor Aktualisierung abzudecken. Die dazugehörende Ereignisprozedur enthält auch den passenden Cancel-Parameter, der das Speichern des Datensatzes bei falschen oder fehlenden Daten abbrechen könnte. Es gibt allerdings eine Schwachstelle: Theoretisch wird diese Routine zwar durch alle relevanten Vorgänge wie Wechsel des Datensatzes oder Schließen des Formulars aufgerufen - aber wenn das Schließen einmal ausgelöst wurde, hält auch das Setzen des Cancel-Parameters der Form_BeforeUpdate-Prozedur das Schließen nicht mehr auf. Somit würde in diesem Fall ein Datensatz mit falschen oder fehlenden Daten gespeichert.

Daher rufen Sie die Funktion Validierung von zwei Prozeduren aus auf: Von der Form_BeforeUpdate-Prozedur sowie von der cmdOK_Click-Prozedur aus. Um auszuschließen, dass das Formular anders als mit der OK-Schaltfläche geschlossen wird, stellen Sie noch die Eigenschaft Schließen-Schaltfläche auf den Wert Nein ein.

Die beiden Ereignisprozeduren sehen schließlich wie folgt aus:

Private Sub cmdOK_Click()
    If Validierung = True Then
        DoCmd.Close acForm, Me.Name
    End If
End Sub

Private Sub Form_BeforeUpdate(Cancel As Integer)
    If Validierung = False Then
        Cancel = True
    End If
End Sub

Listing 4.48: Diese beiden Routinen rufen die Funktion Validierung auf

Alternativ können versierte Benutzer das Formular natürlich noch mit Strg + F4 schließen. Um dem vorzubeugen, verwenden Sie eine Prozedur, die beim Ereignis Bei Taste ausgelöst wird und das Betätigen dieser Tastenkombination unterbindet. Gleichzeitig müssen Sie die Eigenschaft Tastenvorschau auf den Wert Ja einstellen:

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = 115 And Shift = 2 Then
        KeyCode = 0
    End If
End Sub

Listing 4.49: Unterbinden der Tastenkombination zum Schließen eines Formulars

Tastenkombinationen sperren und bereitstellen mit dem AutoKeys-Makro

Davon abgesehen ist das eine gute Gelegenheit, hier das AutoKeys-Makro vorzustellen: Das ist nämlich neben dem AutoExec-Makro das zweite Makro, das aufgrund seines Namens automatisch zu bestimmten Gelegenheiten ausgeführt wird - in diesem Fall beim Eingeben von Tastenkombinationen. Sie können damit nämlich beliebige Tastenkombinationen festlegen. Legen Sie einfach ein neues Makro an und fügen Sie pro Tastenkombination eine Anweisung hinzu. Die Tastenkombination tragen Sie dabei in der Spalte Makroname ein und verwenden dabei die Syntax der SendKeys-Anweisung von VBA - die Kürzel für die Tastenkombinationen finden Sie in der VBA-Onlinehilfe. Die Tastenkombination Strg + F4 fügen Sie dort etwa so ein: ^{F4}. Lassen Sie die Spalte Aktion leer, veranlasst Access beim Betätigen dieser Tastenkombination schlicht nichts mehr - genau wie gewünscht.

Natürlich können Sie auf diese Weise auch Tastenkombinationen für richtige Funktionen festlegen. Das beschriebene Makro finden Sie in der Beispieldatenbank.

Nächster Abschnitt:

4.8.3 Sonderfälle beim Validieren

© 2006-2008 André Minhorst Alle Rechte vorbehalten.