![]() |
Firedac Problem beim Zeichen &
Hallo Zusammen,
Ich habe eine TFDQuery mit dem Inhalt:
Code:
Wenn nach etwas gesucht wird, wird ein Macro erzeugt:
select first 1000 k.*, k.BARZAHLER || k.BARZAHLER as BARZAHLER1
from KUNDEN k where (k.AUSBLENDEN='N') &dwhere
Code:
dwhere := ' and ((k.FIRMA containing '''+dwhere+''') or ( k.ZUSATZ containing '''+dwhere+''' ) or ( k.ZUSATZ2 containing '''+dwhere+''' ))';
qrKunden.MacroByName('dwhere').AsRaw := dwhere; Jetzt gebe ich als Suchbegriff: C&T um die Firma C&T GmbH zu finden. Ich bekomme alles mögliche jedoch nicht die Firma. Suche ich jedoch nach C& wird C&T GmbH gefunden. In dem unten stehenden Artikel ist beschrieben wie man mit solchen Zeichen umgehen soll. Zitat:
![]() Wenn ich das mache, kann ich kein Macro verwenden. Auch wenn ich das SQL direkt als Where aufbaue, funktioniert es ebenfalls nicht wenn ich FireDac verwende. IBObjects hat damit keine Probleme. IBExpert hat damit auch kein Problem. Hat jemand eine Idee? |
AW: Firedac Problem beim Zeichen &
Hast du schon versucht, das & zu verdoppeln bevor du es dem Makrowert zuweist?
|
AW: Firedac Problem beim Zeichen &
Ja, entgegen anderen Frameworks, ersetzt FireDAC Makros auch innerhalb von Strings.
Escape von
Delphi-Quellcode:
und
&
Delphi-Quellcode:
via
!
Delphi-Quellcode:
, so wie es in nahezu jeder SQL-Language üblich ist.
\
![]() Bei Makros innerhalb von Makros/Parameter eventuell doppelt/mehrfach Escapen, also
Delphi-Quellcode:
\\&
|
AW: Firedac Problem beim Zeichen &
Zitat:
|
AW: Firedac Problem beim Zeichen &
auch // geht nicht.
ich habe vor dem zuweisen des Macros das & durch //& ersetzt, geht auch nicht.
Code:
' and ((k.FIRMA containing ''C//&T'') or ( k.ZUSATZ containing ''C//&T'' ) or ( k.ZUSATZ2 containing ''C//&T'' ))'
|
AW: Firedac Problem beim Zeichen &
Backslash vs. Slash :angle2:
\ nicht / |
AW: Firedac Problem beim Zeichen &
leider auch nicht. Das wir dals Macro übergeben:
Code:
' and ((k.FIRMA containing ''C\\&T'') or ( k.ZUSATZ containing ''C\\&T'' ) or ( k.ZUSATZ2 containing ''C\\&T'' ))'
|
AW: Firedac Problem beim Zeichen &
Auch mit nur Einem \ ?
\\ entspricht dem Zeichen \ und nachfolgend dann das &, welches nicht escaped ist. Die Sache mit den \\ betrifft Fälle, wo es geparst, anschließend an was Anderes übergeben und dort erneut geparst wird. Dann würde \\& im esten Durchlauf zu \& Oder bei 3 Stufen eben \\\\& zu \\& zu \& Wir haben hier so einen Spaß, auch noch mit mehreren Syntax, wo "Code" zwischen mehreren Systemen mehrmals durchgereicht werden, hin und her Delphi\Pascal, wo '' statt ' und dann eben auch noch SQL vom Postgres, wo es \' wäre, aber auch '' ginge sowie Python mit seinem \' Im Delphi-Code ein Pythonscript, welches dort in String im Quellcode mit der Pascal-Syntax escaped werden muß, aber auch gleichzeitig das richtige Escape für Strings in der Python-Syntax. Im Python wird dann durch zwei Ebenen ein SQL-WHERE gebastelt, welches wiederdum die SQL-Syntax für VARCHAR-Strings einfügen muß, damit es dann zurück durch Delphi in der Datenbank landen kann. |
AW: Firedac Problem beim Zeichen &
Wenn das mit dem Makro nicht geht, dann probier es doch mal mit einen Parameter:
SQL-Code:
select first 1000 k.*, k.BARZAHLER || k.BARZAHLER as BARZAHLER1
from KUNDEN k where (k.AUSBLENDEN='N') and (:dwhere is NULL or (k.FIRMA containing :dwhere) or ( k.ZUSATZ containing :dwhere ) or ( k.ZUSATZ2 containing :dwhere ))
Delphi-Quellcode:
qrKunden.ParamByName('dwhere').AsString := 'C&T';
|
AW: Firedac Problem beim Zeichen &
verdammt das hört sich echt Schlimm an.
ich habe es probiert mit & \& \\& \\\& \\\\& nix geht. Die TFDQuery ist alle default. Nur das SQL und die Connection hinzugefügt. Muss evl. doch etwas eingestellt werden in de ResourceOptions oder sonst noch irgend ein Mist. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:12 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