1

我在 Access 中遇到了 SubForms 的问题,有一些我不明白的地方。我有一个带有控件(组合)的表单(frm),并且表单包含一个子表单(subfrm)。在调试模式下,我创建了两个断点,一个在 combo_AfterUpdate,另一个在 frm_AfterUpdate。如果我更改组合中的数据,一切似乎都很好:

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

现在我将代码添加到更改 subfrm.Form.Recordset 的 combo_AfterUpdate 事件处理程序中:

停在 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 将新对象分配给子表单,则父表单中的更改要么被保存要么丢失,无论如何,即使我更改了组合框,脏也是假的。

问候

4

1 回答 1

0

其实对我来说有点意思...

第一个例子:

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

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

在第二种情况下:

frmChildSub.Form.Recordsource= childSubSource.SQL

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

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

然后我会期望与第一个实例相同的行为 - 仅仅是因为您再次强制 MS Access 引入一个新的记录集 - 这又不会是脏的。

于 2012-05-15T21:12:51.227 回答