2

我在 Delphi XE 中使用 TADOConnection 对象,但这似乎是 ADO 问题,而不是 Delphi 问题:

场景:我正在尝试关闭和释放连接到 Sybase 的 TADOConnection 对象。在向 Sybase 发送长时间运行的查询后,连接正在等待来自远程 Sybase 服务器的响应 - 在此期间,用户认为响应时间过长并希望中止该进程。

问题:在等待 Sybase 响应时尝试关闭或释放 ADOConnection 对象时,我收到以下错误消息:

“异步执行时无法执行操作”,我对关闭/释放的调用失败。因此,在中止该过程时,我总是以泄漏和孤立连接告终——就我而言,这不是世界末日,但也不是可取的。

此消息对应于 ADO 错误 3711-adErrStillExecuting - 异步执行时无法执行操作。

请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/ms681549%28v=vs.85%29.aspx

问题:如何更改 ADOConnection 对象的状态,使其不再等待 Sybase 响应,这应该允许我调用 TADOConnection.close 和 TADOConnection.free。

我可以通过 Delphi TADOConnection 包装器访问 ADOConnection 本身,因此我可以使用 ADO TLB 中可用的任何内容来完成此操作。

注意 - 我没有明确指示 ADO 执行异步操作 - 我假设这是我正在运行的上下文中的默认设置(线程在 TISAPI 应用程序响应中产生)。无论如何,我认为如果 ADO 调用被阻塞,则中止将更加困难。

4

1 回答 1

3

看看这个回复

特别是 DataSet.Recordset.Cancel;部分。在关闭连接之前,您需要先取消查询。

于 2012-02-02T16:35:46.563 回答