的MS Access异步查询

问题描述:

我有一个基本的SELECT查询从Access形式需要一段时间来执行发射,所以我想以异步方式运行查询,让我的用户继续使用的形式(或至少让他们更新进展情况)。的MS Access异步查询

的问题是,访问冻结被执行的代码,当应用程序,出现在用户已经坠毁 - 即使到Windows的标志是“没有响应”和捧杀的地步。显然不是很用户友好!我尝试使用MSDN here和变体方法here上列出的代码。

这两种方案似乎运行查询“异步”(代码块烧制的异步查询完成,且rs_FetchProgressrs_FetchComplete事件(或在第二溶液cn_ExecuteComplete事件),火灾和运行......但Access的界面直到查询执行完毕。调用在不同的地方RepaintDoEvents(如rs_FetchProgress事件),似乎没有任何效果仍然锁定。

我怀疑它的相关信息,但此视图SELECT编辑从是在SQL Server中,视图不会返回大量的数据,但需要大约20秒的时间来处理。

+0

您是否尝试过使用'DoEvents' – 2013-04-05 14:16:07

+0

我有一段时间没有使用过Access,但曾经有一个“传递”选项,后端将执行完整查询,包括连接和过滤由where条件。当不使用传递模式时,Access会通过线路从后端带来大量数据,并在客户端执行很多工作,并且这种行为似乎是同步的。 – Tim 2013-04-05 14:18:59

+0

我做过了,用“Repaint”在不同的地方涂上它。似乎没有任何效果。 – Kai 2013-04-05 14:19:02

当您打开窗体不要拉一个巨大的记录。将表单建立在一个查询上,当第一次加载时只会拉出几个或甚至没有记录。然后为用户提供一种方法来选择不同的合理大小的记录子集。

尽量避免,无论数据源是否是一个链接Access表或客户机 - 服务器数据库中提取巨大的记录。

+0

没有巨大的记录集合 - 查询只返回大约80条记录。它是从需要相当长的时间来处理(在更大的记录进行各种骨料) – Kai 2013-04-05 14:25:42

+0

确定一个视图中选择,我没有从你的问题。我没有遇到过这样的情况。假设你已经用尽了所有选项来优化视图,想想我会尝试用一行虚拟值打开表单。然后在稍后的事件(加载或当前)中,打开ADO记录集async和useclient。当它被完全填充时,将其分配为表单的记录集。但我不知道是否足以消除“没有回应”的问题。它可能被证明与你现在拥有的一样不合适。 – HansUp 2013-04-05 14:46:51