Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi xe2 und #39 =ZWEI Hochkommas (https://www.delphipraxis.net/170431-delphi-xe2-und-39-%3Dzwei-hochkommas.html)

Ykcim 17. Sep 2012 08:17

Datenbank: MySQL • Version: 5 • Zugriff über: ohne Komponenten

Delphi xe2 und #39 =ZWEI Hochkommas
 
Hallo Zusammen,

ich nutze #39 um in meinen SQL-Anweisungen Hochkommas zu simulieren. Mit TurboDelphi (Delphi 6) wurde dann ein Hochkomma geschrieben.
Ich versuche gerade auf Delphi xe2 Starter umzusteigen und stelle fest, das in Delphi xe2 mit #39 ZWEI Hochkommas erzeugt werden.

Ist das normal?
Warum ist das so?
Was muss ich tun, wenn ich nur ein Hochkomma haben will?
MYSQL versteht die Anweisung zwar trotzdem, aber ich weiß nicht, wie fehleranfällig das wird, weil ich es nicht verstehe.

Vielen Dank und einen schönen Tag

Ykcim

Medium 17. Sep 2012 08:34

AW: Delphi xe2 und #39 =ZWEI Hochkommas
 
Wie ermittelst du, ob da wirklich zwei Hochkommas bei rum kommen? Nachher ist das nur ein Bug in dieser Methode. Grundsätzlich ist es aber (finde ich) hübscher, Hochkommas mit sich selbst zu escapen. Sprich zwei hintereinander im Delphi-Quelltext ergeben ein Hochkomma:
Delphi-Quellcode:
aString := 'Heute gab''s Pommes Rot-Weiß';
Ausgabe: Heute gab's Pommes Rot-Weiß

Bernhard Geyer 17. Sep 2012 08:51

AW: Delphi xe2 und #39 =ZWEI Hochkommas
 
Bitte etwas mehr infos: Mit welcher Zugriffskomponente erledigst du deinen MySQL-Zugriff?
Wie schaut dein QUellcode aus?

Sir Rufo 17. Sep 2012 09:19

AW: Delphi xe2 und #39 =ZWEI Hochkommas
 
Und wie schon x-fach erwähnt :)

Nutze die Parameter für SQL-Abfragen und man braucht keine "Simulation" vor irgendwas, sondern übergibt einfach das was nachher drin stehen soll.

Code:
INSERT INTO Foo (CharField1) VALUES(:CharField1);
Delphi-Quellcode:
FooQuery.ParamByName('CharField1').Value := MyCharFieldValue;
FooQuery.Execute;
Inhalt von MyCharFieldValue
Code:
Heute gab's Pommes rot-weiß

p80286 17. Sep 2012 10:04

AW: Delphi xe2 und #39 =ZWEI Hochkommas
 
Zitat:

Zitat von Sir Rufo (Beitrag 1183240)
Und wie schon x-fach erwähnt :)

Nutze die Parameter für SQL-Abfragen und man braucht keine "Simulation" vor irgendwas, sondern übergibt einfach das was nachher drin stehen soll.

Es gibt durchaus Situationen (Generierung von Anweisungen) in denen es zu diesen Hochkommaorgien kommen kann. Ist besonders interessant wenn man zwischen ' und " wechseln muß.

Gruß
K-H

Ykcim 17. Sep 2012 21:21

AW: Delphi xe2 und #39 =ZWEI Hochkommas
 
Hallo Zusammen,

vielen Dank für die Antworten.

Ich greife auf den MySQL-Server via der mysql.pas zu und habe dafür drei Proceduren (connect, ExecQuery und disconnect).

Wenn ich eine query zusammenbastel, und ich möchte in einer where-Anweisung nach einem Text suchen, muss der für den MySQL-Server in Hochkommas stehen.

Beispiel:

select * from Tabelle where Name='Ykcim'

In meinem Delphi-Programm sieht das dann so aus:
Delphi-Quellcode:
query:='select * from Tabelle where Name='+#39+'Ykcim'+#39;


oder wenn Yckim in einer Variable steht:
Delphi-Quellcode:
query:='select * from Tabelle where Name='+#39+Variable+#39;


Das klappte ja auch wunderbar in TurboDelphi. Aber in xe2 werden an der Stelle von #39 zwei Hochkommas gesetzt.

Getestet habe ich das, indem ich den Wert der Variablen "query" ausgelesen habe. Ich habe der Variable aus Spaß mal nur den "Wert" #39 zugewiesen, dann werden auch zwei Hochkommas gesetzt. Das ist dann kein Gänsfüßchen ", sondern wirklich zwei Hochkommas.

Vielen Dank

Ykcim

Medium 17. Sep 2012 22:03

AW: Delphi xe2 und #39 =ZWEI Hochkommas
 
"Ausgelesen" wie?

Schon das Doppelhochkomma statt des #39 probiert?

Edit: Wo kommt die mysql.pas her? Parameter sind imho eine Eigenschaft von SQL, die Unit könnte das ggf. auch implementieren.

*indeinernaserumpul*

Furtbichler 18. Sep 2012 06:31

AW: Delphi xe2 und #39 =ZWEI Hochkommas
 
Ach, der Debugger zeigt dir 2 Hochkommas an? Super, oder? Der escaped gleich richtig, sodaß Du den String so nehmen und als Stringkonstante irgendwo reinklatschen kannst.

Mit anderen Worten: Das ist kein Bug, das muss so sein.

Delphi-Quellcode:
MyString := 'String mit Hoch''komma';
Showmessage(MyString); // DEbugger auf diese Zeile und dann mit dem Cursor auf MyString

sx2008 18. Sep 2012 06:33

AW: Delphi xe2 und #39 =ZWEI Hochkommas
 
Wenn du die Parameter wie im Beitrag #4 ignorieren möchtet, dann verwendet wenigstens die Funktion QuotedStr()!
Delphi-Quellcode:
// dynamisches Erzeugen von SQL Abfragen
query:='select * from Tabelle where Name='+QuotedStr(Variable);
Wenn du die Variable query später im Debugger anschaust, kann es durchaus sein, dass du zwei Hochkommas siehst, aber das ist absolut in Ordnung.
Delphi-Quellcode:
// folgende Anweisungen bewirken alle das Gleiche (nur unterschiedl. Schreibweise)
s := 'Opa'#39's Hut';
s := 'Opa'+#39+'s Hut';
s := 'Opa''s Hut';

Ykcim 18. Sep 2012 09:00

AW: Delphi xe2 und #39 =ZWEI Hochkommas
 
Vielen Dank für die Antworten.
Ich werde mich mal mit der Funktion QuotedStr() auseinandersetzen.

Opa hat keinen Hut, aber die Erklärung war gut! ;-)

Aber dennoch sehe ich das Verhalten von #39 verändert von TurboDelphi zu xe2.

Danke
Ykcim


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:42 Uhr.
Seite 1 von 3  1 23      

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