取消后重用 ADOQuery

Reuse ADOQuery after cancellation

我在 Delphi 2010 应用程序中使用异步 ADO 查询。用户可以请求取消查询,否则查询可能会因错误而失败。这是我用来取消查询的代码:

if not Assigned(myADOQuery.Recordset) then exit;
if stFetching in myADOQuery.RecordsetState then begin
  fCommand := _Command(myADOQuery.Recordset.ActiveCommand);
  fCommand.Cancel;
  if Assigned(myADOQuery.Recordset) then myADOQuery.Recordset.Cancel;
end;
if Assigned(myADOQuery.Recordset) then myADOQuery.Recordset.Cancel;
StatusBar1.Panels[2].Text := '';
//ShowMessage('Query Cancelled');
myADOQuery.Close;

我正在使用 ADOConnection ExecuteComplete 向用户显示取消(或其他错误):

if EventStatus = esErrorsOccured then ShowMessage(Error.Description);

我现在希望能够在修改后重新使用查询,但是当我重新运行它时,我得到了相同的错误消息。有什么方法可以重置查询(包括 SQL.Text)并再次 运行ning 吗?

尼姆斯

认为您的问题可能与您查询的连接对象有关。

AdoConnection 有一个 Errors 集合,它记录了发生的每个 ADO 错误的详细信息。 IIrc,此集合随着使用 AdoConnection 的对象遇到执行错误而累积,直到您在 Errors 接口上调用 Clear。可能是取消查询执行导致下次执行时出错。

因此,在尝试重新使用 AdoQuery 之前尝试以下操作:

myAdoQuery.Connection.Errors.Clear;

让我们知道您的进展情况。

此外,如果我是你,我会在尝试重新打开 AdoQuery 的 RecordSet 之前测试它是否为 NIL,并在你的取消例程结束时明确地将其设置为 NIL。以防万一...