Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL - Insertsyntaxfehler wegen Sonderzeichen im Text (https://www.delphipraxis.net/15769-sql-insertsyntaxfehler-wegen-sonderzeichen-im-text.html)

Steffen 3. Feb 2004 21:13


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:
Hallo,
Dies ist ein 'Text'
"SQL"->|",',;.
per SQL in die Datenbank schreiben will bekomme ich einen Fehler.
Anscheinend gibt's da ein Problem mit den Sonderzeichen (wie ()[]{}',;&" ).

Wie kann ich folgende SQL-Anweisung sicherer machen? [ExecuteQuery(strQuery : String)]
Delphi-Quellcode:
   Result := ExecuteQuery('INSERT INTO '+ C_MAILTABLENAME +' (Subject, MsgText, Attachement) VALUES (' +
                                                                          ''''+ EMail.Subject +''''+ ',' +
                                                                          ''''+ EMail.MsgText +''''+ ',' +
                                                                          ''''+ EMail.Attachement +''''+
                                                                     ')')
(Wenn nun in z.B. EMail.MsgText = ',:,-"!234§2&/(()' steht gibt 'nen Syntax-Fehler...):freak:

Vielen Dank im Voraus!
Steffen

Robert_G 3. Feb 2004 21:37

Re: SQL - Insertsyntaxfehler wegen Sonderzeichen im Text
 
Wie wär's mit:
Delphi-Quellcode:
  Result := ExecuteQuery('INSERT INTO '+ C_MAILTABLENAME +' (Subject, MsgText, Attachement) VALUES (' +
                                                                          QuotedStr(EMail.Subject) + ',' +
                                                                          QuotedStr(EMail.MsgText) + ',' +
                                                                          QuotedStr(EMail.Attachement) +
                                                                     ')');
QuotedStr gibt dir vorne und hinten ein #39 und ersetzt alle #39 durch #39#39 (#39 ist ein ' )

Steffen 3. Feb 2004 21:53

Re: SQL - Insertsyntaxfehler wegen Sonderzeichen im Text
 
Liegt's denn nur an den ' ?
Oder zählen da noch andere Zeichen zu den Störfaktoren?

Steffen 3. Feb 2004 22:00

Re: SQL - Insertsyntaxfehler wegen Sonderzeichen im Text
 
Wenn ich das so mache:
Delphi-Quellcode:
Result := ExecuteQuery('INSERT INTO '+ C_MAILTABLENAME +' (Subject, MsgText, Attachement) VALUES (' +
                                                                          QuotedStr(EMail.Subject) + ',' +
                                                                          QuotedStr(EMail.MsgText) + ',' +
                                                                          QuotedStr(EMail.Attachement) +
                                                                     ')');
Bekomme ich die Fehlermeldung:
"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;

Robert_G 3. Feb 2004 22:01

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:
INSERT INTO MailTable (Subject, MsgText, Attachement) VALUES ('Moin','Ich wollt's kurz testen...', 'Test.txt')
Deine DB meckert jetzt das sie den Identifier "kurz" oder "s" nicht kennt.
Nachtrag:
Ich schau kurz mal...

Steffen 3. Feb 2004 22:06

Re: SQL - Insertsyntaxfehler wegen Sonderzeichen im Text
 
Zitat:

SQL-Code:
INSERT INTO MailTable (Subject, MsgText, Attachement) VALUES ('Moin','Ich wollt's kurz testen...', 'Test.txt')
Deine DB meckert jetzt das sie den Identifier "kurz" oder "s" nicht kennt.
Das ist logisch, danke!

Steffen 3. Feb 2004 22:08

Re: SQL - Insertsyntaxfehler wegen Sonderzeichen im Text
 
Aber warum funktioniert:
Delphi-Quellcode:
Result := ExecuteQuery('INSERT INTO '+ C_MAILTABLENAME +' (Subject, MsgText, Attachement) VALUES (' + 
                                                                          QuotedStr(EMail.Subject) + ',' + 
                                                                          QuotedStr(EMail.MsgText) + ',' + 
                                                                          QuotedStr(EMail.Attachement) + 
                                                                     ')');
nicht richtig...?

Robert_G 3. Feb 2004 22:17

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?

Steffen 3. Feb 2004 22:18

Re: SQL - Insertsyntaxfehler wegen Sonderzeichen im Text
 
Der Fehler wird vom Delphi-Compiler bemängelt.

Steffen 3. Feb 2004 22:20

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 14:57 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