AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken DataSet.Filter mit mehreren Bedingungen
Thema durchsuchen
Ansicht
Themen-Optionen

DataSet.Filter mit mehreren Bedingungen

Ein Thema von mohSha · begonnen am 4. Jun 2014 · letzter Beitrag vom 4. Jun 2014
Antwort Antwort
mohSha

Registriert seit: 4. Jun 2014
4 Beiträge
 
#1

DataSet.Filter mit mehreren Bedingungen

  Alt 4. Jun 2014, 08:29
Datenbank: PARADOX • Version: 4 • Zugriff über: BDE
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

Geändert von TBx ( 4. Jun 2014 um 10:44 Uhr) Grund: Titel korrigiert
  Mit Zitat antworten Zitat
Benutzerbild von nachti1505
nachti1505

Registriert seit: 7. Apr 2007
188 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: DataSet.Filter mit meherere Bediengungen

  Alt 4. Jun 2014, 08:35
http://www.delphipraxis.net/33631-zw...e-filtern.html


Mit AND arbeiten!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#3

AW: DataSet.Filter mit meherere Bediengungen

  Alt 4. Jun 2014, 08:49
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 4. Jun 2014 um 08:52 Uhr)
  Mit Zitat antworten Zitat
mohSha

Registriert seit: 4. Jun 2014
4 Beiträge
 
#4

AW: DataSet.Filter mit meherere Bediengungen

  Alt 4. Jun 2014, 09:00
habe auch mit AND (in cppB & ) probiert.

es klappt nicht -->(EVariantTypeCastError)
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.733 Beiträge
 
Delphi 6 Enterprise
 
#5

AW: DataSet.Filter mit meherere Bediengungen

  Alt 4. Jun 2014, 09:14
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.
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: DataSet.Filter mit meherere Bediengungen

  Alt 4. Jun 2014, 09:48
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)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von nachti1505
nachti1505

Registriert seit: 7. Apr 2007
188 Beiträge
 
Delphi 7 Enterprise
 
#7

AW: DataSet.Filter mit meherere Bediengungen

  Alt 4. Jun 2014, 10:03
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 AND nutzen und nicht &&
  Mit Zitat antworten Zitat
mohSha

Registriert seit: 4. Jun 2014
4 Beiträge
 
#8

AW: DataSet.Filter mit meherere Bediengungen

  Alt 4. Jun 2014, 10:32
Vielen Dank Jumpy , das war die Lösung.


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 AND nutzen und nicht &&
Stimmt.
Es geht hier um SQL Derivat (AND) und nicht CPPB &.
Danke für den Hinweis.

Geändert von mohSha ( 4. Jun 2014 um 11:24 Uhr)
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#9

AW: DataSet.Filter mit meherere Bediengungen

  Alt 4. Jun 2014, 10:54
Ein Dataset hat auch noch ein Event Delphi-Referenz durchsuchenTDataSet.OnFilterRecord ...
War wohl zu leise.

Warte.... (lufthol)

Delphi-Referenz durchsuchenTDataSet.OnFilterRecord
  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 15:27 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