Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi TIBDataSet and Filter (https://www.delphipraxis.net/43421-tibdataset-filter.html)

Ralf Stehle 3. Apr 2005 20:17

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

MagicAndre1981 3. Apr 2005 20:20

Re: TIBDataSet and Filter
 
Im SELECT-Statement eine Where Bedingung einbauen.

Hansa 3. Apr 2005 20:31

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:
Dataset.SelectSQL := 'SELECT * FROM ADRESSE WHERE UPPER (NAME) LIKE UPPER (''%' + edSuch.Text + '%'') ORDER BY NR';
erhälst du gleich folgendes (ist für die Frage eigentlich zu viel) :

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.

Ralf Stehle 3. Apr 2005 20:43

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 + '''';

Hansa 3. Apr 2005 22:40

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.

kiar 3. Apr 2005 22:48

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

Ralf Stehle 4. Apr 2005 10:29

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:
IBDataset.SelectSQL.Text := 'SELECT * FROM Udat WHERE Patient = ''' + Edit2.text + '''';
So funktioniert es, aber nicht mit Like oder Wildcards

Hansa 4. Apr 2005 10:35

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.

Lemmy 4. Apr 2005 10:48

Re: TIBDataSet and Filter
 
Hallo Ralf,

versuch mal folgende SQL:


SQL-Code:
IBDataset.SelectSQL.Text := 'SELECT * FROM Udat WHERE UPPER(Patient) like UPPER('#39 + Edit2.text + #39'%)';
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.

Hinweis: der Teil #39 produziert ein '. Ich finde diese Darstellung besser zu lesen und weniger fehleranfällig.

btw: Was funktioniert denn genau nicht?

Lemmy

Ralf Stehle 4. Apr 2005 13:23

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:
IBDataSet.SelectSQL.Text := 'SELECT * FROM Udat WHERE UPPER(Patient) like UPPER('#39 + Edit2.text + '%' + #39')';
Hansa hat noch vorgeschlagen, in IBExpert eine Like-Abfrage zu versuchen

Mit Like habe ich zuerst keinen Datensatz zurückbekommen:
Delphi-Quellcode:
Select * from UDAT Where Patient like
 'Pollmanns'
Mit = habe ich einen Datensatz zurückbekommen:
Delphi-Quellcode:
Select * from UDAT Where Patient =
 'Pollmanns'
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):
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 12:12 Uhr.
Seite 1 von 2  1 2      

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