更改数据库数据或重新查询后访问 2007 VBA 列表框滞后

Posted

技术标签:

【中文标题】更改数据库数据或重新查询后访问 2007 VBA 列表框滞后【英文标题】:Access 2007 VBA Listbox lag after changing DB data or Requery 【发布时间】:2011-09-07 20:17:03 【问题描述】:

我最近遇到了一个非常烦人的问题。

我的列表框没有立即更新。例如,在我的主窗体“A”上有一个带有 sql 语句的列表框(简单...返回 5-20 行)。我在下面有一个编辑按钮,单击该按钮会打开一个新表单以更改数据。该表单提交一个更新查询,然后调用一个全局函数,该函数需要所有相关的列表框(表单 A 上的列表框)。唯一的问题是列表框没有改变,似乎挂起/滞后。如果我选择列表框并连续按 f5,几秒钟后它将正确随机刷新。

有人知道问题出在哪里吗?

我已经对此进行了两天的故障排除,并且知道这不是网络问题,因为它也发生在本地,使用记录集并循环它以手动设置列表框值工作得很快,但由于某种原因,我的应用程序中的所有列表框都是这样做。

这是我意外更改的设置,或者如果您定义了许多关系,是否会发生这种情况(我最近添加了另一个表)?

编辑: 忘了说,数据库在共享驱动器上,只有 2MB,最近才开始这样做。

【问题讨论】:

仅返回 5-20 行的查询,可能需要 long 时间才能返回,具体取决于查询的数据。执行速度与返回的行数不成正比。你有没有跟着调试?你能看到挂断吗? 我已经在调试中,代码运行良好,没有返回错误,列表框直到几秒钟后才更新 【参考方案1】:

我最终发现了问题,希望这对将来的人有所帮助。

这与使用有关:

CurrentDB.Execute

此方法在后台同步运行,因此列表框在 sql UPDATE/INSERT/DELETE 完成之前被刷新。

为了解决这个问题,我改为使用:

Docmd.RunSQL

这已经解决了问题,但是我注意到这个方法只适用于 Microsoft Access 数据库。

【讨论】:

以上是关于更改数据库数据或重新查询后访问 2007 VBA 列表框滞后的主要内容,如果未能解决你的问题,请参考以下文章

通过弹出子表单 (2) 添加新子表单 (1) 记录后重新查询子表单 (1) - Access 2007

访问 2007 VBA DoCmd.Close 不起作用

访问每个公司的 2007 VBA 报告电子邮件

SQL语句VBA代码Access 2007结束后发现的字符

VBA访问从级联列表框传递和编辑记录并重新查询列表框

使用 ODBC 链接到 MySql 时,MS Access 表单不刷新