AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi TIBDataSet and Filter
Thema durchsuchen
Ansicht
Themen-Optionen

TIBDataSet and Filter

Ein Thema von Ralf Stehle · begonnen am 3. Apr 2005 · letzter Beitrag vom 9. Mai 2005
Antwort Antwort
Seite 1 von 2  1 2      
Ralf Stehle

Registriert seit: 8. Aug 2003
124 Beiträge
 
Delphi 7 Professional
 
#1

TIBDataSet and Filter

  Alt 3. Apr 2005, 21:17
Datenbank: Firebird • Version: 1.5.2 • Zugriff über: Mit Firebird-Server
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
Ralf Stehle
ralfstehle@yahoo.de
  Mit Zitat antworten Zitat
Benutzerbild von MagicAndre1981
MagicAndre1981

Registriert seit: 4. Jun 2004
Ort: Nordhausen
2.214 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: TIBDataSet and Filter

  Alt 3. Apr 2005, 21:20
Im SELECT-Statement eine Where Bedingung einbauen.
André
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3

Re: TIBDataSet and Filter

  Alt 3. Apr 2005, 21:31
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 :

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.
Gruß
Hansa
  Mit Zitat antworten Zitat
Ralf Stehle

Registriert seit: 8. Aug 2003
124 Beiträge
 
Delphi 7 Professional
 
#4

Re: TIBDataSet and Filter

  Alt 3. Apr 2005, 21:43
Toller Tipp, funktioniert bei mir aber aus undefinierbarem Grund nicht:

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

IBDataset.SelectSQL := 'SELECT * FROM Udat WHERE Patient = ''' + Edit2.text + '''';
Ralf Stehle
ralfstehle@yahoo.de
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#5

Re: TIBDataSet and Filter

  Alt 3. Apr 2005, 23:40
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.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#6

Re: TIBDataSet and Filter

  Alt 3. Apr 2005, 23:48
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
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
Ralf Stehle

Registriert seit: 8. Aug 2003
124 Beiträge
 
Delphi 7 Professional
 
#7

Re: TIBDataSet and Filter

  Alt 4. Apr 2005, 11:29
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


IBDataset.SelectSQL.Text := 'SELECT * FROM Udat WHERE Patient = ''' + Edit2.text + ''''; So funktioniert es, aber nicht mit Like oder Wildcards
Ralf Stehle
ralfstehle@yahoo.de
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#8

Re: TIBDataSet and Filter

  Alt 4. Apr 2005, 11:35
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.
Gruß
Hansa
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.381 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: TIBDataSet and Filter

  Alt 4. Apr 2005, 11:48
Hallo Ralf,

versuch mal folgende SQL:


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
  Mit Zitat antworten Zitat
Ralf Stehle

Registriert seit: 8. Aug 2003
124 Beiträge
 
Delphi 7 Professional
 
#10

Re: TIBDataSet and Filter

  Alt 4. Apr 2005, 14:23
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:

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):
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
Ralf Stehle
ralfstehle@yahoo.de
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 19:40 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