AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Find-Next in Query - Wie?
Thema durchsuchen
Ansicht
Themen-Optionen

Find-Next in Query - Wie?

Ein Thema von Tyler · begonnen am 20. Aug 2003 · letzter Beitrag vom 20. Aug 2003
Antwort Antwort
Benutzerbild von Tyler
Tyler

Registriert seit: 19. Jun 2003
Ort: Berlin
241 Beiträge
 
#1

Find-Next in Query - Wie?

  Alt 20. Aug 2003, 11:24
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
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#2

Re: Find-Next in Query - Wie?

  Alt 20. Aug 2003, 11:39
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.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Tyler
Tyler

Registriert seit: 19. Jun 2003
Ort: Berlin
241 Beiträge
 
#3

Re: Find-Next in Query - Wie?

  Alt 20. Aug 2003, 12:49
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" , 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
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#4

Re: Find-Next in Query - Wie?

  Alt 20. Aug 2003, 13:08
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?

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.
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort


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 05: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