AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Einträge in einem DBGrid filtern
Thema durchsuchen
Ansicht
Themen-Optionen

Einträge in einem DBGrid filtern

Ein Thema von f4k3 · begonnen am 11. Sep 2007 · letzter Beitrag vom 12. Sep 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von f4k3
f4k3

Registriert seit: 15. Aug 2007
Ort: Nürnberg
313 Beiträge
 
Delphi 2007 Architect
 
#1

Einträge in einem DBGrid filtern

  Alt 11. Sep 2007, 09:45
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:

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;
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.

Hättet ihr ne Idee wie ich das ganze realisieren könnte?

Ich danke schon mal im Vorraus

Euer f4k3
Sascha
  Mit Zitat antworten Zitat
Bolt Thrower

Registriert seit: 2. Sep 2004
Ort: Weilheim
22 Beiträge
 
#2

Re: Einträge in einem DBGrid filtern

  Alt 11. Sep 2007, 10:21
Hallo f4k3,

alternativ könntest Du Dir mal die SMDBGrid-Komponente anschauen. Sie ist Freeware und über die Option "eoShowFilterBar" kannst Du Dir einen Balken zum Filtern der Daten anzeigen lassen (für jede Spalte, so dass Du die Konstruktion mit der "ComboBox" auch nicht benötigst).

Grüße,

Bolt Thrower
In Kamerun gibt's heit Gratismoscht!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Einträge in einem DBGrid filtern

  Alt 11. Sep 2007, 10:24
Oder du filterst das dahinterliegende DataSet.
Markus Kinzler
  Mit Zitat antworten Zitat
MondoShiva

Registriert seit: 14. Aug 2007
Ort: Mönchengladbach
63 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Einträge in einem DBGrid filtern

  Alt 11. Sep 2007, 10:34
Delphi-Quellcode:

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;
hoffe das hilft dir ein wenig!
Musst es deinen wünschen nach umgestalten
Veritas et Aequitas
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Einträge in einem DBGrid filtern

  Alt 11. Sep 2007, 10:45
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
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von f4k3
f4k3

Registriert seit: 15. Aug 2007
Ort: Nürnberg
313 Beiträge
 
Delphi 2007 Architect
 
#6

Re: Einträge in einem DBGrid filtern

  Alt 11. Sep 2007, 10:51
Zitat von mkinzler:
Oder du filterst das dahinterliegende DataSet.
Ja lol ... danke ... aber meine Frage war ja wie ich dass eben anstell.

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 ...
DBGrid

Und so soll es nach dem filtern dann praktisch aussehen ...
Nach Filterung
Sascha
  Mit Zitat antworten Zitat
Benutzerbild von f4k3
f4k3

Registriert seit: 15. Aug 2007
Ort: Nürnberg
313 Beiträge
 
Delphi 2007 Architect
 
#7

Re: Einträge in einem DBGrid filtern

  Alt 11. Sep 2007, 11:21
Zitat von MondoShiva:
Delphi-Quellcode:

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;
hoffe das hilft dir ein wenig!
Musst es deinen wünschen nach umgestalten
So n ähnlichen Code Hatte ich auch schon ... nur dass n paar unklarheiten dabei sind ...

für mich sieht der code so aus ...

Delphi-Quellcode:

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;
Versteh ich den Quellcode bis dahin richtig?

Danke für eure Geduld

Sascha
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Einträge in einem DBGrid filtern

  Alt 11. Sep 2007, 11:52
Hallo,

mal in Kürze

Query -> DataSource -> DBGrid


Delphi-Quellcode:
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;
Du baust die Query, auf der das DBGrid basiert,
also jedesmal neu auf.


Heiko
Heiko
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Einträge in einem DBGrid filtern

  Alt 11. Sep 2007, 12:08
DataSet.Filter oder besser einen TQuery nehmen.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von f4k3
f4k3

Registriert seit: 15. Aug 2007
Ort: Nürnberg
313 Beiträge
 
Delphi 2007 Architect
 
#10

Re: Einträge in einem DBGrid filtern

  Alt 11. Sep 2007, 13:35
Zitat:


Delphi-Quellcode:
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;
So ... Query = Neuland ^^

hab n TQuery und ne DataSource die darauf zeigt ...

Wenn ich nun ...

Delphi-Quellcode:

procedure eSuchbegriffChange (Sender: TObject); // Wenn Editfeld verändert wird
begin

   case cbSuchkriterium.ItemIndex of // Suchkriterium aus Combobox

    1: sSearchType := 'Firma';
       sSearchItem := eSuchbegriff.Text + '%';

...
schreibe dann bekommm ich ne Fehlermeldung dass sSearchType und sSearchItem undefinierte Bezeichner sind ...
sind das var's?

Sorry ... SQL + Query + Delphi newb

Sascha
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 10:30 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