![]() |
Tabelle filtern mit mehreren Suchkriterien
Liste der Anhänge anzeigen (Anzahl: 1)
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] |
Re: Tabelle filtern mit mehreren Suchkriterien
Hallo,
wenn du in einem Feld nichts einträgst, kommt irgendwo in der SQL Abfrage eine Bedingung
SQL-Code:
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?
where Feld like '%%'
Gruß |
Re: Tabelle filtern mit mehreren Suchkriterien
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] =
('%', '_', '[', ']', ',' , '(',')', '.'); |
Re: Tabelle filtern mit mehreren Suchkriterien
Zitat:
Delphi-Quellcode:
Der dynamische Zusammenbau der WHERE-Klausel wird nun etwas knifflig, denn man muss
cmdtext := 'Select * FROM tblMovieList WHERE ';
if edt_Filmtitel.Text <> '' then cmdtext := cmdtext + 'vCh50Filmtitel LIKE ' + QuotedStr(SQL_JokerStr[0] + edt_Filmtitel.Text + SQL_JokerStr[0]); ..... 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; |
Re: Tabelle filtern mit mehreren Suchkriterien
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:48 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-2025 by Thomas Breitkreuz