Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Firedac Problem beim Zeichen & (https://www.delphipraxis.net/214738-firedac-problem-beim-zeichen.html)

Kostas 1. Mär 2024 11:21

Firedac Problem beim Zeichen &
 
Hallo Zusammen,

Ich habe eine TFDQuery mit dem Inhalt:
Code:
select first 1000 k.*, k.BARZAHLER || k.BARZAHLER as BARZAHLER1
from KUNDEN k
where (k.AUSBLENDEN='N')
&dwhere
Wenn nach etwas gesucht wird, wird ein Macro erzeugt:
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:

Setzen Sie für "!", "&", "{", "}" ResourceOptions.MacroCreate, MacroExpand und EscapeExpand auf False.
https://docwiki.embarcadero.com/RADS...stext_(FireDAC)

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?

Uwe Raabe 1. Mär 2024 12:33

AW: Firedac Problem beim Zeichen &
 
Hast du schon versucht, das & zu verdoppeln bevor du es dem Makrowert zuweist?

himitsu 1. Mär 2024 12:52

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.
http://docwiki.embarcadero.com/RADSt...text_(FireDAC)

Bei Makros innerhalb von Makros/Parameter eventuell doppelt/mehrfach Escapen, also
Delphi-Quellcode:
\\&

Kostas 1. Mär 2024 14:19

AW: Firedac Problem beim Zeichen &
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1534034)
Hast du schon versucht, das & zu verdoppeln bevor du es dem Makrowert zuweist?

Sorry, hätte ich erwähnen sollen. Ja habe ich probiert. Auch mit C/&T, C\&T geht alles nicht.

Kostas 1. Mär 2024 14:20

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'' ))'

himitsu 1. Mär 2024 14:38

AW: Firedac Problem beim Zeichen &
 
Backslash vs. Slash :angle2:

\ nicht /

Kostas 1. Mär 2024 15:01

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'' ))'

himitsu 1. Mär 2024 15:18

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.

Uwe Raabe 1. Mär 2024 15:32

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

Kostas 1. Mär 2024 15:38

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 03:06 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