首页 > 解决方案 > 访问 Form.Requery 工作不一致

问题描述

我遇到了访问表单重新查询方法工作不一致的问题。

我有两种形式。第一种形式是Data_Entry用户的形式。第二种形式是Dashboard对第一种形式的重要数据进行排列和格式化的显示。在Data_Entry表单上,​​用户可以按下一个按钮来在Data_EntryDashboard表单上强制执行 Requery 事件。这是非常简单的代码:

Private Sub Button_Update_Click()
    Form_Data_Entry.Requery
    Form_Dashboard.Requery
End Sub

Dashboard表单中,我还有一个每 60 秒触发一次的计时器事件:

Private Sub Form_Timer()
    Me.Requery
End Sub

大约 50% 的时间这些都按预期工作。大约 45% 的时间,Data_Entry表单上的更新按钮会重新查询自身,但不会对仪表板执行任何操作;但是,单击Dashboard并按 F5 将强制重新查询,计时器事件也是如此。另外 5% 的时间,无论是更新按钮、F5 还是计时器都不会重新查询Dashboard.

100% 的时间,更新按钮将重新查询Data_Entry表单而不会出现问题。

如果我关闭Dashboard并重新打开它,它将再次按预期工作......一段时间。有时它会持续几个小时而没有问题,有时只有 15 分钟。

我不知道是什么导致了这种不一致的行为。这似乎不是 VBA 问题。这是 Access 源代码本身的某种更深层次的问题,还是我在其他地方遗漏了一些模糊的东西?

标签: formsms-accessvba

解决方案


我设法解决了这个问题,但我仍然不知道是什么原因造成的。我发现从 VBA 代码或 Access 宏打开表单仍然会出现相同的问题,但是关闭表单并重新打开它会使问题在会话期间消失。因此,我将打开显示窗体的按钮代码修改为先打开窗体,关闭窗体,然后重新打开。问题解决了。

Private Sub Button_DisplayName_Click()
    DoCmd.OpenForm “FORM_NAME”
    DoCmd.Close acForm, “FORM_NAME”, acSaveNo
    DoCmd.OpenForm “FORM_NAME”
End Sub

推荐阅读