【发布时间】:2013-04-05 14:11:45
【问题描述】:
我有一个从 Access 表单触发的基本 SELECT 查询,需要一段时间才能执行,所以我想异步运行查询并允许我的用户继续使用表单(或者至少让他们在进展)。
问题在于,在执行代码时,Access 会冻结应用程序,在用户看来已经崩溃 - 甚至到 Windows 将其标记为“无响应”并提供终止它的地步。显然不是很人性化!我尝试使用 MSDN 上列出的代码here 和变体方法here。
这两种解决方案似乎都“异步”运行查询(触发异步查询的代码块完成,rs_FetchProgress 和rs_FetchComplete 事件(或第二个解决方案中的cn_ExecuteComplete 事件)触发并运行。 ..但是在查询执行完成之前Access的界面仍然锁定。在各个地方调用Repaint和DoEvents(例如rs_FetchProgress事件)似乎没有任何效果。
我怀疑它的相关信息,但 SELECTed 的视图位于 SQL Server 中,该视图不会返回大量数据,但处理大约需要 20 秒。
【问题讨论】:
-
您尝试使用
DoEvents -
我有一段时间没有使用 Access,但曾经有一个“传递”选项,后端将执行完整的查询,包括连接和按 where 过滤-健康)状况。当不使用直通模式时,Access 通过网络从后端带来大量数据,并在客户端执行大量工作,并且这种行为似乎是同步的。
-
我做到了,用
Repaint在各个地方进行了宣传。好像没什么效果。 -
VBA 是单线程的,因此无论 ADO 提供什么异步性,您的 Access 应用程序能做什么都是值得怀疑的。也就是说,看看这个:support.microsoft.com/kb/194960
-
@Tim 尝试使用直通查询,但不幸的是无济于事
标签: sql ms-access asynchronous vba ms-access-2010