Delphi-PRAXiS
Seite 2 von 3     12 3      

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)

DeddyH 18. Sep 2012 09:13

AW: Delphi xe2 und #39 =ZWEI Hochkommas
 
Kleiner Hinweis aus der Hilfe zu QuotedStr:
Zitat:

Anmerkung: Verwenden Sie für die Arbeit mit Multibyte-Zeichensätzen (MBCS) stattdessen die Funktion AnsiQuotedStr.

mkinzler 18. Sep 2012 09:34

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

Zitat von DeddyH (Beitrag 1183380)
Kleiner Hinweis aus der Hilfe zu QuotedStr:
Zitat:

Anmerkung: Verwenden Sie für die Arbeit mit Multibyte-Zeichensätzen (MBCS) stattdessen die Funktion AnsiQuotedStr.

Für Ansi QuoteStr() und für Nicht-ANSI (Unicode) AnsiQuoteStr(); ist doch logisch. :stupid:

DeddyH 18. Sep 2012 09:42

AW: Delphi xe2 und #39 =ZWEI Hochkommas
 
Sischa, sischa :mrgreen:

Ykcim 5. Okt 2012 14:28

AW: Delphi xe2 und #39 =ZWEI Hochkommas
 
So, ich bin das Problem jetzt eine Zeit aus dem Weg gegangen, stolpere aber wieder einmal drüber...

Wenn ich eine Abfrage mache, könnte sie wie folgt aussehen:


query:='select * from Tabelle where Feld=''Test'';

So kann ich Eure Antworten verstehen, dass ich das mit mehrfachen Hochkommas erledigen kann. Wenn aber der Wert "Test" in einer Variable steht, bekomme ich ein Problem. Das habe ich vor Delphi xe2 folgender Maßen gelöst:


query:='select * from Tabelle where Feld='+#39+Variable+#39;

Da bekomme ich mit Delphi xe2 jetzt nur noch Murks :evil: raus, weil irgendwann zwischen TurboDelphi (Delphi 6) und Delphi xe2 die Änderung vollzogen wurde, dass #39 statt einem Hochkomma (') bei Delphi xe2 zwei Hochkommas ('') (kein Gänsfüßchen) auswirft.

Wie würdet Ihr das Problem lösen? Ich bin nicht mehr in der Lage eine einfache SQL-Anweisung zu generieren, wenn ich dafür keine Lösung finde...:oops::oops::oops:

Vielen Dank

Ykcim

mkinzler 5. Okt 2012 14:34

AW: Delphi xe2 und #39 =ZWEI Hochkommas
 
Einfachste Lösung: Parameter.
Oder QuotedStr() verwenden

vagtler 5. Okt 2012 14:43

AW: Delphi xe2 und #39 =ZWEI Hochkommas
 
Jetzt fangen wir aber an uns im Kreis zu drehen...

mkinzler 5. Okt 2012 14:46

AW: Delphi xe2 und #39 =ZWEI Hochkommas
 
Ja, aber manche muss man die richtige Lösung mind. 10 mal nenne, dass sie es ihm Wert ist als Möglichkeit in Betracht gezogen zu werden.

himitsu 5. Okt 2012 14:53

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

Da bekomme ich mit Delphi xe2 jetzt nur noch Murks raus, weil irgendwann zwischen TurboDelphi (Delphi 6) und Delphi xe2 die Änderung vollzogen wurde, dass #39 statt einem Hochkomma (') bei Delphi xe2 zwei Hochkommas ('') (kein Gänsfüßchen) auswirft.
Nein, es wurde im Delphi absolut nichts umgebaut.
(höchstens einige Debugtools, ala Variablenanzeigen, wurden überarbeitet und zeigen Vieles jetzt "fehlerfreier" an)

Delphi-Quellcode:
query := 'select * from Tabelle where Feld=''Test''';

Variable := 'Test';
query := 'select * from Tabelle where Feld=''' + Variable + '''';

query := 'select * from Tabelle where Feld='#39 + Variable + #39;
'' (in einem String) und #39 oder #$27, Ord(39) usw. sind grundsätzlich genau das Selbe.
Es sind schon immer Kodierungen, um ein ' darzustellen.
In anderen Sprachen sieht man z.B. stattdessen \' , wo dann \\ für ein \ stünde


Raus kommt hier immer
Code:
select * from Tabelle where Feld='Test'


Wenn möglich solltest du ganz einfach parametrisierte Abfragen verwenden (so wie es schon öfters genannt wurde)
und falls das nicht unterstützt wird, dann das entsprechende "QuoteString", welches im String die ' ergänzt.
z.B.
Delphi-Quellcode:
query := 'select * from Tabelle where Feld=' + QuoteString(Variable);
Bei einer "ordentlichen" Zugriffskomponente, kommt dann z.B. sowas bei raus
Delphi-Quellcode:
query.Sql.Text := 'select * from Tabelle where Feld = :wert';
query.ParamByName('wert').Value := 'Test';
Wenn dein mySql so arbeitet, wie ich es noch vom PHP+mySQL kenn, dann wohl eher so
Delphi-Quellcode:
query.Sql.Text := 'select * from Tabelle where Feld = ?';
query.Params[0].Value := 'Test';
In dem Parameter können dann soviele Sonderzeichen und vorallem Steuerzeichen drin vorkommen, wie sie wollen.
Bei QuoteString wird davon vieles abgefangen und wenn man das ohne irgendwas selbst zusammenbaut, dann hat man ganz schnell ein rießiges "Sicherheitsproblem".
Stichwort SQL-Injection.

p80286 5. Okt 2012 15:14

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

Zitat von Ykcim (Beitrag 1185925)
Wenn ich eine Abfrage mache, könnte sie wie folgt aussehen:


query:='select * from Tabelle where Feld=''Test'';

Wenn deine Quelltextzeile so aussieht sollte es mindestens eine Fehlermeldung geben, da die Anzahl der Hovhkommata nicht stimmt!

Delphi-Quellcode:
query:='select * from Tabelle where Feld=''Test''';
ergibt
SQL-Code:
select * from Tabelle where Feld='Test'
eine Möglichkeit mit Parametern könnte so aussehen:
Delphi-Quellcode:
query:='select * from Tabelle where Feld=:myfeld;
.params.Parambyname('myfeld').asstring:='Test'; {oder so ähnlich}
ergibt
SQL-Code:
select * from Tabelle where Feld='Test'
und jetzt begründe bitte einmal warum die vielen bisher gezeigten Möglichkeiten für Dich nicht in Frage kommen.
Ohne das haben wir keine Möglichkeit Dir weiter zuhelfen.

Gruß
K-H

Ykcim 5. Okt 2012 15:30

AW: Delphi xe2 und #39 =ZWEI Hochkommas
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

Danke für die Antworten.

Ich muss glaube ich mal generell etwas erklären: Ich schätze jede Antwort und versuche alle Antworten zu verstehen - über die Erfolgsquote meiner Bemühung sage ich jetzt lieber nichts...
Dazu habt Ihr mir in diesem Forum schon viel zu viel beigebracht, aber wie bereits angedeutet, verstehe ich als Hobbyprogrammierer oft nicht was damit gemeint ist...
So auch mit der Hilfestellung, dass ich QuotedStr() verwenden soll.

Ich verwende keine Komponenten, um auf den MySQL-Server zu zugreifen, da ich keine habe und auch noch nicht geblickt habe, wie ich dann damit umgehen muss. Sorry, aber ich weiß es wirklich nicht und konnte es mir trotz vieler Suchstunden nicht zusammenlesen.

Ich habe eine umfangreiche Anwendung ohne Komponenten seid 1 Jahr im Produktiveinsatz laufen und dachte, dass ich das auch unter xe2-Starter schaffen könnte.

Ich habe in der Liste der überwachten Objekte festgestellt, dass #39='' statt ' ergibt. Ob das jetzt der Wahrheit entspricht, weiß ich nicht. Ich habe eine Screenshot angehängt, auf dem Ihr es sehen könnt.
Wenn ich aber einem Editfeld #39 als Text zuweise, dann kommt wie üblich nur '. Also, ich weiß jetzt nicht, wo der Fehler liegt...

Ich habe festgestllt, dass #34 (Gänsefüßchen) für den MySQL-Server auch in Ordnung zu sein scheint und daher versuche ich es jetzt mal damit.

ABer vielleicht habt Ihr ja auch noch den ein oder anderen Tip für mich.

Vielen Dank

Ykcim


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:35 Uhr.
Seite 2 von 3     12 3      

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