Datenvalidierung: Wie kann ich Datenvalidierung in Access implementieren?

Ziel: MĂŒll rausfiltern – bevor er gespeichert wird

Access speichert alles. Auch Blödsinn.
Wenn Du das nicht willst, brauchst Du eigene PrĂŒfungen.
Ich zeig Dir, wie Du Validierung sicher, wiederverwendbar und benutzerfreundlich umsetzt.

Variante 1: Validierung auf Feldebene

In der Tabelle selbst:

  • Feld „PLZ“ → GĂŒltigkeitsregel: Like "#####"
  • Feld „Geburtsdatum“ → <=Date()
  • Eigene Fehlermeldung: „Geburtstag darf nicht in der Zukunft liegen.“

Nachteil: wirkt nur bei direkter Tabellenbearbeitung oder ungebundenen Formularen.

Variante 2: Validierung im Formular (BeforeUpdate)

Private Sub txtPLZ_BeforeUpdate(Cancel As Integer)
    If Not IsNumeric(Me.txtPLZ) Or Len(Me.txtPLZ) <> 5 Then
        MsgBox "Bitte gĂŒltige Postleitzahl (5-stellig) eingeben.", vbExclamation
        Cancel = True
    End If
End Sub

So bleibt der Benutzer direkt im Feld.

Variante 3: Validierung im Formular (Form_BeforeUpdate)

Zentrale PrĂŒfung vor Speichern:

Private Sub Form_BeforeUpdate(Cancel As Integer)
    If Nz(Me.txtName, "") = "" Then
        MsgBox "Name darf nicht leer sein.", vbExclamation
        Cancel = True
        Me.txtName.SetFocus
        Exit Sub
    End If

    If Not IsDate(Me.txtGeburtstag) Or Me.txtGeburtstag > Date Then
        MsgBox "Geburtsdatum ungĂŒltig.", vbExclamation
        Cancel = True
        Me.txtGeburtstag.SetFocus
        Exit Sub
    End If
End Sub

Schnell. Klar. VerstÀndlich.

Variante 4: Wiederverwendbare PrĂŒffunktion

Public Function IstEmailAdresseGueltig(email As String) As Boolean
    IstEmailAdresseGueltig = email Like "*@*.*"
End Function

Verwendung:

If Not IstEmailAdresseGueltig(Me.txtEmail) Then
    MsgBox "UngĂŒltige E-Mail-Adresse.", vbExclamation
    Cancel = True
    Me.txtEmail.SetFocus
End If

Du kannst beliebige PrĂŒfregeln als Modulfunktion kapseln.

Variante 5: Validierung in SQL-Abfragen

Wenn Du Listen oder Berichte filterst:

SELECT * FROM tblKunden WHERE Email Like "*@*.*" AND Len(Name) > 0

Zum PrĂŒfen von Altdaten. Nicht zum Verhindern beim Eingeben.

Variante 6: Fehler zentral protokollieren

Du willst wissen, wer wie oft fehlerhafte Eingaben macht?

Public Sub LogValidierungsfehler(modul As String, feld As String, text As String)
    CurrentDb.Execute "INSERT INTO tblValidierungsLog (Zeitpunkt, Benutzer, Modul, Feld, Meldung) " & _
                      "VALUES (Now(), '" & Environ("USERNAME") & "', '" & modul & "', '" & feld & "', '" & Replace(text, "'", "''") & "')"
End Sub

Dann:

LogValidierungsfehler "frmKunden", "txtEmail", "UngĂŒltig: " & Me.txtEmail

Variante 7: Validierung beim Import

CSV-Datei wird eingelesen? Erst prĂŒfen, dann speichern.

If Not IsDate(rs!Geburtstag) Then
    LogValidierungsfehler "Import", "Geburtstag", "Fehlerhafte Angabe: " & rs!Geburtstag
    GoTo NĂ€chster
End If

Validierung ist Pflicht, wenn die Quelle unzuverlÀssig ist.

Variante 8: Benutzerfreundlich validieren

  • Kurz und konkret: „Bitte PLZ angeben.“
  • Im richtigen Moment: nicht erst beim Speichern
  • Mit Fokus: txtFeld.SetFocus
  • Ohne Abbruch: keine Endlosschleifen

Nicht: „Fehler 3022“
Sondern: „Diese Kundennummer gibt es schon.“

Best Practices

  • immer im Formular prĂŒfen – nicht nur in Tabellen
  • alles kapseln, was mehrfach vorkommt
  • keine MessageBox-Orgie
  • Eingabefehler trennen von technischen Fehlern
  • PrĂŒflogik und Anzeige sauber trennen

Variante 9: GrĂŒndliche E-Mail-Validierung mit RegExp

Access kann keine regulĂ€ren AusdrĂŒcke von Haus aus – aber mit dem VBScript.RegExp-Objekt geht’s.

Zuerst brauchst Du eine Referenz oder den spÀten Bindungsweg.

Beispiel mit Late Binding:

Public Function IstGueltigeEmailAdresse(email As String) As Boolean
    Dim regex As Object
    Set regex = CreateObject("VBScript.RegExp")

    regex.Pattern = "^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$"
    regex.IgnoreCase = True
    regex.Global = False

    IstGueltigeEmailAdresse = regex.Test(email)
End Function

Diese PrĂŒfung ist schon recht gut – prĂŒft:

  • gĂŒltige Zeichen vor dem @
  • keine Leerzeichen
  • Domain mit Punkt und mindestens 2 Buchstaben danach

Nicht perfekt laut RFC 5322 – aber in 99 % der FĂ€lle völlig ausreichend.

Anwendung im Formular:

If Not IstGueltigeEmailAdresse(Me.txtEmail) Then
    MsgBox "Bitte gĂŒltige E-Mail-Adresse eingeben.", vbExclamation
    Cancel = True
    Me.txtEmail.SetFocus
End If

Hinweis: FĂŒr interne Domains ohne TLD musst Du ggf. die RegEx anpassen (\.{2,} → optional).

Fazit fĂŒr Entwickler

Gute Validierung spart Dir Ärger.
Je frĂŒher Du prĂŒfst, desto weniger DatenmĂŒll musst Du nachher aufrĂ€umen.
Access gibt Dir alle Werkzeuge. Du musst sie nur sauber einsetzen.

Kategorien:

Keine Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert