我知道这个标题听起来很疯狂,但这是我的情况。
在某个用户事件之后,我需要更新几个与用户当前正在做的“无关”的表。目前,这需要几秒钟的时间来执行并导致用户一定程度的挫败感。有没有办法在第二个过程中执行我的更新,或者在处理过程中没有“冻结”我的应用程序的UI?
由于
答案 0 :(得分:3)
我会解决问题的核心 - 调整数据更新查询以更快地运行。
话虽如此,MS Access不支持多线程。
因此,当您对某个过程进行阻止调用时,MS Access将冻结该屏幕直到该调用返回。
修改强>
如果您通过慢速网络连接更新大型表,DAO并不是您最好的朋友。您可能需要考虑切换到使用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
答案 1 :(得分:2)
客户是否需要确认信息已更新?如果没有,那么您可以打开一个shell例程来处理更新。即。
Shell("'C:\Reports\SomeOtherAccessDB.MDB' /x 'SomeMacro'", 1)
默认情况下,这是异步的,因此所有用户都会在任务栏上看到第二个.mdb,运行几秒钟。
哦,并且感谢Kudos真正关心用户的时间!
答案 2 :(得分:-1)
在更新语句之前使用docmd.hourglass true并在更改curasor之后使用docmd.hourglass false。另外一定要在你的错误处理例程中输入docmd.hourglass false。
不是最有效的解决方案,但它可能对用户期望水平有帮助。