各位老大,相见恨晚哪!-- 关于中断查询的问题(100分)

L

liusa

Unregistered / Unconfirmed
GUEST, unregistred user!
Query.Open时出现SQL沙漏,应用如同死进程,如何可以让用户终止查询.
 
看一下源代码!!
 
那是异步执行的。
一定是你的sql或数据库设计有问题。
 
这类情况一般是执行了一个很耗时的SQL,例如在几十万条数据里进行字符串
的模糊匹配,g622兄,你能否讲的细致一些,我执行查询使用类似下述语句:

... ...
Query.SQL.Text:=
'select * from table1 '
+'where a like ''%高手%'' ';
Query.Open; //执行到该句时应用如同死掉了,因为执行这个SQL需要时间,
//但很长一段时间后会执行下去
... ...

我如何做可以在执行上一句的过程中,将此SQL终止呢?请高手们多多帮忙
 
我也没有明确的办法,只能提个建议:
1)优化查询,加索引(可能你加过了),只返回你要的字段
2)有没有个类似id的字段,如果有并且是数值型的,根据这个字段把查询分成
若干个子查询,如根据id的值范围,第一个sql查前10000,第二个查10001-20000
然后加入一个进度条来显示进度,如果用户曾经取消,就让某个标志为真,然后
在多个查询的间隙决定是否继续下面的子查询。
3)注意如果是桌面的数据库,要先写有关id字段的条件,然后在模糊匹配
4)向hubdog请教看他在http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=151755
的回答。
 
呵呵,别向我请教,那东西只对paradox有用,对sqlserver好象没用,
另外,abortquery好象也不好使
 
1.优化查询;
2.用线程,一个查一个接受用户响应
 
like ''%高手%'' 这样的条件用索引也没用的了。
还是用个线程,实在等不了了就把那线程杀掉。
服务器可能还会忙乎一下,不过它发现上当,客户端不在了,就会停了
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
回复
0
查看
1K
天地弦
顶部