AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Firedac Problem beim Zeichen &

Ein Thema von Kostas · begonnen am 1. Mär 2024 · letzter Beitrag vom 1. Mär 2024
Antwort Antwort
Seite 1 von 2  1 2      
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.058 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Firedac Problem beim Zeichen &

  Alt 1. Mär 2024, 11:21
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?

Geändert von Kostas ( 1. Mär 2024 um 11:31 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.015 Beiträge
 
Delphi 12 Athens
 
#2

AW: Firedac Problem beim Zeichen &

  Alt 1. Mär 2024, 12:33
Hast du schon versucht, das & zu verdoppeln bevor du es dem Makrowert zuweist?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#3

AW: Firedac Problem beim Zeichen &

  Alt 1. Mär 2024, 12:52
Ja, entgegen anderen Frameworks, ersetzt FireDAC Makros auch innerhalb von Strings.

Escape von & und ! via \ , 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 \\&
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 1. Mär 2024 um 12:55 Uhr)
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.058 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Firedac Problem beim Zeichen &

  Alt 1. Mär 2024, 14:19
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.
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.058 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Firedac Problem beim Zeichen &

  Alt 1. Mär 2024, 14:20
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'' ))'
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#6

AW: Firedac Problem beim Zeichen &

  Alt 1. Mär 2024, 14:38
Backslash vs. Slash

\ nicht /
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.058 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Firedac Problem beim Zeichen &

  Alt 1. Mär 2024, 15:01
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'' ))'
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.152 Beiträge
 
Delphi 12 Athens
 
#8

AW: Firedac Problem beim Zeichen &

  Alt 1. Mär 2024, 15:18
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 1. Mär 2024 um 15:28 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.015 Beiträge
 
Delphi 12 Athens
 
#9

AW: Firedac Problem beim Zeichen &

  Alt 1. Mär 2024, 15:32
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 ))
qrKunden.ParamByName('dwhere').AsString := 'C&T';
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.058 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: Firedac Problem beim Zeichen &

  Alt 1. Mär 2024, 15:38
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.
  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 07:31 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