Duplikate zum Datensatz im gleichen Formular
Prüfung verbessern
Aber ein Duplikat wird erst erkannt, wenn Kontaktperson und Ort komplett eingegeben wurden. Ein übliches Fehlerpotential in Adressen ist jedoch die Eingabe abweichender Namen, also etwa "Bad Aachen" statt "Aachen" oder "Burtscheid" statt "Aachen-Burtscheid".
Daher ist es sinnvoll, auch schon nach Teilen des Inhalts während der Eingabe zu suchen. Nutzen Sie dazu den LIKE-Operator und verändern die Suchzeile mit Jokerzeichen wie folgt:
Private Sub SucheDuplikate(strKontaktperson As String, strOrt As String)
Dim lngAnzahl As Long
lngAnzahl = DCount("*", "Kunden", "[Kontaktperson] LIKE '*" & strKontaktperson & "*' AND [Ort] LIKE '*" & strOrt & "*'")
If lngAnzahl = 0 Then
Me.lblDuplikate.Visible = False
Else
With Me.lblDuplikate
.Visible = True
.Caption = lngAnzahl & " Duplikate"
End With
End If
End SubDadurch werden bereits Teile des Inhalts verglichen, da die Joker-Sternchen davor und dahinter stehen. Beim Testen sehen Sie, dass sich die Anzahl der gefundenen Duplikate mit jedem eingegebenen Zeichen verändern kann:
Es gibt offenbar drei Mal "Maria" in Orten mit "B"
Was wird gezählt?
Wie Sie in der vorigen Abbildung sehen, gibt es angeblich drei Duplikate. Tatsächlich ist aber der Testdatensatz schon gespeichert worden und wird ebenfalls als Duplikat mitgezählt. Das müssen wir bei Gelegenheit berücksichtigen.
Sicherlich haben Sie beim Testen bemerkt, dass der Inhalt im geprüften Feld erst editiert werden muss, bevor die Prüfung aktiv wird. Außerdem stehen beim Datensatzwechsel noch die Ergebnisse der vorherigen Prüfung. Lassen Sie also auch im Form_Current-Ereignis (welches der Formular-Eigenschaft Beim Anzeigen entspricht) die Duplikate suchen:
Private Sub Form_Current()
SucheDuplikate Me.Kontaktperson.Value & "", Me.Ort.Value & ""
End SubDer vollständige Code im Formular-Modul sieht nun so aus:


