这个问题在这里已经有了答案:
Multi-threading in VBA
(8 个回答)
4年前关闭。
我知道这个标题听起来很疯狂,但这是我的情况。
在某个用户事件之后,我需要更新几个与用户当前正在做的事情“无关”的表。目前,这需要几秒钟的时间来执行并导致用户一定程度的挫败感。有没有办法在第二个进程中执行我的更新,或者在处理时不会“卡住”我的应用程序的 UI?
谢谢
最佳答案
我会解决问题的核心 - 调整数据更新查询以使其运行得更快。
话虽如此,MS Access 不支持多线程。
因此,当您对过程进行阻塞调用时,MS Access 将卡住屏幕,直到调用返回。
编辑
如果您通过慢速网络连接更新大表,DAO 并不是您最好的 friend 。您可能需要考虑切换到使用 ODBC 连接并运行优化的更新语句。
编辑 2
当您使用 ODBC 时,您必须编写 ADO 风格的代码来完成这项工作。请注意此示例代码是 OTTOMH。
dim myConn as ADODB.Connection
dim myCmd as ADODB.Command
set myConn = new ADODB.Connection
myConn.ConnectionString = "Provider=SQLOLEDB;Server=MyServerName;Initial Catalog=MyCatalogName;UID='XXX';PWD='YYY'"
myConn.Open
set myCmd = new ADODB.Command (myConn)
myCmd.SQL = "Update MyTable Set MyColumn = '" & MyDataVariable & "' Where MyPK = '" & MyPKVariable & "'"
myCmd.Execute
myCmd.close
myConn.close
关于multithreading - MS Access 中的多线程,异步处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2898953/