Announcement

Collapse
No announcement yet.

Primär Index und Datensatzsuche

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Primär Index und Datensatzsuche

    Habe Paradox Tabelle mit einem Feld Nachname und einem Feld Vorname. <BR> Ich habe nun einen zusammengesetzten Index erstellt mit Nachname + Vorname. <BR> Wie kann ich über Delphi nach Datensätzen suchen mit diesem zusammengesetzten Index ? <BR> Die Eingabe wäre z.B Maier Theo und er sollte mit findkey direkt den Datensatz finden. Danke

  • #2
    Hallo Rolf!

    Zunächst ist es falsch einen zusammengesetzten Primärindex aus Name und Vorname zu bilden.

    Die Eindeutigkeit des Schlüssels ist nicht gewährleistet.

    Eine Suche über beide Feldinhalte in einem String ist nur sehr schwer möglich.

    Ich habe folgende Lösung:

    function FindeZwei(Tbl:TTable;TxtStr:String):boolean;

    var N1,N2:string;

    gefunden:boolean;

    lf:integer;

    begin

    gefunden:=false;

    lf:=Pos(' ',TxtStr);

    if (lf=0) then
    exit;

    Trim(TxtStr)

    lf:=2;

    N1:='';

    N2:='';

    repeat {Text Teilen bis gefunden oder kein Blank mehr in Text}

    while (lf<=length(TxtStr)) and (TxtStr[lf]<>' ') do {Blank suchen}

    inc(lf);

    if (lf<=length(TxtStr)) then BEGIN {wenn Blank dann teilen}

    N1:=copy(TxtStr,1,lf);

    N2:=copy(TxtStr,lf+1,length(TxtStr)-lf);

    gefunden:=Tbl.FindKey([N1,N2]);

    inc(lf);

    END;{if}

    until (gefunden) or (lf>length(TxtStr));

    END;//if

    result:=gefunden;

    end;//functio

    Comment


    • #3
      Hallo,
      hier mal eine andere Variante:
      Table1.Locate('Name; Vorname; Anrede',
      VarArrayOf([Edit1.text,cb1.Items[ComboBox1.ItemIndex],Table2Anrede.value]), [loCaseInsensitive]);
      Hier wird z.B. Nach "Meier Alfred Herr" gesucht. Das ist zwar kein eindeutiger Begriff, aber es ist möglich. Die Daten stammen aus verschiedenen Quellen. Besser ist es aber immer, mit TQuery sich alle Herren Alfred Meier anzeigen zu lassen.

      Query1.close; Query1.SQL.clear;
      s := 'SELECT name, vorname, gebdat FROM kunden.db<br>
      WHERE name = Edit1.text<br>
      AND vorname = edit2.text';<br>
      Query1.SQL.Add(s);<br>
      Query1.Active := true;<br>

      mfg Klaus-Pete

      Comment

      Working...
      X