Thema: MySql und XE5

Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#4

AW: MySql und XE5

  Alt 18. Dez 2016, 15:31
Ich hasse diese Fehlermeldung: Sie haben eine Fehler in der Nähe von
Code:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''0''' at line 1.
Da kommt irgendwerwiewowas durcheinander. Eine der Nullen bekommt noch ein ' geschenkt. Die Fehlermeldung enthält vor der 0 zwei ' und dahinter sind drei '.

Um festzustellen, welche 0 das ist, ändere bitte die Zuweisung:
Delphi-Quellcode:
      Form1.SQLDataSet1.ParamByName('Feld1').DataType:=ftInteger;
      Form1.SQLDataSet1.ParamByName('Feld1').Value:=h1;
      Form1.SQLDataSet1.ParamByName('Feld2').DataType:=ftInteger;
      Form1.SQLDataSet1.ParamByName('Feld2').Value:=h1 * 10000 + 2;
      Form1.SQLDataSet1.ParamByName('Feld3').DataType:=ftString;
      Form1.SQLDataSet1.ParamByName('Feld3').Value:='';
      Form1.SQLDataSet1.ParamByName('Feld4').DataType:=ftString;
      Form1.SQLDataSet1.ParamByName('Feld4').Value:='';
      Form1.SQLDataSet1.ParamByName('Feld5').DataType:=ftInteger;
      Form1.SQLDataSet1.ParamByName('Feld5').Value:=h1 * 10000 + 5;
      Form1.SQLDataSet1.ParamByName('Feld6').DataType:=ftInteger;
      Form1.SQLDataSet1.ParamByName('Feld6').Value:=h1 * 10000 + 6;
      Form1.SQLDataSet1.ParamByName('Feld7').DataType:=ftString;
      Form1.SQLDataSet1.ParamByName('Feld7').Value:='';
      Form1.SQLDataSet1.ParamByName('Feld8').DataType:=ftString;
      Form1.SQLDataSet1.ParamByName('Feld8').Value:='';
      Form1.SQLDataSet1.ParamByName('Feld9').DataType:=ftInteger;
      Form1.SQLDataSet1.ParamByName('Feld9').Value:=h1 * 10000 + 9;
Beim ersten (dem einzelnen) Insert gibst Du halt entsprechend die Werte 2, 5, 6 bzw. 9 statt der 0 an, dann können wir sehen, welche 0 zum Syntaxfehler führt. So ist das leider eher weihnachtliches Spekulatius.

Meiner Meinung nach bleibt jetzt nix anderes übrig, als die von mir vorgeschlagenen Änderungen einzeln durchzuprobieren. Anfangen würd' ich mit
Delphi-Quellcode:
Form1.SQLDataSet1.ParamByName('Feld1').AsInteger := h1;
// bzw.
Form1.SQLDataSet1.ParamByName('Feld1').AsString := '';
Value ist (soweit ich weiß) ein Variant und da kann es sein, dass was falsch interpretiert wird.
In Bezug auf Typsicherheit scheint mir die Methode mit .AsString, .AsInteger die sicherere zu sein.

Mach aber bitte auf jeden Fall vor die Zuweisung auf CommandText noch ein Form1.SQLDataSet1.Params.Clear; Eventuell wird dort (intern) was nicht richtig aufgeräumt.

Um das zu prüfen, könntest Du mal hinter der Zuweisung auf CommandText Form1.SQLDataSet1.Params.Count; ausgeben lassen. Wenn da was anderes als 9 rauskommt, liegt dort das Problem.

Bitte schau auch mal in diesen Thread Kleiner Geschwindigkeitstest von Insert.

Da werden unterschiedliche Varianten zur Ausführung von Inserts durchprobiert.
Eventuell kannst Du Dein Problem ja durch Umstellung der Befehle beheben oder zumindest genauer eingrenzen.

Z. B. CommandText-Zuweisung und Prepared := True bzw. False außerhalb der Schleife und in der Schleife nur noch die Wertezuweisung an die Parameter.
  Mit Zitat antworten Zitat