VB执行SQL语句耗时太久导致程序假死怎么处理

VB执行SQL语句耗时太久导致程序假死怎么办?以前写程序都用DOEVENTS来解决假死的情况,可是最近发现执行SQL

VB执行SQL语句耗时太久导致程序假死怎么办?
以前写程序都用DOEVENTS来解决假死的情况,可是最近发现执行SQL语句更新ACCESS数据库的时候这方法没什么用
语句是类似这样的:
update db1 INNER JOIN db2 ON db1.ID=db2.ID SET db1.name=db2.name

其实就是22万行左右,大概就是五到十秒的时间
大家有什么好办法去解决这种假死吗?DOEVENTS没什么效果,还是死得一塌糊涂。。。毕竟程序只是做了一件事而已

[解决办法]
异步执行就不会假死了,不过执行未完时最好不要作对这个过程有影响的操作.
Private WithEvents Css As ADODB.Connection
'''''''
Css.Execute "update table1 set a='x',b='y' ", , adAsyncExecute

Private Sub css_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)
On Error GoTo EE
MsgBox "更新完毕."
Css.Close:Set Css = Nothing
Exit Sub
EE:
Set Css = Nothing
End Sub
[解决办法]

探讨
我认为还是DoEvents最好

[解决办法]
"其它问题" 可能会在异步执行过程中产生,看怎么处理了.
(建议执行异步数据处理的时候定义一个标识值,处理完毕该标志值恢复,别的操作根据这个标志值来处理)
[解决办法]
探讨

引用:
我认为还是DoEvents最好

执行这种更新操作,DoEvents没效果的,除非逐行显示然后更新。。。。。。。

把这个更新动作交给存储过程试试,应该会好很多。

[解决办法]
不管是用存储过程还是直接用SQL语句,大数据量操作都会造成假死,可以尝试以下思路:
将一次性执行分成多次执行,比如全表替换,为了较好的用户体验,可以逐行替换,然后在循环里加DoEvents配合显示一个进度条。
或者,使用VB多线程技术(如ActiveX EXE)异步执行,主线程循环中加DoEvents等待执行数据操作的线程结束的信息。
或者,使用SQL SERVER 2005以上版本支持的Service Broker,构建一个异步信息,在信息接收端执行数据操作,具体步骤可GOOGLE网站的SQL SERVER异步触发器。
[解决办法]
如果使用进程外部件,即ActiveX EXE进行耗时工作代理,就只需要设计为事件通知结构就可以了.

耗时操作完成后触发一个事件,主程序等待这个事件,当事件到来时再将虚假的进度条走到100%并维持0.2秒足够让人眼看到,再干掉进度条.

不过这要看你程序结构如何,这决定了改造工作的复杂程度.