Für grundlegende Validierungsfunktion liefern Access-Tabellen und -Felder entsprechende Eigenschaften. Wer mehr will, lässt die Benutzereingabe in Formularen direkt bei der Eingabe prüfen. Wie dies funktioniert, erfahren Sie in diesem Artikel.
Beispiele
Die Beispiele dieses Artikels finden Sie in der Beispieldatenbank Access_Basics_2011_04.mdb.
Validierung
Die Validierung bei der Eingabe von Daten ist eine wichtige Funktion einer Formulars. Wenn Sie den Benutzer nach Lust und Laune Werte eingeben lassen, werden früher oder später nicht sinnvoll verwertbare Daten vorliegen – daher sollten Sie Ihren Anwendungen eine Validierung hinzufügen, die Werte nach der Eingabe prüft und gegebenenfalls auf Fehler hinweist (siehe Bild 1).
Bild 1: Beispiel für eine Validierungsmeldung
Validierung auf Tabellenebene
Der Artikel Tabellen entwerfen – Teil IV: Felder und ihre Eigenschaften hat bereits erläutert, wie Sie direkt im Tabellenentwurf festlegen, welche Werte für ein Feld zulässig sind und welche Meldung angezeigt werden soll, wenn der Benutzer eine ungültige Eingabe durchführt. Die dort vorgestellten Eigenschaften Gültigkeitsregel und Gültigkeitsmeldung gelten anwendungsweit. Das bedeutet, dass diese auch bei Eingaben in die Steuerelemente von Formularen, die an die entsprechenden Felder gebunden sind, funktionieren. Genau wie bei der Eingabe in die Tabellen selbst wird die Gültigkeitsregel gleich nach dem Abschließen der Eingabe und vor dem übernehmen des Wertes durchgeführt.
Dasselbe gilt für die beiden gleichnamigen Eigenschaften, die Sie im Tabellenentwurf für die Tabellenebene festlegen können (siehe Tabellen entwerfen – Teil V: Eigenschaften von Tabellen). Hier verschiebt sich der Zeitpunkt, zu dem die Regeln geprüft werden, allerdings ein wenig nach hinten: Die Prüfung findet erst nach dem Abschließen der Eingabe des Datensatzes, aber noch vor dem Speichern des Datensatzes in der Tabelle statt. Auch noch einige weitere Eigenschaften von Tabellen und ihrer Felder dienen prinzipiell der Validierung der Benutzereingaben:
- Der Datentyp lässt nur Eingaben nach bestimmten Vorgaben zu, beispielsweise Zahl, Datum/Zeit oder Ja/Nein.
- Die Eigenschaften Eingabe erforderlich oder Leere Zeichenfolge eines Feldes bestimmen, ob ein Wert oder eine Zeichenfolge eingegeben werden muss.
- Sogar die Eigenschaft Indiziert kann in die Validierung eingreifen, wenn Sie diese auf den Wert Ja (Ohne Duplikate) einstellen. Das Eingeben eines Wertes, der bereits in einem anderen Datensatz enthalten ist, würde dann das Speichern des Datensatzes verhindern
Sie können die Validierung jedoch auch direkt im Formular vornehmen, ohne Eigenschaften wie Gültigkeitsregel und Gültigkeitsmeldung zu verwenden. Manchmal muss man die durch diese Eigenschaften ausgelösten Effekte sogar beeinflussen, damit keine für den Benutzer unverständlichen Meldungen erscheinen.
Validierung auf Tabellen- oder Formularebene
Der Vorteil der Validierungen, die durch die Feld- und Tabelleneigenschaften ausgelöst werden, ist die Einfachheit. Sie legen fest, wann der Wert eines Feldes gültig ist und welche Meldung bei der Eingabe ungültiger Werte angezeigt werden soll. Oder Sie lassen Access einfach entsprechende Meldungen ausgeben, wenn der Benutzer einen Wert in einem eindeutigen Feld doppelt eingibt oder einen Text in ein Zahlenfeld eintippt. Im Gegensatz zu selbstdefinierten Gültigkeitsmeldungen sind diese Fehlermeldungen für Otto Normalverbraucher jedoch oft nicht leicht zu verstehen.
In vielen Fällen müssen Sie also ohnehin die eingebauten Meldungen abfangen und durch eigene Meldungen ersetzen (wie dies geschieht, erfahren Sie weiter unten). Dies erledigen Sie durch entsprechende Ereignisprozeduren im Formular. Wenn Sie gleichzeitig Gültigkeitsregeln auf Tabellen- oder Feldebene verwenden, bedeutet dies, dass Sie die Prüfung der Daten auf mehrere Bereiche der Datenbank aufteilen. Dies ist aus Gründen der Wartbarkeit der Anwendung nicht empfehlenswert. Sie sollten also entweder nur einfache Validierungen mit den Möglichkeiten des Tabellenentwurfs verwenden oder aber gleich die komplette Eingabeprüfung in die Formulare integrieren.
Wenn Sie die Validierung direkt im Formulare programmieren möchten, benötigen Sie eine oder mehrere Ereignisprozeduren, die vor oder nach der Eingabe der Daten durch den Benutzer ausgelöst werden. Grundsätzlich unterscheiden wir aber auch noch nach Eingaben auf Feld- und Datensatzebene. Wenn ein Benutzer beispielsweise einen Text in ein Datumsfeld eingibt, sollten Sie diesen direkt auf die fehlerhafte Eingabe hinweisen. Der Benutzer ist dann gedanklich noch in der Nähe des entsprechenden Feldes und kann eine Korrektur gleich vornehmen. Die andere Variante ist die Prüfung der Eingabe erst vor dem Speichern des Datensatzes. Dort müssten Sie dann alle Daten auf Richtigkeit und Vollständigkeit prüfen und den Benutzer gegebenenfalls durch eine Meldung auf eventuell fehlende Daten hinweisen.
Optimalerweise kombiniert man beide Varianten. Fehleingaben, die an Ort und Stelle erkannt werden, sollten auch gleich gemeldet werden. Andere Fehleingaben kann man schlicht nicht direkt erkennen – auf ein leeres Feld etwa sollten Sie den Benutzer erst hinweisen, wenn dieser versucht, den Datensatz zu speichern. Schließlich gibt es auch noch abhängige Kriterien bei der Validierung: Wenn beispielsweise ein Feld das Eintrittsdatum und ein anderes das Austrittsdatum markiert, darf das Eintrittsdatum nicht hinter dem Austrittsdatum liegen.
Solche Zustände können Sie erst prüfen, wenn der Benutzer beide Eingaben vorgenommen hat. Dies ist in der Regel erst beim Speichern des kompletten Datensatzes der Fall, wie Sie später sehen werden. All diese Validierungen führen Sie vor dem Speichern des Datensatzes durch. Bei Prüfungen auf Feld- beziehungsweise Steuerelementebene erledigen Sie dies in einer Prozedur, die durch das Ereignis Vor Aktualisierung des entsprechenden Steuerelements durchgeführt wird. Validierungen auf Datensatzebene hingegen finden in der Ereignisprozedur Vor Aktualisierung des Formulars selbst statt.
Es gibt noch Sonderfälle wie etwa das Auftreten leerer Feldwerte, wenn die Feldeigenschaft Eingabe erforderlich den Wert Ja hat, wenn der Benutzer einen doppelten Wert in ein eindeutiges Feld eingibt et cetera. Die dadurch ausgelösten Fehler fangen Sie in der Ereignisprozedur Bei Fehler des Formulars ab – mehr dazu ebenfalls weiter unten.
Beispieltabelle und -formular
Für die folgenden Beispiele haben wir eine Tabelle namens tblBeispieleValidierung mit den folgenden Feldern vorbereitet (siehe Bild 2):
Bild 2: Das Feld EindeutigerText der Beispieltabelle hat einen eindeutigen Index.
- EinfacherText: Einfaches Textfeld, dessen Werte wir nach bestimmten Kriterien validieren werden
- EindeutigerText: Textfeld, dessen Eigenschaft Indiziert den Wert Ja (Ohne Duplikate) enthält
- Zahlenfeld: Feld zur Eingabe von Zahlenwerten
- DatumsfeldStart und DatumsfeldEnde: Felder zur Demonstrierung der Validierung von Datumsbereichen
- NichtNull: Textfeld, dessen Eigenschaft Eingabe erforderlich den Wert Ja enthält
Das Formular frmBeispieleValidierung enthält diese Tabelle als Datenherkunft. Damit das Formular alle in der Tabelle enthaltenen Felder anzeigt, haben wir diese in der Entwurfsansicht aus der Feldliste in den Detailbereich des Formulars gezogen.
Validierungsprozedur anlegen
Wenn die Validierung gleich nach dem Eingeben eines Wertes in ein Feld ausgelöst werden soll, hinterlegen Sie für die Ereigniseigenschaft Vor Aktualisierung eine entsprechende Prozedur. Um diese anzulegen, gehen Sie wie folgt vor:
- öffnen Sie das Formular in der Entwurfsansicht.
- Markieren Sie das Steuerelement, für das Sie die Ereignisprozedur anlegen möchten.
- Wählen Sie für die Eigenschaft Vor Aktualisierung des Steuerelements den Eintrag [Ereignisprozedur] aus und klicken Sie auf die Schaltfläche mit den drei Punkten (siehe Bild 3).
- Der VBA-Editor zeigt nun den leeren Prozedurrumpf an (siehe Bild 4).
Bild 3: Anlegen der Ereignisprozedur, die nach der Eingabe ausgelöst werden soll
Bild 4: Die frisch angelegte Ereignisprozedur
Für die folgenden Experimente fügen Sie nun zunächst eine einzige Anweisung hinzu, die dafür sorgt, dass beim Auslösen des Ereignisses ein Meldungsfenster erscheint:
Private Sub EinfachesTextfeld_BeforeUpdate(Cancel ? As Integer) MsgBox "Geändert!" End Sub
Wechseln Sie dann in die Formularansicht des Formulars, geben Sie einen Text in das Feld ein und betätigen Sie die Eingabetaste. Wie erwartet erscheint das Meldungsfeld. Sinn dieser übung ist es nun, herauszufinden, zu welchen Gelegenheiten das Ereignis ausgelöst wird. Dies geschieht beispielsweise zu folgenden Anlässen, aber jeweils nur nach Eingabe mindestens eines Zeichens:
- Verlassen des Textfeldes mit der Tabulator- oder der Eingabetaste oder auch durch einen Mausklick in ein anderes Feld
- Speichern des Datensatzes
- Schließen des Formulars
Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein: