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.
Keine Antworten