给出未知语法错误的Sql语法

时间:2014-11-09 15:34:50

标签: mysql delphi delphi-xe5

我的mysql语句有问题。

基本上代码在插入时效果很好,但是一旦addnew变量= false并且它切换到更新它就会给我一个我无法解决的错误。

守则:

procedure Tadddomain.BitBtn2Click(Sender: TObject);
Var
PrevSql:String;
ID:String;
begin
With Datalive.domains Do
 Begin
  id:=fieldbyname('id').AsString;
  Active:=False;
  prevsql:=sql.Text;
  Sql.Clear;
  Params.Clear;
  Addparam(Datalive.domains,'client_id',ftinteger,datalive.clients.FieldByName('id').AsString);
  Addparam(Datalive.domains,'domain_name',ftString,Edit1.Text);
  Addparam(Datalive.domains,'register_date',ftdate,DateTimePicker1.Date);
  Addparam(Datalive.domains,'registered_until',ftdate,DateTimePicker2.Date);
  if addnew=true then
    Sql.Text:='Insert into domains (client_id,domain_name,register_date,registered_until) VALUES (:client_id,:domain_name,:register_date,:registered_until)'
  Else if addnew=False then
    Sql.Text:='Update domains (domain_name=:domain_name, register_date=:register_date, registered_until=:registered_until) where id='''+id+'''';
  Showmessage(sql.text);
  execsql;
  sleep(100);
  sql.Text:=prevsql;
  active:=True;
  done:=True;
  adddomain.Close;
 End;
end;

错误:

  

项目project1.exe引发异常类EZSQLException并显示消息' SQL错误:您的SQL语法中有错误;检查与您的mysql服务器版本相对应的手册,以便在#"(domain_name =' asd',register_date =' 2014-11-09',registered_until = ' 2015-11-09')w'在第1行'。

任何帮助都会很棒,我搜索过并找不到错误。


更新

我改变了编辑代码,如下所示,现在没有任何错误。但也没有任何反应。它不会编辑记录。

if addnew=true then
    Sql.Text:='Insert into domains (client_id,domain_name,register_date,registered_until) VALUES (:client_id,:domain_name,:register_date,:registered_until)'
  Else if addnew=False then
   Begin
    sql.Add('Update domains');
    sql.Add('set domain_name=:domain_name,');
    sql.Add('register_date=:register_date,');
    sql.Add('registered_until=:registered_until');
    sql.Add('where id=:id');
   End;

3 个答案:

答案 0 :(得分:0)

更新语法就像这样

Update domains 
set domain_name = :domain_name, 
    register_date = :register_date, 
    registered_until = :registered_until
where id = :id

答案 1 :(得分:0)

您声明“client_id”参数不是您在update语句中使用的“id”参数。

where id = :id

应该是

where id = :client_id

答案 2 :(得分:0)

我发现了这个问题。 如果我在使用sql.add()函数之前定义参数,则丢弃参数。 当我移动

Addparam(Datalive.domains,'client_id',ftinteger,datalive.clients.FieldByName('id').AsString);
  Addparam(Datalive.domains,'domain_name',ftString,Edit1.Text);
  Addparam(Datalive.domains,'register_date',ftdate,DateTimePicker1.Date);
  Addparam(Datalive.domains,'registered_until',ftdate,DateTimePicker2.Date);

就在execsql;问题解决之前。