Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   DataSet.Filter mit mehreren Bedingungen (https://www.delphipraxis.net/180626-dataset-filter-mit-mehreren-bedingungen.html)

mohSha 4. Jun 2014 08:29

Datenbank: PARADOX • Version: 4 • Zugriff über: BDE

DataSet.Filter mit mehreren Bedingungen
 
Hallo,
ich bin neu hier und habe gleich eine Frage. Ich schreibe eine Anwendung mit c++Builder. Bin aber in c++ Builder Foren nicht fundig geworden, deshalb stelle ich meine Frage hier :-)

Kurz zusammen gefasst:
habe eine Tabele (CustomerT) mit Nachname, vorname, und Geb. Datum.
Nun möchte ich in dieser Datenbank nach einem Kunden suchen. Dazu mache ich:

Code:
...
{
TFilterOptions FilterOptions;
   TTable *t = CustumerT;
   FilterOptions.Clear();
   FilterOptions << foCaseInsensitive;// << foNoPartialCompare;
   sFilter = "";
   t->FilterOptions = FilterOptions;
   AnsiString v[3]={"","",""};
   v[0] = Edit1->Text.c_str();     //LN
   v[1] = Edit2->Text.c_str();     //FN
   if(BirtDateDateTimePicker->Checked)
      v[2] = BirtDateDateTimePicker->Date.DateString().c_str();
   if (!v[0].IsEmpty() ) {sFilter = "LastName = '" +v[0]+ "'" ; }
   else if    ( !v[0].IsEmpty() && v[1].IsEmpty() && v[2].IsEmpty()) {sFilter = "LastName = '" +v[0]+ "'" ; }
   else if    ( !v[0].IsEmpty() && !v[1].IsEmpty() && v[2].IsEmpty()) {sFilter = ("LastName = '" +v[0]+ "'") ?????????????????  ("FirstName = '" +v[1]+ "'" ) ; }
   else if(  v[0].IsEmpty() && !v[1].IsEmpty() && v[2].IsEmpty()) {sFilter   = "FirstName = '" +v[1]+ "'" ; }//{t->Filter   = "LastName = '"+v[0]+"'" ???? "FirstName = '"+v[1]+"'"; }
   else if(  v[0].IsEmpty() && v[1].IsEmpty() && !v[2].IsEmpty()) {sFilter   = "Birthday = '" +v[2]+ "'" ; }//{...}
   t->Filter   = sFilter;
   if(t->FindFirst()){
      Action_Findnext->Enabled = true;
      Action_Findprior->Enabled = true;
   } 
}
wie kann ich der Filter nun so verwenden, dass in meiner Tabelle nach Vorname und Nachname sucht?

ist es überhaupt möglich nach zwei Feldern in der Datenbank zu filtern?

Danke

nachti1505 4. Jun 2014 08:35

AW: DataSet.Filter mit meherere Bediengungen
 
http://www.delphipraxis.net/33631-zw...e-filtern.html


Mit AND arbeiten!

himitsu 4. Jun 2014 08:49

AW: DataSet.Filter mit meherere Bediengungen
 
Ist wie das WHERE, also mit AND, OR, Klammern, Vergleichoperatoren wie <> und =, IN usw.

Es kommt aber auch etwas auf die Datenbank-Komponenten drauf an, ob und welche zusätzlichen Features diese hier bereitstellen.
Und Manchmal gibt es dort noch ein weiteres Filter-Property, wie z.B. FilterSQL im PgDAC, welches direkt ins WHERE des Query eingebaut und dann serverseitig ausgewertet wird.

mohSha 4. Jun 2014 09:00

AW: DataSet.Filter mit meherere Bediengungen
 
habe auch mit AND (in cppB & ) probiert.

es klappt nicht -->(EVariantTypeCastError):(

Jumpy 4. Jun 2014 09:14

AW: DataSet.Filter mit meherere Bediengungen
 
Du musst das "and" in den FilterString einbauen.

Wäre nicht die folgende vorgehensweise einfacher (ich versuch mal die C++ Syntax zu übernehmen, hab da aber keien Ahnung von):

Code:
sFilter = "";
if (!v[0].IsEmpty() ) {sFilter = "LastName = '" +v[0]+ "'" ; }
if (!v[1].IsEmpty() )
  {
  if (!sFilter="") {sFilter=sFilter + " AND ";}
  sFilter = sFilter + "FirstName = '" +v[1]+ "'";
  }
if (!v[2].IsEmpty() )
  {
  if (!sFilter="") {sFilter=sFilter + " AND ";}
  sFilter = sFilter + "BirthDate = '" +v[2]+ "'";
  }
Wobei man da mit dem Datumsvergleich aufpassen muss, ob das so geht.

Sir Rufo 4. Jun 2014 09:48

AW: DataSet.Filter mit meherere Bediengungen
 
Ein Dataset hat auch noch ein Event Delphi-Referenz durchsuchenTDataSet.OnFilterRecord den man dafür wunderbar nehmen kann und gerade bei umfangreichen Filtern die erste Wahl sein sollte (wenn man nicht vorzeitig graue Haare haben möchte)

nachti1505 4. Jun 2014 10:03

AW: DataSet.Filter mit meherere Bediengungen
 
Zitat:

Zitat von mohSha (Beitrag 1261304)
habe auch mit AND (in cppB & ) probiert.

es klappt nicht -->(EVariantTypeCastError):(


Das hat doch nichts mit cppB zu tun! Du nutzt hier ein SQL-Derivat --> also bitte wirklich
Delphi-Quellcode:
AND
nutzen und nicht
Delphi-Quellcode:
&&

mohSha 4. Jun 2014 10:32

AW: DataSet.Filter mit meherere Bediengungen
 
Vielen Dank Jumpy , das war die Lösung.


Zitat:

Zitat von nachti1505 (Beitrag 1261324)
Zitat:

Zitat von mohSha (Beitrag 1261304)
habe auch mit AND (in cppB & ) probiert.

es klappt nicht -->(EVariantTypeCastError):(


Das hat doch nichts mit cppB zu tun! Du nutzt hier ein SQL-Derivat --> also bitte wirklich
Delphi-Quellcode:
AND
nutzen und nicht
Delphi-Quellcode:
&&

Stimmt.
Es geht hier um SQL Derivat (AND) und nicht CPPB &. :oops::oops::oops::oops:
Danke für den Hinweis.

Dejan Vu 4. Jun 2014 10:54

AW: DataSet.Filter mit meherere Bediengungen
 
Zitat:

Zitat von Sir Rufo (Beitrag 1261322)
Ein Dataset hat auch noch ein Event Delphi-Referenz durchsuchenTDataSet.OnFilterRecord ...

War wohl zu leise.

Warte.... (lufthol)

Delphi-Referenz durchsuchenTDataSet.OnFilterRecord


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