把代码变成: AdoQuery1.Open; AdoQuery1.First; While not AdoQuery1.Eof do begin AdoQuery1.Next; end; AdoQuery1.First;//关键在加多这一句。 AdoQuery1.close;
下面这段代码我试过在EXE里是不会出错的: with ADOQuery1 do begin try Recordset.Close; Close; except Close; end; SQL.Clear; SQL.Add('......'); ADOQuery1.Prepared; Open; end;
下面这段代码我试过也是不会出错的 with ADOQuery1 do begin Close; SQL.Clear; SQL.Add('select * from '+Edit2.Text+' where '+Edit3.Text+' = '''+Edit1.text+''''); ADOQuery1.Prepared; Open; if RecordCount = 0 then Recordset.Close; end;不过在窗口关闭时最好是关闭ADOQuery1。 procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin ADOQuery1.Close; end;
but数据库是一个空数据库;open 或 close 都会产生bof or eof 异常;
实际上我知道tAdoQuery.recordset.close 即使在bof,eof 也不会产生异常;
but 我已使用tAdoQuery很多;修改太浪费time;早知道我直接使用adoInt
单元的_recordset,_recordSet15,_command......或者直接导入ado类型库 ;
我觉得com接口好用;而且这是一个dcom服务器程序;可视化设计并未带来很多好处。
我认为这是delphi 的一个失败ado封装;
希望再给我提示;和我交流 。
AdoQuery1.Open;
AdoQuery1.First;
While not AdoQuery1.Eof do
begin
AdoQuery1.Next;
end;
AdoQuery1.First;//关键在加多这一句。
AdoQuery1.close;
with ADOQuery1 do
begin
try
Recordset.Close;
Close;
except
Close;
end;
SQL.Clear;
SQL.Add('......');
ADOQuery1.Prepared;
Open;
end;
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from '+Edit2.Text+' where '+Edit3.Text+' = '''+Edit1.text+'''');
ADOQuery1.Prepared;
Open;
if RecordCount = 0 then
Recordset.Close;
end;不过在窗口关闭时最好是关闭ADOQuery1。
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ADOQuery1.Close;
end;