【问题标题】:Access VBA unable to refresh a form访问 VBA 无法刷新表单
【发布时间】:2017-11-03 21:21:28
【问题描述】:

我有一个表单 (frmDropDownEdit),其中有一个过滤表作为数据。创建一个“新建”按钮,打开另一个表单 (frmDropDownNew),用户可以输入新数据。完成后,新表单关闭,用户返回原始表单。 frmDropDownNew 的代码正确地将信息添加到表中,然后代码刷新了 frmDropDownEdit 表单但它不刷新。如果我单击功能区中的刷新按钮,它也不会刷新。但刷新一切确实有效。

如何让我的代码刷新frmDropDownEdit 中的数据。我还将代码 me.refresh 放在 OnGotFocus 事件上,但它甚至没有运行。

这是我的源代码

Private Sub Command5_Click()
'Add Button

Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("tblDropDown")
rst.AddNew

rst!DdCategory = Me.txtCategory.Value
rst!DdDescription = UCase(Me.txtDescription.Value)

rst.Update
rst.Close

DoCmd.Close
Forms!frmDropDownEdit.Refresh

End Sub

【问题讨论】:

  • .Refresh 更改为 .Requery
  • 是的,这行得通。谢谢

标签: vba ms-access refresh


【解决方案1】:

在我的 MS Access 2010 ×64 单用户 PC 上,Forms![AnyForm] .Refresh 在 VBA 中从未工作过,独立于它放置在任何数据库代码中的位置。 Form_Current() 在修改数据后也不会运行(通过在其中放置 Stop 来验证)。此外,在 vba 代码完成之前,具有修改数据的记录既不会被标记为脏也不会被刷新。当数据被修改时应该立即运行的程序不会运行,即使放在修改字段的事件中也是如此。

因此,必须使用解决方法。许多人建议使用 .Requery 而不是 .Refresh 然后通过 vba 代码返回到所需的记录,但这需要一个带有主键的字段。

我对没有主键的表的解决方案如下:

'…
' ESSENTIAL: this code must be run from ANOTHER module !
' (it runs without error in MyForm's own code [eg. in Form_Activate(),
'  but then MyForm is NOT immediately refreshed as desired,)
'  one still has to repeat these steps by hand afterwards…
DoCmd.GoToRecord acForm, "MyForm", acNext
DoCmd.GoToRecord acForm, "MyForm", acPrevious
' NB: Forms![MyForm].Refresh doesn't work
' at this place in "MyOtherModule" either.
'…

如上面代码 cmets 中所述:此代码 必须另一个 模块 ("MyOtherModule") 运行 - 在我的例子中,一个在关闭从第一个表单打开的弹出式表单时调用的独立于表单的过程,它以交互方式修改数据。这些数据应在关闭弹出表单时立即更新/刷新,以反映所有更改及其后果(例如,自动填写/删除其他数据和/或启用/禁用控件或使它们[不]可见,具体取决于修改后的字段值)。

【讨论】:

    猜你喜欢
    • 2014-12-03
    • 2020-10-15
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多