有如下语句:
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怎么这么差劲啊!
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怎么这么差劲啊!
建议使用adocommand
//建议你把Ado的基本知识首先要掌握好了,再开始做程序procedure TForm1.Button1Click(Sender: TObject);
begin
Adoquery1.Connection.Execute:='UPDATE myView SET xm = ''aaa'' WHERE iTime=(select min(iTime) from myView)';
end;
ADOQuery1.Post; //Post 当然出错了,只有在 Insert, Edit状态才能Post!
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;
就是可以的了
不需要的 post的 ExecSQL的时候就可以的了
建议你把显示数据集和更新的语句用两个不同的AdoQuery实现,如果adoquery1用于显示数据集,adoquery2用于更新数据表,假设AdoQuery1先行打开了,那么在调用AdoQuery2更新数据表后再adoquery1.refresh就可以了
Access Violation:
-----------------------------------
To:angle097113(深思不解)
对了!