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:
wie kann ich der Filter nun so verwenden, dass in meiner Tabelle nach Vorname und Nachname sucht?
...
{ 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; } } ist es überhaupt möglich nach zwei Feldern in der Datenbank zu filtern? Danke |
AW: DataSet.Filter mit meherere Bediengungen
|
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. |
AW: DataSet.Filter mit meherere Bediengungen
habe auch mit AND (in cppB & ) probiert.
es klappt nicht -->(EVariantTypeCastError):( |
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:
Wobei man da mit dem Datumsvergleich aufpassen muss, ob das so geht.
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]+ "'"; } |
AW: DataSet.Filter mit meherere Bediengungen
Ein Dataset hat auch noch ein Event TDataSet.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)
|
AW: DataSet.Filter mit meherere Bediengungen
Zitat:
Das hat doch nichts mit cppB zu tun! Du nutzt hier ein SQL-Derivat --> also bitte wirklich
Delphi-Quellcode:
nutzen und nicht
AND
Delphi-Quellcode:
&&
|
AW: DataSet.Filter mit meherere Bediengungen
Vielen Dank Jumpy , das war die Lösung.
Zitat:
Es geht hier um SQL Derivat (AND) und nicht CPPB &. :oops::oops::oops::oops: Danke für den Hinweis. |
AW: DataSet.Filter mit meherere Bediengungen
Zitat:
Warte.... (lufthol) TDataSet.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