Unterformular erst nach Validierung aktivieren

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.

Meldung ohne Validierungsfunktion

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.

Die Validierung schlägt zuerst an.

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

Du hast das Ende des frei verfügbaren Textes erreicht. Möchtest Du ...

Oder bist Du bereits Abonnent und hast Zugangsdaten? Dann logge Dich gleich hier ein:
Die Zugangsdaten findest Du im aktuellen gedruckten Heft oder in der E-Mail, die Du als Abonnent mit jeder neuen Ausgabe erhältst.

Schreibe einen Kommentar