Duplikate erkennen

4
(1)
Beitrag bewerten
Ersten Kommentar schreiben
Stand: 10. November 2011

Duplikate zum Datensatz im gleichen Formular

Duplikate-Anzeige im Endlosformular

Damit kommen wir zur zweiten Lösung, der Anzeige in einem Endlosformular. Diese entspricht einem üblichen Haupt- und Unterformular, wobei allerdings keine automatische Synchronisation über die Verknüpfen von- und Verknüpfen nach-Eigenschaften möglich ist, weil diese eben nicht gleich sein sollen. Stattdessen muss auch hier die Datenherkunft-Eigenschaft des Unterformulars per VBA dynamisch angepasst werden.

Erstellen Sie dazu mit dem Formular-Assistenten ein "AutoFormular: Tabellarisch" auf Basis der Tabelle Kunden.

Bild vergrößernSo erstellen Sie automatisch das Endlosformular auf Basis der Tabelle Kunden.

Für dieses Unterformular vergeben Sie den Namen sfmKunden. Es ist nicht besonders hübsch, aber das soll im Moment egal sein:

Bild vergrößernDas Endlosformular reicht für die Anzeige der Duplikate.

Dann schließen Sie es, öffnen den Entwurf von frmKunden und ziehen seinen Namen dann aus dem Datenbankfenster in den Entwurf des Formulars frmKunden. Benennen Sie das Unterformular ebenfalls als sfmKunden.

Bild vergrößernZiehen Sie den Namen aus dem Datenbankfenster in den Entwurf und benennen Sie das Unterformular in sfmKunden um.

Haupt- und Unterformular

Ausführliche Informationen zum Umgang mit solchen Haupt- und Unterformularen finden Sie im Beitrag "Access: Haupt- und Unterformulare"

Löschen Sie im Hauptformular außerdem das vorhin eingesetzte Listenfeld sowie dessen VBA-Code. Außerdem verändert sich die Prozedur SucheDuplikate() wie im folgenden Code:

Private Sub SucheDuplikate(strKontaktperson As String, strOrt As String)
    Dim lngAnzahl As Long

    m_strSuchkriterien = "[Kontaktperson] LIKE '*" & strKontaktperson & "*' AND [Ort] LIKE '*" & strOrt & "*' AND [Kunden-Code] <> '" & Me.Kunden_Code.Value & "'"

    lngAnzahl = DCount("*", "Kunden", m_strSuchkriterien)
    If lngAnzahl = 0 Then
        Me.lblDuplikate.Visible = False
        Me.sfmKunden.Visible = False
    Else
        With Me.lblDuplikate
            .Visible = True
            .Caption = lngAnzahl & " Duplikate"
        End With
       With Me.sfmKunden
            .Visible = True
            .Form.RecordSource = "SELECT * FROM [Kunden] WHERE " & m_strSuchkriterien
            .LinkChildFields = ""
            .LinkMasterFields = ""
        End With
    End If
End Sub

Access verschlimmbessert eigenmächtig

Sie haben sich möglicherweise im Code über die beiden scheinbar überflüssigen Zeilen mit LinkChildFields und LinkMasterFields gewundert? Immerhin sind diese Eigenschaften Verknüpfen von und Verknüpfen nach im Entwurf nachweislich schon leer gewesen.

Leider füllt Access die aber ungefragt beim Zuweisen einer neuen Datenquelle, ohne das zu melden. Dadurch wird immer nur der aktuelle Datensatz als angebliches Duplikat angezeigt und Sie würden ewig frustriert in Ihrem Code nach dem Fehler suchen.

Durch das editierbare Endlos-Unterformular hat Ihr Benutzer nun mit minimalem Aufwand die Möglichkeit, Original und Duplikat gleichzeitig zu bearbeiten, um etwa Teile der Adresse zu kopieren.

Als Mitglied können Sie diesen Beitrag weiterlesen!

Werden Sie Mitglied und testen Sie akademie.de 14 Tage lang kostenlos!

In den ersten 14 Tagen haben Sie Zugriff auf alle Inhalte auf akademie.de, außer Downloads. Sie können in dieser Zeit ohne Angabe von Gründen stornieren. Eine E-Mail an service@akademie.de genügt. Nur wenn Sie Mitglied bleiben, wird der Mitgliedsbeitrag nach Ende der 14tägigen Stornofrist abgebucht.

Ich bin bereits Mitglied
Jetzt Mitglied werden und akademie.de 14 Tage kostenlos testen
Ich entscheide mich für folgende Zahlungsweise:
14 Tage Stornorecht:
Ich kann meine Mitgliedschaft in den ersten 14 Tagen jederzeit formlos stornieren, z.B. per E-Mail an service@akademie.de.

Downloads zu diesem Beitrag

Newsletter abonnieren