有如下语句:
procedure TForm1.Button1Click(Sender: TObject);
begin
ADOQuery1.SQL.Text:='select * from myView';
ADOQuery1.Open;
ADOQuery1.Edit;
AdoQuery1.SQL.Text:='UPDATE myView SET xm = ''aaa'' WHERE iTime=(select min(iTime) from myView)';
AdoQuery1.ExecSQL;
ADOQuery1.Post;
end;
其中那个更新查询在DBMS中可以正常执行,但是到了Delphi中却报错:
ADOQuery1:Dataset not in edit or insert mode!
ADO怎么这么差劲啊!

解决方案 »

  1.   

    不是ADO差劲吧,是兄弟搞错了,adoquery用update语句.....
    建议使用adocommand
      

  2.   

    //不是ADO差劲,是你对ADO的认识太少了,其实你写的这么多代码只要一句话就搞定了
    //建议你把Ado的基本知识首先要掌握好了,再开始做程序procedure TForm1.Button1Click(Sender: TObject);
    begin
    Adoquery1.Connection.Execute:='UPDATE myView SET xm = ''aaa'' WHERE iTime=(select min(iTime) from myView)';
    end;
      

  3.   

    老兄,不是ADO差劲,是你还不行!!AdoQuery1.ExecSQL;  //此时的AdoQuery1已是 Browse状态。
    ADOQuery1.Post;     //Post 当然出错了,只有在 Insert, Edit状态才能Post!
      

  4.   


    procedure TForm1.Button1Click(Sender: TObject);
    begin
    ADOQuery1.SQL.Text:='select * from myView';
    ADOQuery1.Open;
    ADOQuery1.Edit;
    AdoQuery2.SQL.Text:='UPDATE myView SET xm = ''aaa'' WHERE iTime=(select min(iTime) from myView)';
    AdoQuery2.ExecSQL;
    ADOQuery1.Post;
    end;
      

  5.   

    AdoQuery1.ExecSQL;
    就是可以的了
    不需要的 post的 ExecSQL的时候就可以的了
      

  6.   

    楼主:
      建议你把显示数据集和更新的语句用两个不同的AdoQuery实现,如果adoquery1用于显示数据集,adoquery2用于更新数据表,假设AdoQuery1先行打开了,那么在调用AdoQuery2更新数据表后再adoquery1.refresh就可以了
      

  7.   

    To:zhusongdong(东) 
    Access Violation:
    -----------------------------------
    To:angle097113(深思不解) 
    对了!