![]() |
Datenbank: Firebird • Version: 1.5.2 • Zugriff über: Mit Firebird-Server
TIBDataSet and Filter
Ich möchte aus Daten Personennamen filtern,
leider scheint die Filterfunktion in TIBDataSet nicht vorhanden zu sein (die Methode .filtered aber ist vorhanden ?!) Lemmy hat früher mehrmals darauf aufmerksam gemacht, dass TIBTable nicht mehr benutzt werden sollen, da diese veraltet und nur aus Kompatibilitätsgründen vorhanden seien. Die Alternative, einfach bei der Abfrage die Daten einzugrenzen, habe ich versucht. Mein Problem ist aber, dass ich am Ende eine Wildcards-(*) setzen möchte. In der Praxis soll ein Name aus einer Tabelle gesucht werden und bei Eingabe von Mei alle Meier, Meierhöfer usw. angezeigt werden |
Re: TIBDataSet and Filter
Im SELECT-Statement eine Where Bedingung einbauen.
|
Re: TIBDataSet and Filter
Deine Alternative ist aber der einzig vernünftige Ansatz. Die Wildcards gehen allerdings etwas anders. Das Wort "where" alleine wird wohl kaum genügen.
Mit dem hier :
SQL-Code:
erhälst du gleich folgendes (ist für die Frage eigentlich zu viel) :
Dataset.SelectSQL := 'SELECT * FROM ADRESSE WHERE UPPER (NAME) LIKE UPPER (''%' + edSuch.Text + '%'') ORDER BY NR';
1. Alle Namen, die den ins Edit eingegebenen Text enthalten. Nicht nur am Anfang !! Also : bei Eingabe 'eI' : ei, meier, fischreier, flomei ... 2. Groß und Kleinschreibung ist egal. 3. die gefundenen Namen erscheinen in der Reihenfolge ihrer Nr. Die Leute haben ihre Nummern schon ungefähr im Kopf. Ich bestücke so z.B. einige Labels und kann dann mit <Pfeil rauf> usw. blättern, indem ich dann eben Next oder Prior usw. damit aufrufe. Quasi als Ersatz für den komischen DBnavigator. |
Re: TIBDataSet and Filter
Toller Tipp, funktioniert bei mir aber aus undefinierbarem Grund nicht:
Delphi-Quellcode:
Dataset.SelectSQL := 'SELECT * FROM ADRESSE WHERE UPPER (NAME) LIKE UPPER (''%' + edSuch.Text + '%'') ORDER BY NR';
Das einzige was momentan funktioniert ist eine Abfrage mit = statt like
Delphi-Quellcode:
IBDataset.SelectSQL := 'SELECT * FROM Udat WHERE Patient = ''' + Edit2.text + '''';
|
Re: TIBDataSet and Filter
Setze mal hinter das SelectSQL einen . Dann wirst du den Fehler sehen. Und mit den ' muß man auch aufpassen. Desweiteren würde ich mal die Fehlermeldung zeigen. Sofern dann noch eine kommt, was ich nicht glaube.
|
Re: TIBDataSet and Filter
hallo ralf,
ich könnte mir vorstellen, das du mit den IB- komponenten auf die firebird zugreifst. das problem ist nun folgendes, das die ibx komponenten auf absehbarer zeit nicht mehr zum zugriff auf firebird genutzt werden können, da diese auf den Zugriff auf Interbase ausgerichtet sind. an deiner stelle würde ich den zugriff auf Firebird mit anderen komponenten machen. alternativ wären die zeos, uib und fiplus. raik |
Re: TIBDataSet and Filter
Danke für Eure Hilfe.
In meinem Beispielcode habe ich vergessen, .Text oder .Add einzugeben. Das habe ich aber in meinem Programm richtig geschrieben, sonst hätte ich mein Programm auf Grund der Fehlermeldungen auch nicht compilieren können
Delphi-Quellcode:
So funktioniert es, aber nicht mit Like oder Wildcards
IBDataset.SelectSQL.Text := 'SELECT * FROM Udat WHERE Patient = ''' + Edit2.text + '''';
|
Re: TIBDataSet and Filter
Ich tipppe auf die '''. Zähle die mal genau ab. Ich würde sowieso zuerst alles in IBexpert testen mit festen Werten. Da wirst du sehen, daß das LIKE und die % funktionieren.
|
Re: TIBDataSet and Filter
Hallo Ralf,
versuch mal folgende SQL:
SQL-Code:
Zu den IBX und Firebird: Ich habe bisher keine Probleme mit den IBX und Firebird. Wahr ist es, dass sich das in Zukunft (bei Version 2 oder 3) durchaus ändern kann. Neue Projekte, die lange laufen sollen, würde ich nicht mehr unbedingt mit IBX beginnen.
IBDataset.SelectSQL.Text := 'SELECT * FROM Udat WHERE UPPER(Patient) like UPPER('#39 + Edit2.text + #39'%)';
Hinweis: der Teil #39 produziert ein '. Ich finde diese Darstellung besser zu lesen und weniger fehleranfällig. btw: Was funktioniert denn genau nicht? Lemmy |
Re: TIBDataSet and Filter
Toll, dass Ihr sogar mitten am Montag Zeit hattet, mir eine Antwort zu posten.
Der Tipp von Lemmy hat nach einer kleinen Korrektur jetzt tatsächlich funktioniert:
Delphi-Quellcode:
Hansa hat noch vorgeschlagen, in IBExpert eine Like-Abfrage zu versuchen
IBDataSet.SelectSQL.Text := 'SELECT * FROM Udat WHERE UPPER(Patient) like UPPER('#39 + Edit2.text + '%' + #39')';
Mit Like habe ich zuerst keinen Datensatz zurückbekommen:
Delphi-Quellcode:
Mit = habe ich einen Datensatz zurückbekommen:
Select * from UDAT Where Patient like
'Pollmanns'
Delphi-Quellcode:
Und zuletzt sieht meine Select-Anweisung so aus und alles funktioniert bestens (statt * mit %), so funktioniert es auch direkt in IBExpert (natürlich mit einem Stringnamen statt Edit2.text):
Select * from UDAT Where Patient =
'Pollmanns'
Delphi-Quellcode:
IBDataSet.SelectSQL.Text := 'SELECT * FROM Udat WHERE Patient like ''' + Edit2.text + '%''';
Aber wieso IBDataSet.Filter:= nicht möglich ist, bleibt mir schleierhaft. Haben die Entwickler diese Methode einfach weggelassen? Warum gibt es dann die Anweisung IBDataSet.Filtered .... Aber ist ja auch egal, mit der Select-Anweisung ist ja alles wieder im Lot Ich glaube, das Thema kann beendet werden, ich möchte Euch auch nicht weiter von wichtigerer Arbeit abhalten Nochmals herzlichen Dank |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:50 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