我的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;
答案 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;
问题解决之前。