AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Doppelte Kunden Verhindern
Thema durchsuchen
Ansicht
Themen-Optionen

Doppelte Kunden Verhindern

Ein Thema von franktron · begonnen am 22. Mai 2013 · letzter Beitrag vom 22. Mai 2013
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
672 Beiträge
 
Delphi 10.4 Sydney
 
#11

AW: Doppelte Kunden Verhindern

  Alt 22. Mai 2013, 10:17
Schreibfehler können mit der Levenshtein-Distanz berücksichtigt werden
Ich würde da eher ein soundex vorziehen ... eine deutsche Implementierung gibt es als Kölner Phonetik, ADS SQL Implementierung hier: http://joachimduerr.blogspot.de/2012...netik-sql.html
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#12

AW: Doppelte Kunden Verhindern

  Alt 22. Mai 2013, 10:47
Wenn in einem 200-Parteien-Haus 2 "Thomas Schmidt"s wohnen, darf nur einer davon Kunde werden? Ich würde eine doppelte Eingabe nicht generell verhindern, sondern nur eine Warnung ausgeben, wenn es sich um einen mutmaßlichen Doppler handeln könnte. Die letzte Entscheidung hat dann der Anwender zu treffen.
Ich will ja auch nur eine Warnung einbauen.
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#13

AW: Doppelte Kunden Verhindern

  Alt 22. Mai 2013, 10:53
Dann schick doch einfach eine Abfrage der Art
SQL-Code:
SELECT
  COUNT(*)
FROM
  Kundentabelle
WHERE
  SOUNDEX(Name) = SOUNDEX(:NeuerName)
AND
  SOUNDEX(Vorname) = SOUNDEX(:NeuerVorname)
-- usw.
ab. Kommt eine Zahl > 0 heraus, dann warnen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#14

AW: Doppelte Kunden Verhindern

  Alt 22. Mai 2013, 12:08
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.
  Mit Zitat antworten Zitat
arnof

Registriert seit: 25. Apr 2013
1.250 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#15

AW: Doppelte Kunden Verhindern

  Alt 22. Mai 2013, 12:49
mal ein Auszug aus meinem Quellcode:

Code:
   {$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 ....
STRToSQL -> Filtert bzw übersetzt ja nach SQL Server Sonderzeichen also ' ` usw. die sonst zu Fehlern führen, wenn Sie im Text vorkommen!

Geändert von arnof (22. Mai 2013 um 12:55 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#16

AW: Doppelte Kunden Verhindern

  Alt 22. Mai 2013, 13:34
Für Layer-8-Fehler kann ja keine Software etwas
Und dann kommen die kleinen regionalen Unterschiede Grewenbrooch -> Grevenbroich Buur -> Boer -Bör usw.
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!)
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#17

AW: Doppelte Kunden Verhindern

  Alt 22. Mai 2013, 13:52
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.
fork me on Github
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz