我在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将一个新对象分配给子表单,则父表单中的更改将被保存或丢失,即使我更改了组合框,脏也是假的。
问候
答案 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引入一个新的记录集 - 再次,它不会变脏。