我用的是TADOConnection,TADOQuery控件,数据库是SQL Server,其中TADOQuery执行的是一个存储过程,时间有时候比较长,希望用户能够中断正在执行的存储过程,不知道怎么做,请教各位
解决方案 »
- 请教Thread的释放问题
- 关于登陆窗口
- 请问高手FastReport与cxgrid冲突问题
- TAdoDataSet过滤(Filter)和定位(Locate)时不能区分大小写的问题(在线等待帮助……)
- 高人指点——如何调用驱动程序(.ll)--在线等啊。
- pop可以收邮件,但是STMP不能收邮件这是怎么回事?
- delphi8做ASP.NET的控件里没有treeview,哭死!
- 关于双击 DBGrid 的问题!
- 我需要对一个字段排序后进行修改,当用order by a1语句后,就无法修改了,怎么办呢?
- 有人知道吗?:DELPHI的浏览器组件为什么不能用,滚动表单里按回车不换行。是本身的毛病吗?
- 如何定制打印报表时的打印行数?
- 我写的文本编辑器,欢迎大家捧场试用
2.在存储过程中不断检测继续运行指示表的指示字段,发现此字段指示出停止工作,则回滚事务
(需要的话).
不知道是不是我没理解你的意思?
希望再帮忙想想,不甚感谢!
WHILE 没有按CANCER
THEN 继续你的存储过程
ELSE
XXX
HELP...
select spid from MASTER..sysprocesses where dbid=db_id('YDSQ')
如果结果大于0则有进程连到YDSQ
kill 这个spid(smallint类型的),也就是把数据库终止了.
还有没有更好的办法,最好是保持连接,只是中止指定的TADOQUERY
不管怎样,先谢了
楼主可以试试.
select * from AnotExitTable
也就是说查询一个不存在的表.这样就是一个致命错误,存储过程肯定会中止.
例如我的存储过程中只有一个查询语句:
BEGIN
SELECT A.FIELD1,A.FIELD2,B.FIELD2,C.FIELD2
INTO TABLE3
FROM DB2.dbo.TABLE1 A
LEFT JOIN DB2.dbo.TABLE2 B
ON A.FIELD1=B.FIELD1
LEFT JOIN DB2.dbo.TABLE3 C
ON A.FIELD1=C.FIELD1
END
当数据量较大时,执行时间就很长,所以需要有中止功能。
按照你说的做法,只能在另外一个存储过程让它出错退出,但这样能让上面的存储过程退出吗?如果真能退出,可能该连接全部都会断开,也不是我想要的。
麻烦再想想...
其他高手们举举手吧...
按A.FIELD1,A.FIELD2,B.FIELD2,C.FIELD2 这几个字段排序.
非常感谢您的热情帮助!
排序只是优化查询,提高效率,但有时候总是有限的。
而现在我的实际情况是源表数据库不是我们的数据库,而是第三方数据库,不是我能控制得了的。
又说回来,就算是我能控制得了的,也有数据量超大,而用户不想等待的时候。
总之,这中止查询或者中止存储过程的执行都是较必要的。
就是说你的存储过程必须使用某个事务!在末尾处没有对事务究竟是回滚还是提交事务的代码!而在程序里面用按钮点击的时候用连接控件执行T-SQL语句进行回滚或者提交事务!
程序中断开数据库的连接不是我想要的,因为该连接还有其它地方要用,如果断开,其它地方还要重新连接,有可能出现意想不到的问题。
昨天我试了断开该控件的连接,但会出错,而且存储过程也没有中断。
我还是没什么办法解决这个问题。
...