to: cd_dragon(栋栋) 用vb做多线程确实很危险,特别是和数据库打交道,所以在有其他解决方案的前提下,不想采用多线程。
to : superguang(阳光的光) vb通过调用API函数可以实现多线程,但是很危险。
就是啊 VB本身是不支持多线程的啊 要是用C就方便多了关注
DoEvents,就放在程序的上面一行,
To: guofu007(蝈蝈) 您的方法我已经试过了,不好使,不信你可以试一试,建一个存储过程往数据表内插1千万条纪录,然后用vb调这个存储过程(execute前加doevents),肯定还和死机一样。
这样一段代码|||||: 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语句后在执行其他程序 非阻塞式正好相反 可惜我曾经看过,有忘记了,抱歉
'1. 方法是异步执行该SQL语句; '2. MSDN中异步执行的参数是错误的(adExecuteAsync,实际应为adAsyncExecute); '3. 存储过程执行完成后,触发ExecuteCommplete事件,在此事件中断开连接。Option ExplicitPrivate WithEvents mConnection As ADODB.ConnectionPrivate 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 SubPrivate 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
用vb做多线程确实很危险,特别是和数据库打交道,所以在有其他解决方案的前提下,不想采用多线程。
vb通过调用API函数可以实现多线程,但是很危险。
您的方法我已经试过了,不好使,不信你可以试一试,建一个存储过程往数据表内插1千万条纪录,然后用vb调这个存储过程(execute前加doevents),肯定还和死机一样。
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语句后在执行其他程序
非阻塞式正好相反
可惜我曾经看过,有忘记了,抱歉
'2. MSDN中异步执行的参数是错误的(adExecuteAsync,实际应为adAsyncExecute);
'3. 存储过程执行完成后,触发ExecuteCommplete事件,在此事件中断开连接。Option ExplicitPrivate WithEvents mConnection As ADODB.ConnectionPrivate 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 SubPrivate 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
Thanks so much.