Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DBGrid durchsuchen (https://www.delphipraxis.net/91697-dbgrid-durchsuchen.html)

Tim Henford 8. Mai 2007 19:57

Datenbank: MSSQL • Zugriff über: ADO

DBGrid durchsuchen
 
Hallo,

ich versuche gerade eine Suchfunktion für ein DBGrid zu realisieren.
Und zwar hat ich mir das so vorgestellt, dass man das Feld, in dem man suchen will, auswählt und dann in ein EditFeld den Suchbegriff eingibt.

Nun dacht ich, ich könnte über eine Filter-Option
Delphi-Quellcode:
    Query.Filter:= 'Feld1='''+Edit1.Text+'''';
    Query.Filtered:= true;

    Query.First;
    while not Query.Eof do begin
      DBGrid1.SelectedRows.CurrentRowSelected := true;
      Query.Next;
    end;

  Query.Filtered:= false;
die interessanten Eintäge filtern, markieren und wieder entfiltern, aber dann stimmen die Indizes nach dem Entfiltern nicht mehr.

Gibt es eine bessere Lösung, die funktioniert?

mkinzler 8. Mai 2007 20:00

Re: DBGrid durchsuchen
 
Was meinst du mit Index? Ich würde die IDs zur eindeutigen Identifizierung eines datensatzes verwenden.
Willst du Filtern oder Suchen? Schau dir mal .Lookup an. Oder per SQL

Tim Henford 8. Mai 2007 20:11

Re: DBGrid durchsuchen
 
Im Prinzip möcht ich zum Einen einfach alle Einträge, die den Suchtext enthalten markieren lassen.
Wahrscheinlich kann ich da auch einfach den Filter drauflassen.

Es scheint mir so, dass wenn ich Filtere und alle gefilterten Einträge einfach markiere, merkt er sich:
Index 0,1,2 sind markiert.
Filter raus: 0,1,2 sind immernoch markiert, aber das sind ja andere Zeilen, nicht die Zeilen 12,17,29 in denen der Text nun wirklich ist.

Zum anderen wäre es auch interessant, die Row zu finden, in der zum ersten Mal der Suchtext vorkommt und man dann auf "Weitersuchen" klicken kann, um immer den nächsten zu finden und zu markieren.


Danke

mkinzler 8. Mai 2007 20:14

Re: DBGrid durchsuchen
 
Das macht .Locate

Tim Henford 8. Mai 2007 20:32

Re: DBGrid durchsuchen
 
wie kriegt man dann "weitersuchen" hin?

mkinzler 8. Mai 2007 20:56

Re: DBGrid durchsuchen
 
Einfach nocheinmal aufrufen.

Tim Henford 8. Mai 2007 21:09

Re: DBGrid durchsuchen
 
bei
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Query.Locate('Felda','test',[loPartialKey,loCaseInsensitive]);
end

markiert er immer nur den ersten??

mkinzler 8. Mai 2007 21:21

Re: DBGrid durchsuchen
 
Bei TAdoQuery kannst du auch .Seek Antesten

Jelly 8. Mai 2007 21:45

Re: DBGrid durchsuchen
 
Nicht über DBGrid filtern oder suchen, sondern direkt über dem zugrunde liegenden Dataset. Dort kannst du die Eigenschaft Filter setzen. Nicht vergessen Filtered auf true zu setzen.
Jedoch prinzipiell, wenn es sich um viele (paar tausend Datensätze und mehr) handelt, würde ich nicht mehr lokal filtern sondern einen angepassten SQL Befehl neu an den Server schicken.


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