Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Mysql Insert Fehler (https://www.delphipraxis.net/40342-mysql-insert-fehler.html)

Masterof 14. Feb 2005 17:06

Datenbank: mysql • Version: 4.0 • Zugriff über: mysql

Mysql Insert Fehler
 
Hallo!!

Ich habe eine Anwendung geschrieben die Wörter aus einer Textdatei ausließt ordnet und in eine Mysql Datenbank schreibt.
Die Wörter stehen in einem Stringgrid, wenn ich sie Zeile für Zeile in die Datenbank schreiben möchte bricht das Programm ab und bringt folgenden Fehler.

You have an error in your Sql Syntax.

Ich verwende die ZeosAccess Komponenten für den Zugriff auf die Datenbank.
Hier ist der Quellcode bei dem der Fehler entsteht.
Delphi-Quellcode:
procedure Tfrmwordconvert.InMySql1Click(Sender: TObject);
var i : integer;
begin
for i:= 1 to sgwords.rowcount -1 do
 begin
  connection.DMmysql.ZQuery1.SQL.Text:= 'Insert Into english ' +
     '(`ordnr`, `words`)'+
                    ' VALUES '+
                    '('''+sgwords.Cells[0,i]+''', '''+sgwords.Cells[2,i]+''');';
                    //showmessage(connection.DMmysql.ZQuery1.SQL.Text);

  connection.DMmysql.ZQuery1.ExecSQL;

end;
end;
Achso, bevor ich es vergesse, wenn ich das ganze mit einem Datensatz mache funktioniert es.

MfG Master

lume96 14. Feb 2005 17:40

Re: Mysql Insert Fehler
 
Moin,

könnte es sein, dass Deine Wörter aus der Text-Datei vielleicht irgendwelche Zeichen beinhalten, die Dein SQL-Statment "zerstören" (z.B. , oder ', etc...).

Sicherheitshalber würde ich es mal mit Parametern versuchen. Das sollte in etwa so aussehen :
Delphi-Quellcode:
  ZQuery1.Sql.Text := 'INSERT INTO ENGLISH (ordnr,words) VALUES (:onr,:wds)';

  ZQuery1.Params.Clear;
  ZQuery1.Params.CreateParam(ftInteger,'onr', ptInput);
  ZQuery1.Params.CreateParam(ftString,'wds', ptInput);

  ZQuery1.ParamByName('onr').AsInteger := sgwords.Cells[0,i];
  ZQuery1.ParamByName('wds').AsString := sgwords.Cells[2,i];
  ZQuery1.ExecSQL;
Ich hab den Code jetzt nicht getestet, kann also sein, dass er so nicht ganz korrekt ist (sollte Dich lediglich in die richtige Richtung bringen).

(Typen unter Umständen anpassen, ich bin von einem Integer für die "ornr" und einem String für die "words" ausgegangen).


Tschüss,
Lutz

Masterof 14. Feb 2005 18:12

Re: Mysql Insert Fehler
 
Hallo!!

Ja du hattest recht, es sind Steuerzeichen die aus der Textdatei im SQL String Fehler verursachen.
Du hast ftString verwendet, woher bekommst du diese Werte, es verursacht bei mir einen Fehler.

MfG Master

lume96 14. Feb 2005 18:30

Re: Mysql Insert Fehler
 
Moin,

Du gibst leider nicht an, welche Version der ZEOS Lib Du benutzt.

Hab jetzt mal kurz Delphi gestartet und eine ZQuery auf einen Form geschoben.

Bei meiner Version von ZEOS (6.15 stable) werden folgende units im uses hinzugefügt :
DB
ZAbstractRODataset
ZAbstractDataset
ZDataset

ftString sollte in einem dieser units definiert sein, denn bei mir gibt's beim kompilieren keinen Fehler.

Tschüss,
Lutz

Masterof 14. Feb 2005 18:39

Re: Mysql Insert Fehler
 
Hallo!!

Ich habe eben mal schnell nachgeschaut, ich verwende die 6.1.5. Ok habe den Fehler gefunden, ich habe die Verbindung in einer DLL und musste in die Unit noch die 4 Sachen im uses Teil hinzufügen.

Danke
MfG Master

BorlanDelphiUser 22. Feb 2005 14:11

Re: Mysql Insert Fehler
 
Hallo ich hab gerade auch das problem beim INSERT und UPDATE ... weil ich PHP Code in der DB speichern will stören dort auch die Steuerzeichen ' ...

@lume96 igendwie blicke ich da bei deinem code nicht durch ... was bewirkt dieser? Wandelt der die ' Zeichen um oder wie?

Masterof 22. Feb 2005 14:34

Re: Mysql Insert Fehler
 
Hallo!!

Also der Code den Lume geposted hat ist bewirkt, dass du keine Steuerzeichen brauchst. Du schreibst den Text vorher in eine Stringvariable und übergibst den Inhalt an die Datenbank.
Du kannst mir ja die PHP Datei mal zukommen lassen. Wenn du möchtest dann schaue ich mal was ich machen kann.

MfG Master

lume96 22. Feb 2005 14:46

Re: Mysql Insert Fehler
 
Moin,

Zitat:

Zitat von BorlanDelphiUser
@lume96 igendwie blicke ich da bei deinem code nicht durch ... was bewirkt dieser?

Wenn Du mit Parametern arbeitest, dann gibst Du in der eigentlichen SQL-Instruktion keine Werte mehr an, sondern "Variablen" (erkennt man durch den Doppelpunkt).

Mit dem ParamByName('abc').AsString := ... weist Du der Variable dann einen Wert zu.

Spontan fallen mir mindestens drei Vorteile ein :
1) Die eigentliche SQL-Instruktion ist leichter zu lesen.
2) Man ärgert sich nicht mehr mit der Unzahl von ' rum (soch nach dem Motto ...+'('''+... :shock: )
3) Strings (aber auch z.B. Dates) werden richtig formatiert.

Ich bin nie in die Interna eingestiegen, kann also leider nicht erklären, wie das intern gehandhabt wird. Warscheinlich werden die Strings, falls nötig, entsprechend ge-quoted.

Tschüss,
Lutz

alcaeus 22. Feb 2005 14:49

Re: Mysql Insert Fehler
 
Zitat:

Zitat von lume96
Ich bin nie in die Interna eingestiegen, kann also leider nicht erklären, wie das intern gehandhabt wird. Warscheinlich werden die Strings, falls nötig, entsprechend ge-quoted.

Das beginnt schon früher. Auch in einem Editfeld werden intern alle ' durch '' ersetzt. Der Lesevorteil ist nur ein kleiner Bonus, aber die Sache mit den Variablen und formatierungen fällt schon sehr ins Gewicht.

Greetz
alcaeus

BorlanDelphiUser 22. Feb 2005 15:00

Re: Mysql Insert Fehler
 
Also ich erkläre euch mal mein Problem etwas genauer ...

Ich habe ein Memo wo ich bekiebigen PHP Code eingebe wie z.b.

Code:
<?
  echo 'Irgendwas';
?>
Und wenn ich dann folgendes mache ...
Delphi-Quellcode:
Form1.q_for_tipp.Sql.Text := 'INSERT INTO `code_schnipsel` SET code='''+ Form1.SynEdit1.Text +''' ';
Form1.q_for_tipp.ExecSql;
... dann kommt der tolle Fehler .. You have an Error in your SQL Syntax .. bla bla bla

Ist ja auch ganz klar weil diese schicken ' Zeichen eingefügt werden, was dann meinen SQL Syntax zerstöt . Wie kann ich dieses Problem lösen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr.
Seite 1 von 4  1 23     Letzte »    

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 by Thomas Breitkreuz