Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Find-Next in Query - Wie? (https://www.delphipraxis.net/7737-find-next-query-wie.html)

Tyler 20. Aug 2003 11:24


Find-Next in Query - Wie?
 
Hallo zusamm...

mit Query.Locate(...) ist es ja wunderbar möglich nach Datensätzen zu suchen, wie aber springe ich auf den nächsten Datensatz, der zu den Suchkriterien passt? (z.dtsch: "Weitersuchen")


vielen Dank für die Mühen

mfG

Hansa 20. Aug 2003 11:39

Re: Find-Next in Query - Wie?
 
Du mußt die Datenmenge aufbereiten, also zuerst eine vernünftige SELECT.
Das geht ungefähr so:

Delphi-Quellcode:
ArtDS.Close;
    ArtDS.SelectSQL.Text := 'SELECT * FROM ART WHERE UPPER (BEZ) LIKE UPPER (''%' + LabeledEdit1.Text + '%'') ORDER BY NR';
    ArtDS.Open;
    IF NOT ArtDS.IsEmpty THEN BEGIN
      WHILE NOT ArtDS.EOF AND weiter DO BEGIN

        lblArtBez.Caption := ArtDS.FieldByName ('BEZ').AsString;
        CASE MessageDlg('Artikel gefunden ?',mtInformation,
          [mbYes, mbNo, mbCancel], 0) OF
          mrNo    : begin
                       weiter := true;
                       lblArtNr.Caption := '';
                     end;
          mrYes   : begin
                       weiter := false;
                       gefunden := true;
                       close;
                     end;
          mrCancel : begin
                       LabeledEdit1.Text := '';
                       weiter := false;
                       close;
                       lblArtNr.Caption := '';
                     end;
        END;
        IF weiter THEN
          ArtDs.Next;
      END;
      IF ArtDS.Eof THEN
        ShowMessage ('nicht gefunden !');
    END
Nur als Anhaltspunkt ! Der Code ist viel umfangreicher, alles wäre jetzt zuviel und überflüssig. Das Proggy sucht anhand einer in ein Editfeld eingegebenen Suchanforderung zuerst mal alle Daten zusammen, die zutreffen KÖNNTEN. Da kannst Du nun durchwandern mit next. Dann habe ich noch 2 Variable "weiter" und gefunden". gefunden ist eben gefunden. weiter ist nicht gefunden, aber noch was da zum suchen. Den Rest mußt Du Dir denken/selber machen. :mrgreen:

Tyler 20. Aug 2003 12:49

Re: Find-Next in Query - Wie?
 
Danke für den Tip Hansa, aber das ist leider nicht genau das was ich meine / suche.

Ein "Filtern" per SQL hab ich soweit in mein Programm schon eingbaut, mit allen möglichen Gimmicks, der Nachteil davon ist aber:

1. ein Filtern per SQL dauert länger als das Suchen mit "LOOKUP"

2. ein Filter sperrt eben, was ja auch sein Aufgabe ist, einen Teil der Datensätze aus, beim "LOCATE" aber hab ich die Möglichkeit noch uneingeschränkt in meiner "Table" zu browsen - was manchmal sehr wichtig ist

So einen ähnlichen Ansatz wie du hatte ich auch bereits verfolgt, nur etwas "vereinfacht" :D, und zwar nach folgendem Prinzip:

Delphi-Quellcode:
QUERY.First
if Query.FieldByName('feld') <> suchbegriff then Query.Next
else MessageBox('GEFUNDE');
Nur leider ist diese Art der Suche auch sehr langsam...

mfG

Hansa 20. Aug 2003 13:08

Re: Find-Next in Query - Wie?
 
Filter gehören z.B. Melitta und die sollen den auch behalten. 8) Es gibt im Datenbankbereich glaube ich kein Wort, das so zweckentfremdet wird, wie "Filter". Was macht denn ein Kaffefilter? Er hält Bestandteile zurück, die man im Kaffe besser nicht hat. Dafür muß er aber erst mal gefüllt werden und hält den Kaffesatz zurück, der dann weggeschmissen wird. Also das, was überflüssig oder schädlich ist, wie Metallspäne im Öl, was der Ölfilter erledigt.

Was ich mache ist also KEIN Filter, sondern ich grenze die Datenmange mit WHERE erst einmal von vorneherein auf die Daten ein, die EVENTUELL gebraucht werden, also auf alle, die den Suchbegriff beinhalten. Und die brauche ich auch, da ist nix mehr mit Filtern. Die Datenmenge wird definitiv erst mal benötigt. Da kannste nix machen. Dann durchlaufe ich sie anhand der Nummer solange, bis der User sagt: Ja, das habe ich gesucht. Oder willst Du das Rad neu erfinden? :mrgreen:

Warum soll das mit Lookup schneller gehen ? Es könnte sein, daß Du eventuell das ganze beschleunigen kannst mit einem geschickteren Index, oder einer Hilfstabelle. Aber das war zumindest bei mir nicht nötig. Habe gerade einen Test gemacht, aus 50.000 Datensätzen einen rauszusuchen, dessen Suchbegriff nur auf 2 zutrifft. No Problem. Hätte ich erst die 50.000 gelesen, und dann die 2 rausgefiltert hätte es schon länger gedauert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:48 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