Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   TAdsQuery - Filter und Wilcard (https://www.delphipraxis.net/160340-tadsquery-filter-und-wilcard.html)

bwolf 9. Mai 2011 11:09

Datenbank: ADS • Version: 10.10 • Zugriff über: TDataSet Descendant

TAdsQuery - Filter und Wilcard
 
Hi,

ich habe eine TAdsQuery und will einen Filter mit einer Wildcard am Anfang und am Ende des Suchbegriffes setzen.

Folgendes funktioniert:
qTest.Filter := 'Nummer = ' + QuotedStr(edTest.Text + '*');

Wenn ich jetzt aber noch eine Wildcard an den Anfang des Wortes setze, kriege ich immer ein leeres Ergebnis:
qTest.Filter := 'Nummer = ' + QuotedStr('*' + edTest.Text + '*');

Ich habe mir mal die Filter-Optionen angeshen, konnte aber nix finden.
Hat jemand eine Idee?
Danke!

DeddyH 9. Mai 2011 11:12

AW: TAdsQuery - Filter und Wilcard
 
Nicht, dass ich mich mit ADS auskenne, aber bist Du sicher, dass der Stern richtig ist? Klappt es, wenn Du stattdessen das Prozentzeichen nimmst?

bwolf 9. Mai 2011 11:14

AW: TAdsQuery - Filter und Wilcard
 
Hi Deddy,

danke für deine Antwort.
Ja der Stern ist auf jeden Fall richtig. Der erste Filter (mit der Wildcard am Ende) funktioniert ja auch..

Bummi 9. Mai 2011 11:45

AW: TAdsQuery - Filter und Wilcard
 
müsste da nicht like verwendet werden?

bwolf 9. Mai 2011 11:47

AW: TAdsQuery - Filter und Wilcard
 
Like habe ich bereit ausprobiert, spuckt mir nur eine Fehlermeldung aus.
Laut Delphi 2009-Doku ist like anscheinend für Memo-Felder gedacht...

Bummi 9. Mai 2011 11:52

AW: TAdsQuery - Filter und Wilcard
 
Ich verwende zwar ADO und bisweilen Clientdatasets, bei mir funktioniert aber sowohl
Name like '*üll*'
als auch
Name like '%üll%'

für normale Varchar Felder ...

Bernhard Geyer 9. Mai 2011 12:16

AW: TAdsQuery - Filter und Wilcard
 
Im SQL sind eigentlich die Zeichen % und _ Wildcards. Und Wildcardsuche sollte eigentlich nur mit Like-Funktionieren.

Was für eine Fehlermeldung kommt eigentlich?

bwolf 9. Mai 2011 12:21

AW: TAdsQuery - Filter und Wilcard
 
Hallo nochmal,

Also bei der Verwendung von Like bekomme ich folgenden Error:

Zitat:

---------------------------
Benachrichtigung über Debugger-Exception
---------------------------
Im Projekt test.exe ist eine Exception der Klasse EADSDatabaseError mit der Meldung 'qTest: Error 3106: Unsupported operator found in a record filter expression.' aufgetreten.
---------------------------
Anhalten Fortsetzen Hilfe
---------------------------
Wenn ich über die AnyDAC Komponenten auf die DB Zugreife, funktioniert das mit dem Filter auch...

Perlsau 9. Mai 2011 12:33

AW: TAdsQuery - Filter und Wilcard
 
Zitat:

Zitat von bwolf (Beitrag 1099680)
Im Projekt test.exe ist eine Exception der Klasse EADSDatabaseError mit der Meldung 'qTest: Error 3106: Unsupported operator found in a record filter expression.' aufgetreten.

Setze den Filter doch einfach im SQL-Statement.

bwolf 9. Mai 2011 12:37

AW: TAdsQuery - Filter und Wilcard
 
Zitat:

Zitat von Perlsau (Beitrag 1099688)
Zitat:

Zitat von bwolf (Beitrag 1099680)
Im Projekt test.exe ist eine Exception der Klasse EADSDatabaseError mit der Meldung 'qTest: Error 3106: Unsupported operator found in a record filter expression.' aufgetreten.

Setze den Filter doch einfach im SQL-Statement.

Auf die Idee bin ich natürlich auch schon gekommen, allerdings müsste ich dann a.) einiges umbauen und b.)würde ich gerne wissen wieso das nicht funktioniert ;)

Mike_on_Tour 9. Mai 2011 12:38

AW: TAdsQuery - Filter und Wilcard
 
Hallo bwolf,

hier ein Auszug aus dem Quelltext von ADS:

* Note: The character '*' will be considered to be a wild
* card only if it is the last character in a string
* constant.

Der '*' funktioniert also nur am Ende.

Ich würde das entweder mit LIKE oder mit einem SQL-Skript versuchen.

Mike

Perlsau 9. Mai 2011 12:39

AW: TAdsQuery - Filter und Wilcard
 
Zitat:

Zitat von bwolf (Beitrag 1099689)
Zitat:

Zitat von Perlsau (Beitrag 1099688)
Zitat:

Zitat von bwolf (Beitrag 1099680)
Im Projekt test.exe ist eine Exception der Klasse EADSDatabaseError mit der Meldung 'qTest: Error 3106: Unsupported operator found in a record filter expression.' aufgetreten.

Setze den Filter doch einfach im SQL-Statement.

Auf die Idee bin ich natürlich auch schon gekommen, allerdings müsste ich dann a.) einiges umbauen und b.)würde ich gerne wissen wieso das nicht funktioniert ;)

Wenn es im SQL-Statement funktioniert und im Filter nicht, liegt das wohl daran, daß das Filter-Property deiner Komponente nicht alle SQL-Ausdrücke unterstützt.

Tyrolean 9. Mai 2011 13:10

AW: TAdsQuery - Filter und Wilcard
 
Zitat:

qTest.Filter := 'Nummer = ' + QuotedStr('*' + edTest.Text + '*');
qTest.Filter := QuotedSTr(edTest.Text) + ' $ nummer';
sollte funktionieren

bwolf 9. Mai 2011 13:16

AW: TAdsQuery - Filter und Wilcard
 
Hi Tyrolean,

das funktioniert tatsächlich, danke dir!
Kannst du mir noch erklären was das für eine Syntax ist? Hab ich bisher so nicht gesehen...:oops:

Tyrolean 9. Mai 2011 13:29

AW: TAdsQuery - Filter und Wilcard
 
Zitat:

Zitat von bwolf (Beitrag 1099707)
Hi Tyrolean,

das funktioniert tatsächlich, danke dir!
Kannst du mir noch erklären was das für eine Syntax ist? Hab ich bisher so nicht gesehen...:oops:

Das ist die Advantage Expression Engine-Syntax. Leider ist die nicht ident mit dem SQL. Es fehlt dafür genau die LIKE-Funktion. Wäre alles einfacher wenn auch beim Filter die normale SQL-Syntax funktionieren würde.

bwolf 9. Mai 2011 13:37

AW: TAdsQuery - Filter und Wilcard
 
Wieder was gelernt, thx :thumb:

joachimd 11. Mai 2011 09:01

AW: TAdsQuery - Filter und Wilcard
 
Zitat:

Zitat von Tyrolean (Beitrag 1099713)
Das ist die Advantage Expression Engine-Syntax.

genauer gesagt: die XBase-Syntax (Clipper, DBase, VO, Xbase++, Vfp usw). Auch wenn diese mit immer mehr Funktionen ausgebaut wird, bleibt die grundsätzliche Grammatik doch bestehen.

Tyrolean 11. Mai 2011 10:07

AW: TAdsQuery - Filter und Wilcard
 
Zitat:

Zitat von joachimd (Beitrag 1100120)
Zitat:

Zitat von Tyrolean (Beitrag 1099713)
Das ist die Advantage Expression Engine-Syntax.

genauer gesagt: die XBase-Syntax (Clipper, DBase, VO, Xbase++, Vfp usw). Auch wenn diese mit immer mehr Funktionen ausgebaut wird, bleibt die grundsätzliche Grammatik doch bestehen.

Da hast du natürlich recht. Ich meinte aber eher die wichtige Unterscheidung zwischen

Advantage SQL engine (LIKE möglich)
und
Advantage Expression Engine (LIKE nicht möglich)

Und in der Hilfe findet man damit auch schneller :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:17 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