Ich bin VBA Laie und habe eine prinzipielle Frage: ich benötige einen Fuzzy-Tabellenvergleich von zwei Tabellen mit Adressdaten (mit den üblichen Adressinhalten wie Name, Strasse, Zusatzinformationen). Als Ergebnis will ich eine Tabelle erhalten, in der identische Datensätze markiert sind, sowie Datensätze mit einer hohen Ähnlichkeit, sowie identische Personen, die wahrscheinlich umgezogen sind (d.h. Name+Zusatzinfo ist noch gleich, aber die postanschrift ist anders). Frage1) Ist VBA hier ein geeignetes Tool? Das könnte man natürlich auch in einer anderen Programmiersprache machen lassen, aber ich hätte das ganze gerne in Access, so dass ich gut zugreifen kann. In Excel gibt es ein Plugin, dass etwas ähnliches macht (Fuzzy loolup), aber Excel schafft bei mir die grossen Datenmengen nicht und stürzt ab Frage 2) ist VBA zwischen den verschiedenen Access Versionen komplett kompatibel oder wird das nicht klappen (Ich nutze Access 2004! :-) ) 3) Gibt es sowas vielleicht schon fertig (zu kaufen)? (Ich lasse das sonst von einem VBA Programmierer programmieren.) Many thanks, Anke
ZitatIch nutze Access 2004!
Da bist Du eine der wenigen, an denen das nicht vorbeigegangen ist.
In einer Datenbank - Access ist eine (kleine) - führt man Mengenoperationen vorrangig per SQL aus, dafür ist diese Sprache speziell konzipiert. Vergleiche auf Gleichheit und einfache Ähnlichkeit lassen sich damit simpel und performant lösen.
Bei schwierigeren Ähnlichkeiten (z.B. andere Schreibweisen im Namen) müsste man Zusatzfunktionen einsetzen, sinnvollerweise nur auf die betroffene Restmenge.
Also: Lösbar ist das in Access schon mal ganz gut, es käme auf konkrete Anforderungen an.
Kenn ich 8)
Google mal Levensthein
Das ist ein krasses Hirn, das sich das ausgedacht hat. Stand bei mir auch schon mal an der Tafel und hab ich rekonstruiert. Darauf muss man erst mal kommen.
Findest Du fertige Codes auch in VB. Ist ein Performance-Fresser (logischer Weise, weil alle Zeichen verglichen werden)
Es gibt eine relativ gute Performance-Variante mit Byte-Array
Meld Dich noch mal, würde mich interessieren.
Ich hätte ein Rückfrage an Eberhard: Vergleich auf Gleichheit mache ich bereits über eine Query, ich habe zudem noch etwas herumgespielt (nehme Sonderzeichen, Leerzeichen usw. in der Postanschrift raus, um möglichst viele ähnliche zu erwischen, vergleiche dann nur die ersten 5 Buchstaben der Strasse etc.). Gäbe es noch andere Tricks, um in einer Query / SQL auf einfache Ähnlichkeit zu testen? Ich habe bislang nur Gleichheit hinbekommen. Levensthein werde ich jetzt mal googeln ... Und was für Zusatzfunktionen meinst Du? würdest du das trotzdem in einer Query / SQL lösen?
Einfache Ähnlichkeit: Es gibt ja die Mustersuche per LIKE, direkt in Abfragen umzusetzen, teilweise mit Indexunterstützung je nach Formulierung.
Ansonsten gibt es mehrere Lösungen zur Ähnlichkeitssuche. Diese kann man ebenfalls in Abfragen einsetzen, sind aber naturgemäß etwas aufwändiger und daher nur auf relevante Teilmengen loszulassen, wenn man Datenmenge und Performance zusammenbringen will.
Weiter kann man auch an reguläre Ausdrücke denken. Diese sind eine deutliche Erweiterung für Mustersuchen.
Zitatdas trotzdem in einer Query / SQL lösen?
Für mich ist das immer der erste Ansatz innerhalb einer datenbankmäßigen Umgebung. Alternative wäre ja eine Schleife über die relevante Menge, was es meist nicht besser macht (es sei denn, man kann nur fürchterliche Abfragen erzeugen).
Ausnahmen wären nur Fälle, wo SQL strukturell zu umständlich für konkrete Aufgaben wäre.
Zitat: Ansonsten gibt es mehrere Lösungen zur Ähnlichkeitssuche.
Wonach müsste ich hier googeln? "Ähnlichkeitssuche + ms access"? Oder gibt es noch andere Stichworte?
"Like" schaue ich mir an, das kannte ich noch nicht.
Zitat von: ebs17 am März 07, 2019, 11:02:34
Ansonsten gibt es mehrere Lösungen zur Ähnlichkeitssuche. Diese kann man ebenfalls in Abfragen einsetzen, sind aber naturgemäß etwas aufwändiger und daher nur auf relevante Teilmengen loszulassen, wenn man Datenmenge und Performance zusammenbringen will.
Im Kontext mit Namens-/Adressdaten sollte man den Soundex-Algorithmus (https://de.wikipedia.org/wiki/Soundex) namentlich nennen, mit dem sich nach meiner Erfahrung in diesem besonderen Kontext und bei achtsamen Umgang sehr gute Ergebnisse erreichen lassen.
Wenn man Soundex-Code der relevanten Felder zusätzlich in den Tabellen speichert, ist die mögliche Performance ebenfalls sehr gut. - Natürlich wäre dies eine bewusste Denormalisierung, die nicht bei allen Datenbankentwicklern auf uneingeschränkte Zustimmung stoßen wird.
Zu nennen wäre auch Kölner Phonetik (https://www.vbarchiv.net/tipps/details.php?id=1754)
Vollständigkeitshalber auch vergleichen: Ähnliche Begriffe finden
(http://www.mosstools.de/index.php?option=com_content&view=article&id=69&Itemid=60)
Ganz herzlichen Dank bereits, habe Soundex zum Laufen gebracht und das klappt wie am Schnürchen, total super!!!!