我用ADOQUERY组件执行一个数据更新的操作代码,并且执行了ADOQUERY1.EXECSQL的语句,编译也成功了。可是执行完了,数据库并没有更新。奇怪的是我做的insert和delete都可以成功!大家帮帮想以下是什么原因?

解决方案 »

  1.   

    把你的sql语句贴出来,肯定是你语句的问题了
      

  2.   

    ADOQUERY.CLOSE一下,可能是事物没有提交
    或者
    ADOQuery.Sql.SaveToFile('c:\sql.txt');
    ADOQuery.ExecSql;
    在去C盘下看看SQL有没有写对,可以COPY到数SQL调试器里执行一下看.
      

  3.   

    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 pword=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);
     adoquery1.Close ;
     end
    else
    .......
    后面就省略了
      

  4.   

    adoquery1.SQL.Add('update operator set pword=code,type=usertype,qx1=q1,qx2=q2,qx3=q3,qx4=q4,lasttime=ltime where username=userid');
    >>>>>>>>>>>>>>>
    应该都用 =:
      

  5.   

    自己SQL语句都不会写,好好去看看怎么写SQL语句的书吧。
    如楼上所说:要这么写SQL描叙
    adoquery1.SQL.Text:='update operator set pword=:code,type=:usertype,qx1=:q1,qx2=:q2,qx3=:q3,qx4=:q4,lasttime=:ltime where username=:userid';
      

  6.   

    adoquery1.SQL.Text:='update operator set pword=:code,type=:usertype,qx1=:q1,qx2=:q2,qx3=:q3,qx4=:q4,lasttime=:ltime where username=:userid';
      

  7.   

    哈哈!我修改看看!我没有用冒号在执行select的时候怎么就能成功呢?比如用adodataset组件来判断登入系统的用户名是否存在时,怎么就能执行好判断呢?
    procedure Tchangepassword.Edit1Exit(Sender: TObject);
    var
    adodataset1:Tadodataset;
    begin
    adodataset1:=Tadodataset.Create(self);
    adodataset1.Connection :=adoconnection1;
    adodataset1.Close ;
    adodataset1.CommandType :=cmdtext;
    adodataset1.CommandText :='select * from operator where username=s0';
    adodataset1.Parameters.Clear;
    adodataset1.Parameters.AddParameter ;
    adodataset1.Parameters[0].Name:='s0';
    adodataset1.Parameters[0].DataType :=ftstring;
    adodataset1.Parameters[0].Direction :=pdinput;
    adodataset1.Parameters[0].Value :=edit1.Text ;
    adodataset1.Active :=true;
    if adodataset1.Recordset.RecordCount=1 then
      begin
      edit2.SetFocus ;
      end
    else
      begin
      application.MessageBox('FAAFDSAFSD啊',mb_ok);
      edit1.Text :='';
      edit1.SetFocus ;
      end;
    end;
    -----------------------------
    其实我在看别人的作品时,他们也都有用冒号,也许是自己受SQL2000的影响吧!把习惯带进来了。
      

  8.   

    晕,你正常的sql语句当然不用=:,那是在使用外部参数时才用到冒号的。
      

  9.   

    大哥,我试过了,但还是没有更新数据库。我在猜想会不会少写了行关于adoquery组件的执行代码。
      

  10.   

    procedure TForm_operator.BitBtn1Click(Sender: TObject);
    var
    adoquery1:Tadoquery;
    begin
    adoquery1:=Tadoquery.Create(self);
    adoquery1.Connection :=adoconnection1;
    if radiobutton2.Checked then
     begin
       with adoquery1 do
         begin
           close;
           SQL.Clear;
           SQL.Add('update operator set pword=:code,type=:usertype,qx1=:q1,qx2=:q2,qx3=:q3,qx4=:q4,lasttime=:ltime where  username=:userid');
           parameters.parambyname('code').value:=Trim(edit2.Text);
           parameters.parambyname('usertype').value:=Trim(edit3.Text);
           parameters.parambyname('q1').value:=checkbox1.Checked;
           parameters.parambyname('q2').value:=checkbox2.Checked;
           parameters.parambyname('q3').value:=checkbox3.Checked;
           parameters.parambyname('q4').value:=checkbox4.Checked;
           parameters.parambyname('ltime').value:=strtodate(maskedit1.Text);
           parameters.parambyname('userid').value:=Trim(edit1.Text);
           ExecSQL ;
           application.MessageBox('修改该操作用户成功!','信息提示框',mb_ok);
         end;
      end;