![]() |
AW: Doppelte Kunden Verhindern
Zitat:
![]() |
AW: Doppelte Kunden Verhindern
Zitat:
|
AW: Doppelte Kunden Verhindern
Dann schick doch einfach eine Abfrage der Art
SQL-Code:
ab. Kommt eine Zahl > 0 heraus, dann warnen.
SELECT
COUNT(*) FROM Kundentabelle WHERE SOUNDEX(Name) = SOUNDEX(:NeuerName) AND SOUNDEX(Vorname) = SOUNDEX(:NeuerVorname) -- usw. |
AW: Doppelte Kunden Verhindern
Wobei ein Vorteil von SoundEx ja ist, dass man es nur einmal berechnen muss und danach beliebig oft vergleichen kann, im Gegensatz zu z.B. Levenshtein. Daher sollte man das imo auch ausnutzen, indem man den SoundEx-String als eigenes Feld in die Tabelle schreibt. Sonst muss für jeden neuen Datensatz die ganze Tabelle durchlaufen werden, was ineffizient wäre.
|
AW: Doppelte Kunden Verhindern
mal ein Auszug aus meinem Quellcode:
Code:
STRToSQL -> Filtert bzw übersetzt ja nach SQL Server Sonderzeichen also ' ` usw. die sonst zu Fehlern führen, wenn Sie im Text vorkommen!
{$IFDEF ADO}
oNummer:='[E-Mail]'; {$ELSE} oNummer:='Adressen."E-Mail"'; {$ENDIF} QU_Dublette.SQL.TEXT:='SELECT Adresse,Nummer,Suchbegriff,Firma1,Firma2,Vorname,Name,Strasse,Plz,Ort,Telefon,'+oNummer+' FROM Adressen'; QU_Dublette.SQL.Add('WHERE Art='+IntToStr(TabControl1.TabIndex)+' AND ((Ort LIKE '#39+StrToSQL(TBL_Kunden.FieldByName('Ort').AsString,TBL_Kunden.SERVER_TYPE)+ #39' AND Strasse LIKE '#39+StrToSQL(TBL_Kunden.FieldByName('Strasse').AsString,TBL_Kunden.SERVER_TYPE)+#39+')'); if Trim(TBL_Kunden.FieldByName('E-Mail').AsString)<>'' then QU_Dublette.SQL.Add('OR ('+oNummer+' LIKE '#39+StrToSQL(TBL_Kunden.FieldByName('E-Mail').AsString,TBL_Kunden.SERVER_TYPE)+#39')'); QU_Dublette.SQL.Add(')'); if Trim(TBL_Kunden.FieldByName('Firma1').AsString+TBL_Kunden.FieldByName('Firma2').AsString+TBL_Kunden.FieldByName('Name').AsString)<>'' then begin QU_Dublette.SQL.Add('AND ('); if Trim(TBL_Kunden.FieldByName('Firma1').AsString)<>'' then QU_Dublette.SQL.Add('Firma1 LIKE '#39+StrToSQL(Trim(TBL_Kunden.FieldByName('Firma1').AsString),TBL_Kunden.SERVER_TYPE)+#39+' OR '); if Trim(TBL_Kunden.FieldByName('Firma2').AsString)<>'' then QU_Dublette.SQL.Add('Firma2 LIKE '#39+StrToSQL(Trim(TBL_Kunden.FieldByName('Firma2').AsString),TBL_Kunden.SERVER_TYPE)+#39+' OR '); if Trim(TBL_Kunden.FieldByName('Name').AsString)<>'' then QU_Dublette.SQL.Add('Name LIKE '#39+StrToSQL(Trim(TBL_Kunden.FieldByName('Name').AsString),TBL_Kunden.SERVER_TYPE)+#39+' OR '); QU_Dublette.SQL.Add('1=2)'); end; QU_Dublette.Open; if QU_Dublette.RecordCount>0 then begin // Doubletten gefunden // Kunden eine Auswahl anzeigen .... |
AW: Doppelte Kunden Verhindern
Zitat:
Gerade gehört: Itter - Iter (beides gleich gesprochen!) Und was macht man wenn es wirklich zwei "Klaus Bergmann" in "Essen" gibt? Und auch beliebt ist Johannes Heesters = Hans Heesters = Johan M. Heesters = Johann Marius Heesters ..... Mehr als der Hinweis, am besten als Liste, "da gibt es Ähnlichkeiten", ist eigentlich nicht redlich. Ist halt immer ein Layer8-Problem Gruß K-H P.S. Ich bin mit der Kölner Phonetik recht zufrieden. (Aber nur als Hinweis!) |
AW: Doppelte Kunden Verhindern
SoundEx ist ein völlig veralteter Algorithmus der viele false-Positives generiert.
Der Zielraum von einem Buchstaben und 3 Ziffern ist einfach viel zu klein. Schlieslich wurde Soundex für Kateikarten und nicht für Computer entwickelt. Man sollte Soundex nicht mehr verwenden. Soundex und Kölner Phonetik beruhen auf der Therorie, dass es vor allem beim Hören und Verstehen zu Fehlern kommt. Dabei sind Buchstabendreher, fehlende oder überzählige Buchstaben mindestens ebenso häufig. Wenn man vor dem Abspeichern eines neuen Kunden alle Kunden mit identischer Strase (+Hausnr), PLZ, Ort und Länderkennung anzeigt, dann hat der Benutzer schon eine sehr gute Chance Dupletten zu erkennen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz