尝试从Access表单中删除当前记录时,为什么会出现运行时错误3021(无当前记录)?

时间:2017-09-08 13:28:57

标签: ms-access access-vba

我有以下VBA代码附加到'取消'的点击事件。我主表单上的按钮。目的是删除< entity_subform'中的所有记录。在此之前删除主表格中的相关记录。

但是,虽然子窗体中的实体已成功删除,但由于运行时错误3021(无当前记录),主窗体记录不会被删除。

我需要做些什么来再次有效地重置主窗体上的焦点才能使其工作?在我添加代码以从实体子表单中删除记录之前,命令sol.(char(a(1))) = 1 % sol.a1 = 1; 对于主表单工作正常。我已经尝试在下面的acCmdDeleteRecord之前插入行Me.SetFocus,但这没有任何区别。

acCmdDeleteRecord

编辑:现在我已经能够通过使用以下代码来实现我正在寻找的功能:

Private Sub Cancel_New_Record_Click()
    If MsgBox("Are you sure you want to delete this record?", vbYesNo) = vbYes Then

        'first we need to delete all the entities in the subform, to prevent orphans being left behind
        entities_subform.SetFocus

        Dim entityRecSet As Recordset
        Set entityRecSet = entities_subform.Form.Recordset.Clone()
        entityRecSet.Delete
        entityRecSet.Close
        Set entityRecSet = Nothing

        'now we can delete the check record
        DoCmd.RunCommand acCmdDeleteRecord
        DoCmd.Close acForm, "checks"
        DoCmd.OpenForm "menu"
    End If

End Sub

1 个答案:

答案 0 :(得分:1)

首先,这只会创建您的记录的克隆:

Set entityRecSet = entities_subform.Form.Recordset.Clone()

然后,这只会删除克隆的第一条记录并关闭克隆:

entityRecSet.Delete
entityRecSet.Close

因此,您的记录保持不变。

您可以而且应该做的是在两个表之间设置参照完整性。然后,删除主记录时,将自动删除所有子记录。