我有一个表单(frmDropDownEdit
),它有一个过滤表作为数据。 A"新"创建按钮以打开另一个表单(frmDropDownNew
),用户可以输入新数据。完成后,新表单将关闭,用户将返回原始表单。 frmDropDownNew
的代码正确地将信息添加到表中,然后代码刷新frmDropDownEdit
表单但不刷新。如果单击功能区中的刷新按钮,它也不会刷新。但刷新一切确实有效。
如何让我的代码刷新frmDropDownEdit
中的数据。我还在OnGotFocus
事件上放了代码me.refresh但是甚至没有运行。
这是我的源代码
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
答案 0 :(得分:0)
在我的MS Access 2010×64单用户PC上,Forms![AnyForm] 。Refresh从未在VBA中工作,无论它放在任何数据库代码中的位置都是独立的。修改数据后(通过在其中插入Stop进行验证),Form_Current()也不按预期运行。此外,在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.
'…
如上述代码注释中所述:此代码必须必须从另一个模块(“ MyOtherModule ”)运行-在我的情况下,与窗体无关的过程,在关闭从第一个窗体打开的弹出式窗体时调用,该窗体以交互方式修改数据。这些数据应在关闭弹出窗口时立即更新/刷新,以反映所有更改及其后果(例如,自动填充/删除其他数据和/或启用/禁用控件或使它们[不可见],具体取决于修改后的字段的值。