关闭 Access 表单并使用堆栈中的下一个表单

问题描述

我有一个家族史数据库。我偶尔需要“即时”将父亲或母亲添加到记录中。我不想关闭数据库添加一条记录,然后再次打开它。因此,我添加一个按钮 btnQuickAdd,它打开一个小表单 (frmQuickAdd) 以添加父亲/母亲的姓名、出生日期和性别。 frmQuickAdd 有一个“保存”按钮,它关闭 frmQuickAdd 然后使用代码重新查询主表单 DoCmd.Close acForm,"frmQuickAdd",acSaveYes 我再问 但是,使用 me.requery 只会导致错误 2467 - 对象未打开或不存在。主要形式显然仍然是开放的。请问我做错了什么?

解决方法

实际上,您正在尝试重新查询 frmQuickAdd

我认为您的 frmQuickAdd 是通过主窗体上的按钮加载的。如果是这种情况,则 .Requery 需要出现在加载表单的下一行。

Private Sub btnQuickAdd_Click()
    
    'open form
    DoCmd.OpenForm "frmQuickAdd",acNormal,acFormPropertySettings,acDialog
    
    'requery
    Me.Requery
    
End Sub

此外,您可以使用表单的 Name 属性在关闭时避免使用硬编码的表单名称:

DoCmd.Close acForm,Me.Name,acSaveYes

编辑

当编辑表单加载时,上述代码段将始终重新查询主表单。如果不需要这种行为,您可以在单击保存按钮时使用表单名称重新查询主表单。

DoCmd.Close acForm,acSaveYes
Forms.MainForm.Requery

请注意,必须加载 MainForm,否则会出错。