怎么中止一个异步查询?(100分)

  • 主题发起人 主题发起人 bugcool
  • 开始时间 开始时间
B

bugcool

Unregistered / Unconfirmed
GUEST, unregistred user!
我用ADOCONNECTION+ADODATASET做的一个异步查询,如果时间很长,我就想中止他
这是我用的方法:adodatasetq.recordset.cancel,所÷,但是不行,实际上数据库
还是在传数据。数据库:SQL SERVER.怎么办?
我查了一下联机帮助,里面说ODBC有个函数CANCELSQL可以中止一个查询,但我不知道
怎么用。
 
我听说过一个很绝的办法,
Computer.Reset
[:)]
 
用一个变量标识
在ADO的ONFetchProgress里进行DATASET。CANCLE。

这个问题以前问过了。我原来也不知道。
 
to forss:
你能不能把这段代码贴出来啊,我还是不明白你说的。
 
全局变量fIsCancel: Boolean;
onFetrchprogress事件处理函数里面加上: if fIsCancel then DataSet.Cancel
什么时侯你想中止,就把fIsCancel设为True.
呵呵,我也没用过,forss是不是说的这个意思
 
two说得对
 
DataSet.Cancel方法不对,这个方法是放弃更新啊,不是中止一个查询。
 
你设个timeout就不行了???
 
看看话题305315,没有什么通用的方法。我想到的一方法就是把查询放
到一个线程中执行,adonnection 和 adodataset都在这个线程中创建。
需要中断查询的时候就野蛮的调用TerminateThread强行中止线程.
 
to xeen:
你这个办法有人也提到过,但是其实这样中止的是一个线程,而查询实际上
还在运行。
SQL SERVER的查询分析器就有这样的功能,不知他是怎么做的。
 
查询还在服务器上运行,不过服务器发现客户端没了也就不干了,客户端也
感觉不到。
 
用线程是不行的。我老早就试过了。。线程中断后QRY仍然在执行。。
看看SERVER的硬盘就知道了。。

要先把ADOC的CONNECTOPTIONS设成coAsyncConnect
就用DATASET。CANCEL。。。。
用一个线程QUERY。但是,必须在FetchProgress里中断查询
 
接受答案了.
 
后退
顶部