![]() |
Einträge in einem DBGrid filtern
Moin liebe DP'ler ;)
Ich möchte eine art Suchfunktion programmieren und steh etz vor dem Problem dass ich überhaupt nicht weiß wie ich das realisieren könnte ... Ich hab mir zunächst ein Grundkonzept überlegt. Ich hab ne Paradox-Datenbank in der Kundeninformationen gespeichert werden sollen. zuerst will ich einen Oberbegriff ( der zugleich oberbegriff in den Tabellen ist ) wählen. Dann möchte ich dass bei jedem neu eingegebenen Buchstaben mein DBGrid gefiltert wird. sprich ... wenn ich "abc" eingebe dann soll das Grid nur noch einträge anzeigen die diese Buchstaben enthalten! Also müsste es laut Pseudo-Code so aussehen.
Delphi-Quellcode:
Also ich denk mal die einfachste Methode wäre das ganze über FieldByName(*Oberbegriff*) zu lösen, nur hab ich das Problem dass ich nicht weiß ich alle einträge erfassen soll, da die Datenbank ja sicherlich auch erweitert wird, und wie ich dann eben nur die "passenden" Einträge in meinem DBGrid anzeigen lasse.procedure Form1.Edit1Change (Sender: TObject); begin case Combobox1.ItemIndex of begin //Oberbegriff Firma 1: *Suche in Spalte "Firma" nach eingegebener Zeichenkette* //Oberbegriff Ansprechpartner 2: *Suche in Spalte "Ansprechpartner" nach eingegebener Zeichenkette* //Oberbegriff PLZ 3: *Suche in Spalte "PLZ" nach eingegebener Zeichenkette* //Oberbegriff Ort 4: *Suche in Spalte "Ort" nach eingegebener Zeichenkette* end; Hättet ihr ne Idee wie ich das ganze realisieren könnte? Ich danke schon mal im Vorraus ;) Euer f4k3 |
Re: Einträge in einem DBGrid filtern
Hallo f4k3,
alternativ könntest Du Dir mal die ![]() Grüße, Bolt Thrower |
Re: Einträge in einem DBGrid filtern
Oder du filterst das dahinterliegende DataSet.
|
Re: Einträge in einem DBGrid filtern
Delphi-Quellcode:
hoffe das hilft dir ein wenig!var j: Integer; i: Integer; begin for j:=0 to DBGrid1.colCount-1 do begin for i:=0 to DBGrid1.rowCount-1 do begin if pos(lowercase(SucheText.text),lowercase(DBGrid1.Cells[j,i]))>0 then begin DBGrid1.Row := i; DBGrid1.Col := j; UdbTable_Produkte.RecNo := i; // hier kannst du beispielsweise nur aus der tabelle produkte suchen //jenachdem ob du table oder querry benutzt kannst das ja austauschen ShowMessage(SucheText.Text+' wurde in Zeile '+intToStr(i)+ ' in Spalte ' + inttostr(j+1)+' gefunden'); end; end; end; end; Musst es deinen wünschen nach umgestalten :zwinker: |
Re: Einträge in einem DBGrid filtern
Hallo,
wie mkinzler schon schrieb, filtere das darunterliegende DataSet. Am einfachsten ist es, statt einer TTable eine TQuery zu benutzen, und die Query basierend auf deiner Suche bei jeder Änderung in der Suchmaske neu aufzubauen. Es ist dann aber keine direkte Änderung mehr möglich, wenn joins verwendet werden. Als Alternative könnte man auch SetRange des TTable verwenden, falls es nur eine Tabelle ist. Dritte Möglichkeit, normales StringGrid benutzen, Ergebnismenge wie auch immer erzeugen, und in das Grid eintragen. Heiko |
Re: Einträge in einem DBGrid filtern
Zitat:
Es soll ja dann nicht nur die eine Spalte angeben werden in der Das vorkommt, sondern die komplette Zeile rausgefiltert wird. Das Programm sieht folgendermaßen aus ... ![]() Und so soll es nach dem filtern dann praktisch aussehen ... ![]() |
Re: Einträge in einem DBGrid filtern
Zitat:
für mich sieht der code so aus ...
Delphi-Quellcode:
Versteh ich den Quellcode bis dahin richtig?var j: Integer; i: Integer; begin for j:=0 to DBGrid1.colCount-1 do // Schleife beginnt bei null wobei der Endwert -1 ist, somit endlos läuft? begin // Weil die schleife läuft ja nicht rückwärts oder sonstiges for i:=0 to DBGrid1.rowCount-1 do // Gleiches "Problem" wie oben ^^ begin if pos(lowercase(SucheText.text),lowercase(DBGrid1.Cells[j,i]))>0 then // Mit der Zeile kann ich gar nix anfangen, ich könnte mir jedoch denken dass Sie überprüft ob in der Zeile bzw. Spalte nach übereinstimmungen sucht begin DBGrid1.Row := i; // Wenn dies passiert, wird die Zeile markiert DBGrid1.Col := j; // Und die dazugehörige spalte UdbTable_Produkte.RecNo := i; // hier kannst du beispielsweise nur aus der tabelle produkte suchen //jenachdem ob du table oder querry benutzt kannst das ja austauschen // Was macht RecNo? ShowMessage(SucheText.Text+' wurde in Zeile '+intToStr(i)+ ' in Spalte ' + inttostr(j+1)+' gefunden'); end; end; end; end; Danke für eure Geduld ;) :coder2: |
Re: Einträge in einem DBGrid filtern
Hallo,
mal in Kürze Query -> DataSource -> DBGrid
Delphi-Quellcode:
Du baust die Query, auf der das DBGrid basiert,
sSearchType:= 'Firma'; // wenn Firma ausgewählt
sSearchItem:= Edit.Text+'%'; // das % muss sein with Query do begin Close; SQL.Clear; SQL.Add('Select * From TableXXX Where '+sSearchType+' Like '+QuotedStr(theSearchItem)); Open; end; also jedesmal neu auf. Heiko |
Re: Einträge in einem DBGrid filtern
Delphi-Quellcode:
oder besser einen TQuery nehmen.
DataSet.Filter
|
Re: Einträge in einem DBGrid filtern
Zitat:
hab n TQuery und ne DataSource die darauf zeigt ... Wenn ich nun ...
Delphi-Quellcode:
schreibe dann bekommm ich ne Fehlermeldung dass sSearchType und sSearchItem undefinierte Bezeichner sind ...procedure eSuchbegriffChange (Sender: TObject); // Wenn Editfeld verändert wird begin case cbSuchkriterium.ItemIndex of // Suchkriterium aus Combobox 1: sSearchType := 'Firma'; sSearchItem := eSuchbegriff.Text + '%'; ... sind das var's? Sorry ... SQL + Query + Delphi newb :P :duck: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz