关于释放控制权的问题
请问,如何在adodb.connection执行一条需长时间运算的SQL语句时,使窗口仍然可以被拖动。 问题点数:50、回复次数:17Top
1 楼superguang(阳光的光)回复于 2002-11-20 12:23:50 得分 5
DoEvents
Top
2 楼forjie(我爱我家)回复于 2002-11-20 13:54:37 得分 0
好像不好使吧。Top
3 楼forjie(我爱我家)回复于 2002-11-20 13:56:08 得分 0
还有,我的程序太多,没法改成新开一个线程执行。Top
4 楼superguang(阳光的光)回复于 2002-11-20 14:30:32 得分 0
VB不支持多线程的啊
关注Top
5 楼cd_dragon(栋栋)回复于 2002-11-20 14:30:55 得分 5
帮你顶一下,解决了也告俺一声Top
6 楼litsnake1(litsnake)回复于 2002-11-20 15:18:53 得分 0
试试异步执行sql语句Top
7 楼cd_dragon(栋栋)回复于 2002-11-20 15:40:50 得分 0
我是过建立线程可以实现,但是很危险,而且你也不喜欢Top
8 楼forjie(我爱我家)回复于 2002-11-20 16:38:19 得分 0
to: litsnake1
怎样设置异步执行SQL语句?Top
9 楼forjie(我爱我家)回复于 2002-11-20 16:39:49 得分 0
to: cd_dragon(栋栋)
用vb做多线程确实很危险,特别是和数据库打交道,所以在有其他解决方案的前提下,不想采用多线程。Top
10 楼forjie(我爱我家)回复于 2002-11-20 16:41:06 得分 0
to : superguang(阳光的光)
vb通过调用API函数可以实现多线程,但是很危险。Top
11 楼superguang(阳光的光)回复于 2002-11-20 16:48:26 得分 0
就是啊 VB本身是不支持多线程的啊 要是用C就方便多了
关注Top
12 楼guofu007(蝈蝈)回复于 2002-11-20 16:59:09 得分 0
DoEvents,就放在程序的上面一行,Top
13 楼forjie(我爱我家)回复于 2002-11-20 17:14:00 得分 0
To: guofu007(蝈蝈)
您的方法我已经试过了,不好使,不信你可以试一试,建一个存储过程往数据表内插1千万条纪录,然后用vb调这个存储过程(execute前加doevents),肯定还和死机一样。Top
14 楼forjie(我爱我家)回复于 2002-11-20 19:15:56 得分 0
是知道呀?重赏。Top
15 楼MarGo(潇洒)回复于 2002-11-21 19:19:49 得分 10
这样一段代码|||||:
dim i as long
dim sum as long
for i=1 to 10000
sum=sum+i
doevents
IF FLAG THEN
EXIT FOR
END IF
next i
在FORM 的KEYPRESS事件中
判断按键是否为vbescape键
是设置FLAG=TRUE
这段程序是针对长时间执行操作而通过取消键退出操作
如果不可以
异步执行SQL语句,需要设置一些属性吧,
通常是两种|||||:
阻塞式和非阻塞式
阻塞式既执行完该条SQL语句后在执行其他程序
非阻塞式正好相反
可惜我曾经看过,有忘记了,抱歉
Top
16 楼junwhj(http://www.grid2000.com/cn)回复于 2002-11-21 20:48:58 得分 30
'1. 方法是异步执行该SQL语句;
'2. MSDN中异步执行的参数是错误的(adExecuteAsync,实际应为adAsyncExecute);
'3. 存储过程执行完成后,触发ExecuteCommplete事件,在此事件中断开连接。
Option Explicit
Private WithEvents mConnection As ADODB.Connection
Private Sub Command1_Click()
Set mConnection = New ADODB.Connection
mConnection.Provider = "SQLOLEDB"
mConnection.CommandTimeout = 0
mConnection.Open "Driver={SQL Server};Server=Develop;UID=SA;PWD=;Database=Test;"
MsgBox "Connected.", vbExclamation
mConnection.Execute "myproc", , adAsyncExecute '异步执行存储过程
End Sub
Private Sub mConnection_ExecuteComplete(ByVal RecordsAffected As Long, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pCommand As ADODB.Command, ByVal pRecordset As ADODB.Recordset, ByVal pConnection As ADODB.Connection)
mConnection.Close
Set mConnection = Nothing
MsgBox "OK"
End Sub
Top
17 楼forjie(我爱我家)回复于 2002-11-25 15:29:57 得分 0
to: junwhj(junwhj.myrice.com)
Thanks so much.
Top




