Nehmen wir an, Sie erhalten zwei Textdateien mit E-Mail-Adressen, die teilweise gleich sind. Manche E-Mail-Adressen kommen aber nur in der ersten Textdatei vor und andere nur in der zweiten. Wir benötigen aber eine Liste, die alle E-Mail-Adressen enthält, die in mindestens einer der beiden Listen vorkommen. Bei einer kurzen Liste würde man die beiden wahrscheinlich nebeneinanderlegen und abgleichen, aber ab einer gewissen Anzahl wird es unübersichtlich und somit fehleranfällig. Also bemühen wir einfach unsere Lieblingsanwendung – Microsoft Access!
Listen nach Access
Die beiden Textdateien enthalten in unserem Beispielfall jeweils eine Liste von E-Mail-Adressen, Anreden und einer Statusinformation – alles für die spätere Nutzung in einem Newsletter (siehe Bild 1). Um aus den beiden Listen eine Liste mit allen vorkommenden E-Mail-Adressen zu machen, müssen wir diese zunächst in Access verfügbar machen. Dann bauen wir eine Abfrage, welche alle E-Mail-Adressen der beiden Listen so zusammenführt, dass jede nur einmal auftaucht. Diese können wir dann als neue Textdatei exportieren.
Bild 1: Zwei zusammenführende Textdateien
Schritt für Schritt
Ob wir die Listen einmalig nach Access importieren oder diese als verknüpfte Tabellen verfügbar machen, hängt jeweils vom Anwendungsfall ab. Wenn es öfter vorkommt, dass Sie solche Listen zusammenführen müssen, können Sie eine Verknüpfung herstellen und dann jeweils die Dateien austauschen. Wir wollen an dieser Stelle allerdings aus Performancegründen einen Import vornehmen, denn wenn die Daten sich in einer Access-Tabelle innerhalb der Datenbank befinden, können wir besser damit arbeiten, als wenn wir über eine Verknüpfungstabelle auf eine externe Textdatei zugreifen.
Also rufen wir zunächst den Ribbon-Befehl Externe Daten|Importieren und Verknüpfen|Neue Datenquelle|Aus Datei|Textdatei auf (siehe Bild 2). Im ersten Schritt des nun erscheinenden Assistenten wählen Sie die zu importierende Datei aus und behalten die Option Importieren Sie die Quelldaten in eine neue Tabelle in der aktuellen Datenbank bei. Danach folgt der Textimport-Assistent. Hier gehen Sie gleich weiter zur zweiten Seite des Assistenten und aktivieren dort die Option Erste Zeile enthält Feldnamen (siehe Bild 3). Auf der dritten Seite gibt es nichts zu tun, auf der vierten behalten Sie die Option Primärschlüssel soll von Access hinzugefügt werden bei. Auf der letzten Seite legen Sie noch den Namen der Tabelle fest, unter der die importierten Daten gespeichert werden sollen. Wir verwenden den Namen tblEMail1.
Bild 2: Start des Imports einer Textdatei
Bild 3: Einstellung der Option Erste Zeile enthält Feldnamen
Nach dem Import fragt der Assistent im letzten Schritt, ob die Importschritte gespeichert werden sollen. Dies wollen wir in diesem Fall einmal tun, da wir ja gegebenenfalls noch öfter Daten auf die gleiche Art importieren wollen (siehe Bild 4). Auf die gleiche Art und Weise importieren wir nun auch die zweite Textdatei, diesmal allerdings in die Zieltabelle tblEMails2. Auch diesen Import können wir speichern.
Bild 4: Speichern der Importschritte
Abfrage zum Zusammenführen der Datensätze
Nun kümmern wir uns um die Abfrage, welche die Datensätze zusammenführen soll, ohne Duplikate zu liefern. Der neuen Abfrage namens qryEMailAdressenZusammenfuehren fügen wir zunächst die beiden Tabellen tblEMails1 und tblEMails2 als Datenherkunft hinzu – allerdings nicht auf herkömmliche Weise über die Entwurfsansicht, sondern über die SQL-Ansicht. Der Grund ist, dass wir eine UNION-Abfrage nutzen wollen, um die Datensätze der beiden Tabellen zusammenzuführen.
Dazu geben Sie dann den folgenden Text ein:
SELECT EMail, MailAnrede, Status FROM tblEMails1 UNION SELECT EMail, MailAnrede, Status FROM tblEMails2
Die erste Beispieltabelle hat 674 Datensätze, die zweite hat 672. Die erste Tabelle enthält ein paar Datensätze, die nicht in der zweiten Tabelle vorkommen und umgekehrt. Das Ergebnis der UNION-Abfrage liefert 675 Datensätze. Das scheinen zu wenige Datensätze zu sein: Es würde ja bedeuten, dass die zweite Tabelle nur einen Datensatz enthält, der nicht in der ersten Tabelle vorkommt, und das ist nicht der Fall – davon haben wir uns zuvor durch überfliegen der beiden Tabellen überzeugt.
Also prüfen wir genau, wie viele Datensätze in beiden Tabellen vorkommen – und verschaffen uns so eine kleine VBA-Fingerübung. Hier gehen wir von der Anzahl der Datensätze in der ersten Tabelle aus, die wir mit der DCount-Funktion ermitteln:
Public Sub DatensaetzeZaehlen() Dim db As DAO.Database Dim rst As DAO.Recordset Dim lngAnzahl As Long Set db = CurrentDb lngAnzahl = DCount("*", "tblEMails1")