Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.
Im Beitrag Dateneingabe in Haupt- und Unterformular (www.access-im-unternehmen.de/1463) haben wir gezeigt, wir man bei der Eingabe neuer Daten verhindert, dass der Benutzer Daten in das Unterformular eingibt, bevor ein Datensatz im Hauptformular angelegt wurde. Das kann man noch vertiefen, wenn das Hauptformular Felder enthält, die validiert werden müssen, bevor der dortige Datensatz gespeichert werden kann. Wir schauen uns an einem einfachen Beispiel an, wie sich eine Validierung auf die Lösung aus dem oben genannten Beitrag auswirkt.
Angenommen, unser Formular enthält bereits eine Validierung – wie können wir dann die Techniken aus dem Artikel Dateneingabe in Haupt- und Unterformular (www.access-im-unternehmen.de/1463) damit kombinieren?
Einfache Validierungsfunktion
Dabei gehen wir davon aus, dass wir die Validierung durchführen, bevor der Benutzer den Datensatz speichert. Beim Speichern wird das Ereignis Vor Aktualisierung ausgelöst, in dem wir das Speichern durch Einstellen des Parameters Cancel auf den Wert True abbrechen können. Hier rufen wir wie folgt die Validierungsfunktion auf und werten das Ergebnis aus – wenn es False lautet, wird das Speichern abgebrochen:
Private Sub Form_BeforeUpdate(Cancel As Integer) If Validierung = False Then Cancel = True End If End Sub
Die Validierungsfunktion haben wir zu Beispielzwecken recht einfach gehalten (siehe Listing 1). Sie prüft lediglich die vom Benutzer zu füllenden Felder und wenn eines leer ist, zeigt es eine Meldung an, die den Benutzer auffordert, das Feld zu füllen. Anschließend setzt sie den Fokus auf das entsprechende Steuerelement und verlässt die Funktion. Nur wenn alle Validierungen gelingen, wird die Funktion bis zum Ende ausgeführt und liefert den Wert True zurück.
Private Function Validierung() As Boolean If Len(Nz(Me!Kategorie, "")) = 0 Then MsgBox "Bitte geben Sie eine Kategorie ein.", vbOKOnly + vbExclamation Me!txtKategorie.SetFocus Exit Function End If If Len(Nz(Me!Beschreibung, "")) = 0 Then MsgBox "Bitte geben Sie eine Beschreibung ein.", vbOKOnly + vbExclamation Me!txtBeschreibung.SetFocus Exit Function End If Validierung = True End Function
Listing 1: Validierungsfunktion
Validieren und zum Unterformular wechseln
Wie verträgt sich dies mit dem Unterformular, das ja den Fokus erhalten soll beziehungsweise nur aktiviert werden soll, wenn der Benutzer den Datensatz im Hauptformular in einen speicherfähigen Zustand gebracht hat?
Wir haben im oben genannten Beitrag zwei Varianten vorgestellt:
- die erste gibt eine Meldung aus, wenn der Benutzer versucht, das Unterformular zu nutzen, obwohl noch kein Datensatz im Hauptformular vorliegt und
- die zweite deaktiviert das Unterformular-Steuerelement solange, bis im Hauptformular ein Datensatz vorliegt.
Validieren und Meldung, wenn noch keine Daten ins Unterformular eingegeben werden können
Die erste Variante sehen wir im Hauptformular frmKategorienProdukte. Hier erhalten wir nach dem Hinzufügen der Validierungsfunktion folgendes Verhalten:
Wenn wir direkt nach dem Anlegen eines neuen Datensatzes zum Unterformular wechseln, also ohne überhaupt Werte einzugeben, erscheint die Meldung, dass noch keine Kategorie angegeben ist. Die Validierung wird hier zunächst außen vor gelassen (siehe Bild 1). Dies wird durch das Ereignis Beim Hingehen des Unterformular-Steuerelements realisiert.
Bild 1: Meldung ohne Validierungsfunktion
Geben wir hingegen Daten ein und versuchen dann, zum Unterformular zu wechseln, wird zuerst die Validierungsfunktion aufgerufen. Diese meldet eventuelle Probleme (siehe Bild 2) und bricht die Aktualisierung des Datensatzes im Hauptformular durch Setzen von Cancel auf True ab. Außerdem wird der Fokus zurück auf das nicht validierte Feld gesetzt, sodass dieser nicht im Unterformular landet und somit auch nicht die Meldung mit dem Titel Kategorie fehlt angezeigt wird.
Bild 2: Die Validierung schlägt zuerst an.
Geben wir hingegen alle von der Validierung geforderten Daten an, können wir problemlos zum Unterformular wechseln, um dort die entsprechenden Datensätze einzugeben.
Validieren und Unterformular erst aktivieren, wenn Daten im Hauptformular speicherbar sind
[
Die zweite Variante aus dem oben genannten Beitrag haben wir so gestaltet, dass das Unterformular-Steuerelement so lange deaktiviert bleibt, bis im Hauptformular die Bedingungen erfüllt sind, um den dortigen Datensatz zu speichern und somit auch das Unterformular zur Eingabe verknüpfter Datensätze genutzt werden kann.
Funktioniert das noch, wenn wir die Validierung wie oben hinzufügen? Das verwendete Hauptformular heißt nun frmKategorienProdukte_Enable. Ist noch kein Datensatz im Hauptformular hinterlegt, soll dieses deaktiviert sein und den Text aus Bild 3 anzeigen.
Bild 3: Aktivieren und Deaktivieren des Unterformular-Steuerelements
Fügen wir nun die Validierung wie im vorherigen Beispiel hinzu und geben für einen neuen, leeren Datensatz ein erstes Zeichen ein, wird das Unterformular direkt aktiviert. Beim Versuch, dorthin zu wechseln, erscheint jedoch die Meldung, dass die Validierung fehlgeschlagen ist (siehe Bild 4).
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
Testzugang
eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel
diesen und alle anderen Artikel mit dem Jahresabo