Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi TFDQuery Param "like" (https://www.delphipraxis.net/196745-tfdquery-param-like.html)

Emwykey 15. Jun 2018 11:44

Datenbank: Firebird • Version: 2.5 • Zugriff über: FireDAC

TFDQuery Param "like"
 
Hallo Zusammen,

ich habe folgende SQL Abfrage:
Code:
Select
*
From Tabelle
where Feld like '%test%'
den Suchwert soll über die
Code:
TFDQuery.ParamByName()
Funktion gesetzt werden.

Da die %% am String direkt mitgegeben werden müssen habe ich ( noch ? ) keine Möglichkeit gefunden diese außerhalb des Parameters anzugeben.
Mein SQL sieht also so aus:
Code:
Select
*
From Tabelle
where Feld like :Parameter
wenn nun nach 'test' gesucht werden soll hängt das System automatisch die % an : '%test%'.

Das Funktioniert auch sehr gut, bis zu dem Moment in dem das entsprechende Feld auf zum beispiel 4 Stellen begrenzt ist, der Suchwert mit den % allerdings länger. Dann erhalte ich den Fehler, dass der Parameter länger als erlaubt ist.

Selbst wenn ich sage, dass wenn der Suchwert genau der Feldlänge entspricht nun nach = anstelle von like gesucht wird hab ich ein Problem sofern der Suchwert nur 3 Stellen lang ist. es sollen ja alle Datensätze gefunden werden die den Suchwert enthalten und in dem Fall müsste ich das in der aktuellen Situation auf die Daten begrenzen die entweder damit beginnen oder enden.

Gibt es eine Möglichkeit dem Query zu sagen "Ignoriere die %% beim Prüfen der Feldlänge"?

Oder muss ich einfach gleich eine andere Funktion verwenden?

Vielen lieben Dank schonmal :)

Olli73 15. Jun 2018 11:57

AW: TFDQuery Param "like"
 
Versuch mal
Code:
... where Feld like '%'||:Parameter||'%'
und dann den Parameterwert ohne "%" angeben.

Emwykey 15. Jun 2018 12:13

AW: TFDQuery Param "like"
 
natürlich!

da hätte ich auch mal selber drauf kommen können :D geht, danke

sks3se 20. Jun 2018 10:03

AW: TFDQuery Param "like"
 
Oder auch so :

FDQuery1.SQL.Text := 'select * from tab where code = :Code';
FDQuery1.ParamByName('code').AsString := '123';
FDQuery1.Open;

DeddyH 20. Jun 2018 10:50

AW: TFDQuery Param "like"
 
= ist ja nicht dasselbe wie LIKE.

rokli 20. Jun 2018 11:46

AW: TFDQuery Param "like"
 
aber jetzt so:

Delphi-Quellcode:
FDQuery1.SQL.Text := 'select * from tab where code LIKE :Code';
FDQuery1.ParamByName('code').AsString := '%123%';
FDQuery1.Open;
bzw. die Prozente nach Bedarf setzten. Du kannst Dir auch eine Variable bauen, in die Du den abzufragenden Wert nach belieben eingibst und die Variable dann an den Parameter übergibst.

Grüße

himitsu 20. Jun 2018 12:20

AW: TFDQuery Param "like"
 
Hast nicht ganz gelesen?

Im Parameter sind keine Prozent drin,
darum müssen die eben ins SQL, um den Parameter. :roll:

Jumpy 20. Jun 2018 12:21

AW: TFDQuery Param "like"
 
Ich antworte dazu (#6) einfach mal mit einem Zitat aus dem aller ersten Post:

Zitat:

Zitat von Emwykey (Beitrag 1404908)
Das Funktioniert auch sehr gut, bis zu dem Moment in dem das entsprechende Feld auf zum beispiel 4 Stellen begrenzt ist, der Suchwert mit den % allerdings länger. Dann erhalte ich den Fehler, dass der Parameter länger als erlaubt ist.

Selbst wenn ich sage, dass wenn der Suchwert genau der Feldlänge entspricht nun nach = anstelle von like gesucht wird hab ich ein Problem sofern der Suchwert nur 3 Stellen lang ist. es sollen ja alle Datensätze gefunden werden die den Suchwert enthalten und in dem Fall müsste ich das in der aktuellen Situation auf die Daten begrenzen die entweder damit beginnen oder enden.


erich.wanker 6. Aug 2020 10:23

AW: TFDQuery Param "like"
 
SUPER.. Vielen Dank

Funktioniert jetzt .. und ist von überschüssigen Klammern und Co befreit :-)

Danke


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