Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Falsche Anfrage [gelöst] (https://www.delphipraxis.net/18661-falsche-anfrage-%5Bgeloest%5D.html)

Synonym 22. Mär 2004 21:22


Falsche Anfrage [gelöst]
 
Hi,

um einen Datensatz zu ändern nutze ich folgenden Code;

Delphi-Quellcode:
 
Form1.qrMain.SQL.Text:='UPDATE `gaestebuch` Set `user`='''+Edit1.Text+''','+
                             '`password`='''+Edit2.Text+''','+
                             '`topic`='''+Edit4.Text+''','+
                             '`text`='''+synmemo1.text+''','+
                             'WHERE `id`='''+edit3.text+''';';
    Form1.qrMain.ExecSql; //SQL-Statement ausführen
leider sagt er mir das dies falsch oder unbekannter syntax ist...Where `id`=1!


Woran kanns liegen? habs so aus nem tutorial!

Gruß

Synonym

gekmihesg 22. Mär 2004 21:40

Re: Falsche Anfrage
 
ich würd mal versuchen den strichpunkt hinter id und die anführungszeichen um den idwert wegzulassenn

Robert_G 22. Mär 2004 21:41

Re: Falsche Anfrage
 
  • Warum packst du alle Wörter in ein "`" ???
  • Das ";" hat in normalem SQL nix zu suchen
  • Rate mal was passiert, wenn der User ein ' (#39) in einem der Editfelder eingibt.
  • zusammengebastelte Statements (Die Werte in den Statement string konkatinieren), machen den Cursor- & Statement Cache deiner DB witzlos (das Statement ändert sich ja jedesmal)
    Die letzten beiden Punkte lassen sich durch Parameter ganz einfach umgehen. (Und die Lesbarkeit steigt!)
Delphi-Quellcode:
Var
  ProcessedRecs          :Integer;
  ...
BEGIN
  ...
  With ADOQuery Do
  Begin
    SQL.Text :=
      'UPDATE GaesteBuch' + #10 +
      'SET   USER    = :i_USER' + #10 +
      '     ,Password = :i_Password' + #10 +
      '     ,Topic   = :i_Topic' + #10 +
      '     ,Text    = :i_Text' + #10 +
      'WHERE ID = :i_ID';
    // Parsen des Statements um Query Parameter zu finden...
    Prepared := True;
    // Werte an Query Parameter übergeben...
    With Parameters Do
      ParamByName('i_USER').Value := Edit1.Text;
      ParamByName('i_Password').Value := Edit2.Text;
      ParamByName('i_Topic').Value := Edit4.Text;
      ParamByName('i_Text').Value := SynMemo1.Text;
      ParamByName('i_ID').Value := Edit3.Text;
    End
    ProcessedRecs := ExecSQL;
  End;
  MessageDlg(IntToStr(ProcessedRecs)+ ' rows updated...', mtInformation, [mbOK], 0);
  ...
END;
Edit: Ich hatte die Doppelpunkte vergessen!

Daniel 22. Mär 2004 21:41

Re: Falsche Anfrage
 
Und das Komma hinter dem Wert von 'text' dürfte zuviel sein.

Synonym 22. Mär 2004 21:46

Re: Falsche Anfrage
 
funktioniert beides leider nicht...


exception in blabla bla where id=1 = falscher Syntax!

In PHPMyAdmin funktionierts mit dem Vefehl: UPDATE `Gaestebuch` SET `user` = 'test1' WHERE `id` = '1'

gruß

Synonym

Synonym 22. Mär 2004 21:56

Re: Falsche Anfrage
 
Zitat:

Zitat von Daniel
Und das Komma hinter dem Wert von 'text' dürfte zuviel sein.

habe dein posting erst gerade gesehen...genau das wars!!!

Danke

Robert_G 22. Mär 2004 21:57

Re: Falsche Anfrage
 
Du schmeißt es doch alles in eine Zeile und da steht dann:
SQL-Code:
UPDATE gaestebuch SET   USER = '...' ,Password = '...' ,Topic = '...' ,Text = '...' ,{hier ist der Fehler} WHERE id = '1'
Nachtrag: Wo hast du denn das Tutorial her?
Wie kann man schon in einem Tutorial den Leser zu solchen Fehlern verleiten?
Unnötig veränderliche Statements sind der beste Weg um aus einer schnellen DB ein Access/Paradox,... zu machen!


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:15 Uhr.

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