procedure TForm_operator.BitBtn1Click(Sender: TObject);
var
adoquery1:Tadoquery;
begin
adoquery1:=Tadoquery.Create(self);
adoquery1.Connection :=adoconnection1;
adoquery1.Close ;
if radiobutton2.Checked then
 begin
 adoquery1.SQL.Clear;
 adoquery1.SQL.Add('update operator set password=code,type=usertype,qx1=q1,qx2=q2,qx3=q3,qx4=q4,lasttime=ltime where username=userid');
 adoquery1.Parameters.Clear ;
 adoquery1.Parameters.AddParameter;
 adoquery1.Parameters[0].Name :='userid';
 adoquery1.Parameters[0].DataType:=ftstring;
 adoquery1.Parameters[0].Direction :=pdinput;
 adoquery1.Parameters[0].Value :=edit1.Text ;
 adoquery1.Parameters.AddParameter;
 adoquery1.Parameters[1].Name :='code';
 adoquery1.Parameters[1].DataType:=ftstring;
 adoquery1.Parameters[1].Direction :=pdinput;
 adoquery1.Parameters[1].Value :=edit2.Text ;
 adoquery1.Parameters.AddParameter;
 adoquery1.Parameters[2].Name :='usertype';
 adoquery1.Parameters[2].DataType:=ftstring;
 adoquery1.Parameters[2].Direction :=pdinput;
 adoquery1.Parameters[2].Value :=edit3.Text ;
 adoquery1.Parameters.AddParameter;
 adoquery1.Parameters[3].Name :='q1';
 adoquery1.Parameters[3].DataType:=ftboolean;
 adoquery1.Parameters[3].Direction :=pdinput;
 adoquery1.Parameters[3].Value :=checkbox1.Checked ;
 adoquery1.Parameters.AddParameter;
 adoquery1.Parameters[4].Name :='q2';
 adoquery1.Parameters[4].DataType:=ftboolean;
 adoquery1.Parameters[4].Direction :=pdinput;
 adoquery1.Parameters[4].Value :=checkbox2.Checked;
 adoquery1.Parameters.AddParameter;
 adoquery1.Parameters[5].Name :='q3';
 adoquery1.Parameters[5].DataType:=ftboolean;
 adoquery1.Parameters[5].Direction :=pdinput;
 adoquery1.Parameters[5].Value :=checkbox3.Checked ;
 adoquery1.Parameters.AddParameter;
 adoquery1.Parameters[6].Name :='q4';
 adoquery1.Parameters[6].DataType:=ftboolean;
 adoquery1.Parameters[6].Direction :=pdinput;
 adoquery1.Parameters[6].Value :=checkbox4.Checked ;
 adoquery1.Parameters.AddParameter;
 adoquery1.Parameters[7].Name :='ltime';
 adoquery1.Parameters[7].DataType:=ftdatetime;
 adoquery1.Parameters[7].Direction :=pdinput;
 adoquery1.Parameters[7].Value :=strtodate(maskedit1.Text) ;
 adoquery1.ExecSQL ;
 application.MessageBox('新增成功!',mb_ok);
 end
else if (radiobutton1.Checked)  and (edit1.Text <>'') then
 begin
 adoquery1.SQL.Clear;
 adoquery1.SQL.Add('insert into operator values( userid,code,usertype,q1,q2,q3,q4,ltime)');
 adoquery1.Parameters.Clear ;
 adoquery1.Parameters.AddParameter;
 adoquery1.Parameters[0].Name :='userid';
 adoquery1.Parameters[0].DataType:=ftstring;
 adoquery1.Parameters[0].Direction :=pdinput;
 adoquery1.Parameters[0].Value :=edit1.Text ;
 adoquery1.Parameters.AddParameter;
 adoquery1.Parameters[1].Name :='code';
 adoquery1.Parameters[1].DataType:=ftstring;
 adoquery1.Parameters[1].Direction :=pdinput;
 adoquery1.Parameters[1].Value :=edit2.Text ;
 adoquery1.Parameters.AddParameter;
 adoquery1.Parameters[2].Name :='usertype';
 adoquery1.Parameters[2].DataType:=ftstring;
 adoquery1.Parameters[2].Direction :=pdinput;
 adoquery1.Parameters[2].Value :=edit3.Text ;
 adoquery1.Parameters.AddParameter;
 adoquery1.Parameters[3].Name :='q1';
 adoquery1.Parameters[3].DataType:=ftboolean;
 adoquery1.Parameters[3].Direction :=pdinput;
 adoquery1.Parameters[3].Value :=checkbox1.Checked ;
 adoquery1.Parameters.AddParameter;
 adoquery1.Parameters[4].Name :='q2';
 adoquery1.Parameters[4].DataType:=ftboolean;
 adoquery1.Parameters[4].Direction :=pdinput;
 adoquery1.Parameters[4].Value :=checkbox2.Checked;
 adoquery1.Parameters.AddParameter;
 adoquery1.Parameters[5].Name :='q3';
 adoquery1.Parameters[5].DataType:=ftboolean;
 adoquery1.Parameters[5].Direction :=pdinput;
 adoquery1.Parameters[5].Value :=checkbox3.Checked ;
 adoquery1.Parameters.AddParameter;
 adoquery1.Parameters[6].Name :='q4';
 adoquery1.Parameters[6].DataType:=ftboolean;
 adoquery1.Parameters[6].Direction :=pdinput;
 adoquery1.Parameters[6].Value :=checkbox4.Checked ;
 adoquery1.Parameters.AddParameter;
 adoquery1.Parameters[7].Name :='ltime';
 adoquery1.Parameters[7].DataType:=ftdatetime;
 adoquery1.Parameters[7].Direction :=pdinput;
 adoquery1.Parameters[7].Value :=strtodate(maskedit1.Text) ;
 adoquery1.ExecSQL ;
 application.MessageBox('修改成功!',mb_ok);
 end
 else
 begin
 adoquery1.SQL.Clear;
 adoquery1.SQL.Add('delete from operator where username=userid');
 adoquery1.Parameters.Clear;
 adoquery1.Parameters.AddParameter;
 adoquery1.Parameters[0].name:='userid';
 adoquery1.Parameters[0].DataType:=ftstring;
 adoquery1.Parameters[0].Direction:=pdinput;
 adoquery1.Parameters[0].Value:=edit1.text;
 adoquery1.ExecSQL;
 application.MessageBox('删除成功!',mb_ok);
 initdata;
 end;
 adoquery1.Close ;
 edit1.SetFocus ;
end;
--------------------------------------------
上面是原码,错误的提示为:UPDATE 语法错误!。我看了半天觉得我的SELECT 语句没有问题!大家帮帮忙吧!

解决方案 »

  1.   

    adoquery1.SQL.Add('update operator set [password]=[code],[type]=usertype,qx1=q1,qx2=q2,qx3=q3,qx4=q4,lasttime=ltime where [username]=[userid]');
      

  2.   

    update语句里包含了系统保留字password,如上加个中括号就可以,或者干脆改别的名字
      

  3.   

    参数一般前面加个:冒号,:code之类的
      

  4.   

    adoquery1.SQL.Add('update operator set password=code,type=usertype,qx1=q1,qx2=q2,qx3=q3,qx4=q4,lasttime=ltime where username=userid');

    //这样写好像比较烦琐,完全可以简化
    var
    sSQL: string;sSQL := ''update operator set ';
    sSQL := sSQL + Format('password = ''%s'', type = ''%s''', [edit2.Text, edit3.Text]);....这样可以解决参数问题而且容易调试SQL语句内容,如果说是SQL语法出错,你可以用ShowMessage(SQL.Text)来查看你的SQL语句内容,或用我的方法查看sSQL字符串内容