![]() |
SQL - Insertsyntaxfehler wegen Sonderzeichen im Text
Hallo!
Ich muss in meine Datenbank (mySQL) beliebige Texte speichern können. Wenn ich nun einen Text, wie diesen
Code:
per SQL in die Datenbank schreiben will bekomme ich einen Fehler.
Hallo,
Dies ist ein 'Text' "SQL"->|",',;. Anscheinend gibt's da ein Problem mit den Sonderzeichen (wie ()[]{}',;&" ). Wie kann ich folgende SQL-Anweisung sicherer machen? [ExecuteQuery(strQuery : String)]
Delphi-Quellcode:
(Wenn nun in z.B. EMail.MsgText = ',:,-"!234§2&/(()' steht gibt 'nen Syntax-Fehler...):freak:
Result := ExecuteQuery('INSERT INTO '+ C_MAILTABLENAME +' (Subject, MsgText, Attachement) VALUES (' +
''''+ EMail.Subject +''''+ ',' + ''''+ EMail.MsgText +''''+ ',' + ''''+ EMail.Attachement +''''+ ')') Vielen Dank im Voraus! Steffen |
Re: SQL - Insertsyntaxfehler wegen Sonderzeichen im Text
Wie wär's mit:
Delphi-Quellcode:
QuotedStr gibt dir vorne und hinten ein #39 und ersetzt alle #39 durch #39#39 (#39 ist ein ' )
Result := ExecuteQuery('INSERT INTO '+ C_MAILTABLENAME +' (Subject, MsgText, Attachement) VALUES (' +
QuotedStr(EMail.Subject) + ',' + QuotedStr(EMail.MsgText) + ',' + QuotedStr(EMail.Attachement) + ')'); |
Re: SQL - Insertsyntaxfehler wegen Sonderzeichen im Text
Liegt's denn nur an den ' ?
Oder zählen da noch andere Zeichen zu den Störfaktoren? |
Re: SQL - Insertsyntaxfehler wegen Sonderzeichen im Text
Wenn ich das so mache:
Delphi-Quellcode:
Bekomme ich die Fehlermeldung:
Result := ExecuteQuery('INSERT INTO '+ C_MAILTABLENAME +' (Subject, MsgText, Attachement) VALUES (' +
QuotedStr(EMail.Subject) + ',' + QuotedStr(EMail.MsgText) + ',' + QuotedStr(EMail.Attachement) + ')'); "Operator ist auf diesen Operandentyp nicht anwendbar!" zur Vollständigkeit:
Delphi-Quellcode:
TEMail = record
Id : Cardinal; TrackingId : Cardinal; Status : TMailStatus; Recipient : String[255]; Sender : String[255]; Date : TDateTime; Subject : String[255]; MsgText : String; Attachement: String[255]; end; var EMail : TEMail; |
Re: SQL - Insertsyntaxfehler wegen Sonderzeichen im Text
Dein Code ignoriert mögliche #39 in einem der drei Werte. Das könnte dann so aussehen:
SQL-Code:
Deine DB meckert jetzt das sie den Identifier "kurz" oder "s" nicht kennt.
INSERT INTO MailTable (Subject, MsgText, Attachement) VALUES ('Moin','Ich wollt's kurz testen...', 'Test.txt')
Nachtrag: Ich schau kurz mal... |
Re: SQL - Insertsyntaxfehler wegen Sonderzeichen im Text
Zitat:
|
Re: SQL - Insertsyntaxfehler wegen Sonderzeichen im Text
Aber warum funktioniert:
Delphi-Quellcode:
nicht richtig...?
Result := ExecuteQuery('INSERT INTO '+ C_MAILTABLENAME +' (Subject, MsgText, Attachement) VALUES (' +
QuotedStr(EMail.Subject) + ',' + QuotedStr(EMail.MsgText) + ',' + QuotedStr(EMail.Attachement) + ')'); |
Re: SQL - Insertsyntaxfehler wegen Sonderzeichen im Text
Ich habe gerade mal deinen Record eingefügt und den folgenden Code benutzt...
Delphi-Quellcode:
EMail.Subject:= 'Moin';
EMail.MsgText:= 'Ich wollt'+#39+'s kurz testen...'; EMail.Attachement:= 'Test.txt'; ShowMessage( 'INSERT INTO ' + C_MAILTABLENAME + #10 + ' (Subject, MsgText, Attachement) ' + #10 + ' VALUES (' + QuotedStr(EMail.Subject) + ',' + #10 + ' ' + QuotedStr(EMail.MsgText) + ',' + #10 + ' ' + QuotedStr(EMail.Attachement) + ')'); Als Ergebnis bekomme ich:
SQL-Code:
---------------------------
Project1 --------------------------- INSERT INTO (Subject, MsgText, Attachement) VALUES ('Moin', 'Ich wollt''s kurz testen...', 'Test.txt') --------------------------- OK --------------------------- Ich weiß nicht warum das Statement nicht funktionieren sollte. :gruebel: p.s.: kommt die Meldung vom Delphi-compiler oder von der DB? |
Re: SQL - Insertsyntaxfehler wegen Sonderzeichen im Text
Der Fehler wird vom Delphi-Compiler bemängelt.
|
Re: SQL - Insertsyntaxfehler wegen Sonderzeichen im Text
Hab' den Fehler bei mir im Code gefunden, der gepostete Code ist korrekt!
Vielen Dank! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz