Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Insert Values die "!" enthalten (https://www.delphipraxis.net/209832-insert-values-die-enthalten.html)

skoschke 28. Jan 2022 07:02

Datenbank: SQLite • Version: ? • Zugriff über: FDQuery

Insert Values die "!" enthalten
 
Hallo,

bei folgender SQL-Anweisung knallt es:

Delphi-Quellcode:
FDQuery.SQL.Text := 'INSERT INTO test (name,text) VALUES ("Fritz","Hallo!")';
FDQuery.ExecSQL;
Grund ist das Ausrufezeichen.

ich kann natürlich alle Ausrufezeichen entfernen, besser wäre aber, es irgendwie zu "codieren" damit es akzeptiert wird, nur wie könnte das gehen?

Ciao
Stefan

DeddyH 28. Jan 2022 07:10

AW: Insert Values die "!" enthalten
 
Benutze SQL-Parameter, wann immer das möglich ist (also eigentlich so gut wie immer).
Delphi-Quellcode:
FDQuery.SQL.Text := 'INSERT INTO test (name,text) VALUES (:name,:text)';
FDQuery.ParamByName('name').AsString := 'Fritz';
FDQuery.ParamByName('text').AsString := 'Hallo!';
FDQuery.ExecSQL;

Medium 28. Jan 2022 09:31

AW: Insert Values die "!" enthalten
 
Zusätzlich noch eine Kleinigkeit: In vielen DBMS ist "name" ein reserviertes Wort. Möchte man es selbst anders, z.B. als Spaltenname verwenden, möchten viele, dass man es escaped. Bei MySQL geht das zum Beispiel mit Back-Ticks: `name`
Kann je nach dem auch ohne gehen, aber sicherer ist es solche entweder zu meiden oder zu escapen.

haentschman 28. Jan 2022 09:43

AW: Insert Values die "!" enthalten
 
Zitat:

entweder zu meiden
+1 :thumb:

Uwe Raabe 28. Jan 2022 09:48

AW: Insert Values die "!" enthalten
 
Setzt mal in der FDQuery folgende Eigenschaften auf False: ResourceOptions.MacroCreate, MacroExpand.

Hintergrund: https://docwiki.embarcadero.com/RADS...tion_Variables

Zitat:

Substitution Variables
A substitution variable starts with the ‘!’ or ‘&’ symbol and is followed by the macro variable name. For example:

SELECT * FROM &TabName
The symbols have the following meaning:

‘!’--“string” substitution mode. The macro value will be substituted “as is”, directly into the command text without any transformation.
‘&’-–“SQL” substitution mode. The macro value will be substituted depending on the macro data type, using target DBMS syntax rules.
To use the macros, use the following code snippet:

FDQuery1.SQL.Text := 'SELECT * FROM &TabName';
FDQuery1.MacroByName('TabName').AsRaw := 'Orders';
FDQuery1.Open;
The macros are processed when ResourceOptions.MacroCreate and MacroExpand are set to True.

himitsu 28. Jan 2022 10:15

AW: Insert Values die "!" enthalten
 
Makros werden im FD auch innerhalb von Strings ersetzt?

* nja, Parameter sind für fast Alles die Lösung :)
* oder Double special characters
* man könnte die Makro-Expansion auch einfach deaktivieren. :angle:
* oder sowas nicht machen
* oder ...



Viel Spaß, mit all den anderen Zeichen.
https://docwiki.embarcadero.com/RADS...ter_Processing

Uwe Raabe 28. Jan 2022 10:20

AW: Insert Values die "!" enthalten
 
Zitat:

Zitat von himitsu (Beitrag 1501333)
Makros werden im FD auch innerhalb von Strings ersetzt?

Natürlich! Wieso sollte ein Makro innerhalb eines Strings im SQL nicht erlaubt sein.

Mal abgesehen davon, dass der String im SQL eigentlich gar nichts verloren hat. Denn:
Zitat:

Zitat von himitsu (Beitrag 1501333)
Parameter sind für fast Alles die Lösung.


himitsu 28. Jan 2022 10:27

AW: Insert Values die "!" enthalten
 
Macht Postgres/PgDAC nicht so, also nicht innherlab von "Bezeichnern" oder 'Texten' :stupid:

zu MySQL kann ich nichts sagen ... damals kannte ich sowas Exotisches wie Makros und Parameter noch nicht. :duck:

Uwe Raabe 28. Jan 2022 10:34

AW: Insert Values die "!" enthalten
 
Zitat:

Zitat von himitsu (Beitrag 1501335)
Macht Postgres/PgDAC nicht so, also nicht innherlab von "Bezeichnern" oder 'Texten' :stupid:

zu MySQL kann ich nichts sagen ... damals kannte ich sowas Exotisches wie Makros und Parameter noch nicht. :duck:

Das ist ein FireDAC-Ding und hat überhaupt nichts mit der Datenbank zu tun.

gmc616 11. Feb 2022 18:24

AW: Insert Values die "!" enthalten
 
FireDAC gegen MariaDB reagiert genau so. Musste ich auch erst lernen.
Ist also ein FireDAC-Ding, so wie Uwe schreibt!

Zitat:

Zitat von himitsu (Beitrag 1501333)
Parameter sind für fast Alles die Lösung.

100%ige Zustimmung!


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