Tipps und Tricks zu Formularen

Access stellt Ihnen unterschiedliche Werkzeuge zur Verfügung, um die Eingaben des Anwenders zu kontrollieren und ggf. zu korrigieren. Die Kontrollmöglichkeiten sollten Sie intensiv einsetzen, wenn Sie einen sauberen Datenbestand in Ihrer Datenbank sicherstellen möchten.

Die einfachste Möglichkeit, die Eingaben zu überwachen, sind Gültigkeitsregeln für einzelne Datenfelder. Allerdings werden die Regeln bei jedem Feld separat hinterlegt und können nicht zentral an einer Stelle überprüft werden. Sie können ferner keine komplexen Regeln definieren, die sich zum Beispiel an den Eingaben des Benutzers orientieren.

Einfacher geht das Ganze mit Ereignisprozeduren auf Formularebene, in denen Sie die Regeln und Aktionen festlegen. Weitere Einsatzmöglichkeiten für die Ereignisprozeduren sind Gültigkeitsüberprüfungen,

Ereigniskette

Für den Einsatz der Ereignisse müssen Sie aber wissen, welche Sie wann am besten verwenden. Wichtig ist hierbei die Reihenfolge, in der Access die Ereignisse auslöst. Für die Erfassung und Speicherung eines Datensatzes gilt die folgende Ereigniskette:

Das Ereignis Vor Eingabe wird von Access ausgelöst, wenn Sie das erste Zeichen in einem neuen Datensatz eingeben. Der Datensatz ist dann noch nicht gespeichert.

Das Ereignis Vor Aktualisierung tritt ein, wenn Sie einen Datensatz verlassen oder speichern, aber bevor der Datensatz tatsächlich in der Datenbank aktualisiert wird. änderungen können jetzt noch rückgängig gemacht werden. Doch das Ereignis wird nur ausgelöst, wenn Sie mindestens in einem Datenfeld eine änderung durchgeführt haben.

Bild 1: Eingabeprüfung auf Formularebene

Private Sub Form_BeforeUpdate(Cancel As Integer)
    If Me!Anzahl > 10 Then
        MsgBox "Die Anzahl ist zu groß"
        Cancel = True
    End If
End Sub

Quellcode 1

Private Sub Form_BeforeUpdate(Cancel As Integer)
    Dim DoCancel As Boolean
    DoCancel = False
    If Me!AbschlussID.Column(2) = True Then
        If IsNull(ZertifikatErhaltenAm) Then
            MsgBox "Bitte geben Sie ein Datum ein.", vbExclamation, "Datum eingeben..."
            DoCancel = True
        End If
        If Nz(Me!Note, 0) = 0 Or Me!Note > Me!MindestNote Then
            MsgBox "Bitte geben Sie eine Note ein die" _                & " kleiner/gleich der Mindestnote " _                & " ist.", "Note eingeben..."
            DoCancel = True
            Me!Note.SetFocus
        End If
    End If
   ... 
   ''weitere Prüfungen
   ...
    Cancel = DoCancel
End Sub

Quellcode 2

Das Ereignis Nach Aktualisierung wird von Access ausgelöst, nachdem die geänderten Daten im Datensatz aktualisiert wurden, während das Ereignis Nach Eingabe nur nach Anlage eines neuen Datensatzes von Access ausgelöst wird.

Ereignisse abbrechen

Die Ereignisse Vor Eingabe und Vor Aktualisierung können Sie per Programmcode abbrechen und damit verhindern, dass die ausgeführten änderungen akzeptiert werden.

Hierzu verwenden Sie den Parameter Cancel der Ereignisprozeduren. Setzen Sie den Parameter auf True, wenn Sie den Einfüge- bzw. Aktualisierungsvorgang abbrechen möchten. Ein Beispiel finden Sie in Quellcode 1. Zunächst wird der Inhalt des Feldes Anzahl geprüft. Erfüllt der Wert nicht die definierte Bedingung, gibt die Prozedur eine Meldung aus und bricht den Vorgang ab. Der Benutzer muss also eine Zahl kleiner als oder gleich 10 eingeben, sonst kann der Datensatz nicht gespeichert werden.

Praxisbeispiel

Ein praktisches Beispiel für die Anwendung der beschriebenen Ereignisse erhalten Sie in der Musterlösung Schulungsverwaltung dieser Ausgabe.

Dort trägt der Anwender im Formular frmAbschluesseEingeben die Abschlussnote und das Datum des Abschlusses für die Teilnehmer einer Schulung ein (siehe Bild 1).

Private Sub Form_AfterUpdate()
    If Nz(Me!AbschlussID, 0) > 1 Then
        If MsgBox("Möchten Sie das Zertifikat jetzt drucken", _
            vbQuestion + vbYesNo, "Zertifikat drucken") = vbYes Then
            Zertifikatdrucken Me!KursteilnehmerID
        End If
    End If
End Sub

Quellcode 3

Das Ereignis Vor Aktualisierung (s. Quellcode 2) wird hier verwendet, um zu prüfen, ob der Benutzer das Datum eingegeben hat und ob die Note – falls erforderlich – kleiner oder gleich der Mindestnote ist.

Fehlt das Datum oder wird die Mindestnote nicht erreicht, gibt die Prozedur eine entsprechende Fehlermeldung aus und bricht den Speichervorgang ab.

Sind vom Anwender alle Eingaben den Regeln entsprechend ausgeführt worden, wird das Ereignis Nach Aktualisierung ausgelöst. Hier können nun weitere Aktionen folgen, die sich auf die Feldwerte des aktualisierten Datensatzes beziehen.

Im Beispiel wird in diesem Ereignis geprüft, ob der Kurs als bestanden eingegeben wurde (AbschlussID > 1) und der Anwender das passende Zertifikat direkt drucken möchte (s. Quellcode 3).

Mit diesem Ereignis lässt sich der Prozess Zertifikat drucken automatisieren, ohne dass der Anwender noch auf eine weitere Schaltfläche klicken muss.

In großen Anwendungen mit vielen Formularen ist es fast unumgänglich, dass einige Unterformulare in mehreren unterschiedlichen Hauptformularen verwendet werden.

Das ist auch dann der Fall, wenn es sich um ein Unterformular handelt, das die Zwischentabelle einer n:m-Beziehung in Listenform darstellt. Solche Unterformulare werden meist in zwei Hauptformularen – aber mit unterschiedlichen Anzeigefeldern – benötigt.

In diesem Tipp erfahren Sie, wie Sie es vermeiden, zweimal dasselbe Formular mit ggf. nur geringen Abweichungen anzulegen und statt dessen nur ein Formular zu verwenden.

Beispielformular

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

TestzugangOder bist Du bereits Abonnent? Dann logge Dich gleich hier ein. Die Zugangsdaten findest Du entweder in der aktuellen Print-Ausgabe auf Seite U2 oder beim Online-Abo in der E-Mail, die Du als Abonnent regelmäßig erhältst:

Schreibe einen Kommentar