在SubForm.Recordset更改期间,Form_AfterUpdate丢失

时间:2012-04-05 10:02:36

标签: ms-access vba subforms

我在Access中遇到SubForms问题,有些事我不明白。 我有一个带控件(组合)的Form(frm),表单包含一个Subform(subfrm)。 在debugmode中,我创建两个断点,一个在combo_AfterUpdate,另一个在frm_AfterUpdate。如果我改变组合中的数据一切似乎都很好:

停在combo_AfterUpdate> (保存表格)>停在frm_AfterUpdate

现在我将代码添加到我的combo_AfterUpdate事件处理程序,它改变了subfrm.Form.Recordset:

停在combo_AfterUpdate> (保存表格)> ...

在frm_AfterUpdate没有停止!? 有谁知道为什么?

编辑: 这里是在combo_AfterUpdate中执行的代码:

If Not IsNull(Me!childID) Then
    Dim childSubSource As QueryDef
    Set childSubSource = CurrentDb.QueryDefs("qry_parent_Detail_child_WithParam")
    childSubSource.Parameters("childID").Value = Me!childID
    Set frmChildSub.Form.Recordset = _
        childSubSource.OpenRecordset(dbOpenDynaset, dbSeeChanges)
End If

编辑: 有趣..如果我改变

Set frmChildSub.Form.Recordset = _
    childSubSource.OpenRecordset(dbOpenDynaset, dbSeeChanges)

frmChildSub.Form.Recordsource= childSubSource.SQL

事件按预期工作。我检查了父窗体的脏属性,似乎问题出在这里。如果我通过.recordset将一个新对象分配给子表单,则父表单中的更改将被保存或丢失,即使我更改了组合框,脏也是假的。

问候

1 个答案:

答案 0 :(得分:0)

实际上,这对我来说很有意义......

首先:

Set frmChildSub.Form.Recordset = _
    childSubSource.OpenRecordset(dbOpenDynaset, dbSeeChanges)

这是在表单中加载一个全新的记录集,当然它不会有任何脏记录,所以脏的proerty应该返回false。

在第二个例子中:

frmChildSub.Form.Recordsource= childSubSource.SQL

您正在告诉表单下次加载表单/数据时从哪里获取数据。 如果您执行了以下操作:

frmChildSub.Form.Recordsource= childSubSource.SQL
frmChildSub.Form.Requery

然后我会期待与第一个实例相同的行为 - 仅仅因为你再一次强迫MS Access引入一个新的记录集 - 再次,它不会变脏。