AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Tabelle filtern mit mehreren Suchkriterien
Thema durchsuchen
Ansicht
Themen-Optionen

Tabelle filtern mit mehreren Suchkriterien

Ein Thema von ZeroQool007 · begonnen am 6. Sep 2004 · letzter Beitrag vom 7. Sep 2004
Antwort Antwort
ZeroQool007

Registriert seit: 30. Aug 2004
127 Beiträge
 
#1

Tabelle filtern mit mehreren Suchkriterien

  Alt 6. Sep 2004, 16:00
Hallo! Folgendes Problem....habe eine Tabelle u möchte die Filtern und zwar nach mehreren Suchkriterien...

Delphi-Quellcode:
  ADODataSet_Anzeige.CommandText:=('Select * FROM tblMovieList '
    + 'WHERE vCh50Filmtitel LIKE ' + QuotedStr(SQL_JokerStr[0] + edt_Filmtitel.Text + SQL_JokerStr[0])+
      'AND vChFormat LIKE ' + QuotedStr(SQL_JokerStr[0] + ComboBox_Format.Text + SQL_JokerStr[0]) +
      'AND vChKategorie LIKE ' + QuotedStr(SQL_JokerStr[0] + ComboBox_Kategorie.Text + SQL_JokerStr[0]) +
      'AND vChVerliehen LIKE ' + QuotedStr(SQL_JokerStr[0] + edt_Leiher.Text + SQL_JokerStr[0]));

*Link zum Bild entfernt*


Hab mal etwas gebastelt, aber der spuckt nur dann etwas aus, wenn ich alle 4 Felder ausfülle, aber möchte halt das mir Ergebnisse liefert, wenn ich zB nur 1,2,3 oder alle 4 Felder ausfülle....Danke im voraus....

[edit=Sharky]Bilder bitte immer als Anhang. Nicht jeder hat eine DSL-Flatrate. Danke. Mfg, Sharky[/edit]
Miniaturansicht angehängter Grafiken
1_499.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Tabelle filtern mit mehreren Suchkriterien

  Alt 6. Sep 2004, 16:07
Hallo,

wenn du in einem Feld nichts einträgst, kommt irgendwo in der SQL Abfrage eine Bedingungwhere Feld like '%%' Vielleicht interpretieren einige DBMS diese %% Bedingung unterschiedlich, und liefern dir immer FALSE zurück. Bei MySQL klappt das, daher meine Frage (wie üblich), welche Datenbank benutzt du denn?

Gruß
  Mit Zitat antworten Zitat
ZeroQool007

Registriert seit: 30. Aug 2004
127 Beiträge
 
#3

Re: Tabelle filtern mit mehreren Suchkriterien

  Alt 6. Sep 2004, 16:25
Ich benutze gerade eine Access Datenbank und greife per ADOConnection und ADODataSet darauf zu...

SQL_JokerStr habe ich bei mir so definiert:

Delphi-Quellcode:
SQL_JokerStr : Array[0..7] of String[1] =
    ('%', '_',
     '[', ']',
     ',' ,
     '(',')',
     '.');
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: Tabelle filtern mit mehreren Suchkriterien

  Alt 6. Sep 2004, 16:45
Zitat von ZeroQool007:
Hallo! Folgendes Problem....habe eine Tabelle u möchte die Filtern und zwar nach mehreren Suchkriterien...

Delphi-Quellcode:
  ADODataSet_Anzeige.CommandText:=('Select * FROM tblMovieList '
    + 'WHERE vCh50Filmtitel LIKE ' + QuotedStr(SQL_JokerStr[0] + edt_Filmtitel.Text + SQL_JokerStr[0])+
      'AND vChFormat LIKE ' + QuotedStr(SQL_JokerStr[0] + ComboBox_Format.Text + SQL_JokerStr[0]) +
      'AND vChKategorie LIKE ' + QuotedStr(SQL_JokerStr[0] + ComboBox_Kategorie.Text + SQL_JokerStr[0]) +
      'AND vChVerliehen LIKE ' + QuotedStr(SQL_JokerStr[0] + edt_Leiher.Text + SQL_JokerStr[0]));
Wenn ein Eingabefeld leer ist, sollte es gleich aus dem Filter herausfallen:
Delphi-Quellcode:
cmdtext := 'Select * FROM tblMovieList WHERE ';
if edt_Filmtitel.Text <> 'then
   cmdtext := cmdtext + 'vCh50Filmtitel LIKE ' + QuotedStr(SQL_JokerStr[0] + edt_Filmtitel.Text + SQL_JokerStr[0]);
.....
Der dynamische Zusammenbau der WHERE-Klausel wird nun etwas knifflig, denn man muss
an den richtigen Stellen die Schlüsselwörter WHERE und AND liefern.
Deshalb hier eine Procedure, die dabei hilft:
Delphi-Quellcode:
{**************************************************************************
* NAME:    ImplantSqlWhereClause
* DESC:    Diese Procedure analysiert eine SQL-Anweisung und
*          "pflanzt" eine einschränkende Where-Bedingung in die
*          Anweisung
*************************************************************************}

procedure ImplantSqlWhereClause(SQL:TStrings; const WhereClause:string);
var
   i : Integer;
   wflag : Boolean;
   ipos : Integer;
   s : string;
begin
   if Trim(WhereClause) = 'then
      Exit; // Ohne Where-Bedingung ist nix zu tun

   wflag := False;
   ipos := SQL.Count;
   for i := SQL.Count - 1 downto 0 do
   begin
      s := UpperCase(Trim(SQL.Strings[i]));

      if s = 'then
         Continue;

      if AnsiSameText('ORDER BY', Copy(s, 1, 8)) or
         AnsiSameText('GROUP BY', Copy(s, 1, 8)) or
         AnsiSameText('HAVING', Copy(s, 1, 6)) then
      begin
         ipos := i;
         Continue;
      end;
      if AnsiSameText('WHERE', copy(s, 1, 5)) then
         wflag := True;
   end;

   if wflag then
   begin
      s := 'AND '+WhereClause;
   end
   else
   begin
      s := 'WHERE '+WhereClause;
   end;

   if ipos < SQL.Count then
      SQL.Insert(ipos, s)
   else
      SQL.Add(s);
end;
Andreas
  Mit Zitat antworten Zitat
ZeroQool007

Registriert seit: 30. Aug 2004
127 Beiträge
 
#5

Re: Tabelle filtern mit mehreren Suchkriterien

  Alt 7. Sep 2004, 11:23
Vielen Dank für eure Hilfen! Hab es nun hinbekommen....

Delphi-Quellcode:
var
  TempSQLWhere1 : String;

begin
  ADODataSet_Anzeige.Filtered:=false;
  ADODataSet_Anzeige.Close;
  ADODataSet_Anzeige.Active:=false;

  TempSQLWhere1 := '';

  if edt_Filmtitel.Text <> 'then
      TempSQLWhere1 := TempSQLWhere1 + 'vCh50Filmtitel LIKE ' + QuotedStr(SQL_JokerStr[0] + edt_Filmtitel.Text + SQL_JokerStr[0]);
  if ComboBox_Format.Text <> 'then
    begin
      if TempSQLWhere1 = 'then
          TempSQLWhere1 := TempSQLWhere1 + 'vChFormat LIKE ' + QuotedStr(SQL_JokerStr[0] + ComboBox_Format.Text + SQL_JokerStr[0])
      else
        TempSQLWhere1 := TempSQLWhere1 + ' and ' + 'vChFormat LIKE ' + QuotedStr(SQL_JokerStr[0] + ComboBox_Format.Text + SQL_JokerStr[0]);
    end;

  if ComboBox_Kategorie.Text <> 'then
    begin
      if TempSQLWhere1 = 'then
          TempSQLWhere1 := TempSQLWhere1 + 'vChKategorie LIKE ' + QuotedStr(SQL_JokerStr[0] + ComboBox_Kategorie.Text + SQL_JokerStr[0])
      else
        TempSQLWhere1 := TempSQLWhere1 + ' and ' + 'vChKategorie LIKE ' + QuotedStr(SQL_JokerStr[0] + ComboBox_Kategorie.Text + SQL_JokerStr[0]);
    end;

  if edt_Leiher.Text <> 'then
    begin
      if TempSQLWhere1 = 'then
          TempSQLWhere1 := TempSQLWhere1 + 'vChVerliehen LIKE ' + QuotedStr(SQL_JokerStr[0] + edt_Leiher.Text + SQL_JokerStr[0])
      else
        TempSQLWhere1 := TempSQLWhere1 + ' and ' + 'vChVerliehen LIKE ' + QuotedStr(SQL_JokerStr[0] + edt_Leiher.Text + SQL_JokerStr[0]);
    end;

  ADODataSet_Anzeige.CommandText := TempSQLWhere1 + 'vChFormat LIKE ' + QuotedStr(SQL_JokerStr[0] + ComboBox_Format.Text + SQL_JokerStr[0]);
  ADODataSet_Anzeige.CommandText:= 'Select * FROM tblMovieList WHERE ' + TempSQLWhere1;

      memo1.Clear;
      memo1.Lines.Add(ADODataSet_Anzeige.CommandText);
  ADODataSet_Anzeige.Open;
  ADODataSet_Anzeige.Active:=active;
  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 08:59 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