我有一个包含子表单的主表单。主窗体绑定到一个表,该表的主键为ID1
,外键为ID2
。
主要表单/子表单关系在ID2
上设置,因此主表单将一次显示1条记录,然后子表单将显示与当前ID2
匹配的所有相关记录记录在主表格上。
我正在尝试在子窗体记录中使用命令按钮,以便我可以使用ID1
字段将主窗体移动到子窗体中的特定记录:
Private Sub cmdLoadAssess_Click()
Dim rs As DAO.Recordset
Dim frm As Form
Set frm = Me.Parent
Set rs = frm.RecordsetClone
rs.FindFirst "ID1=" & Me.ID1
If _
Not rs.NoMatch _
Then
Debug.Print "Match found for " & Me.ID1
frm.Bookmark = rs.Bookmark
Else
Debug.Print "No match found for " & Me.ID1
End If
End Sub
不幸的是,这似乎只能在ID1
找到主要表单中当前记录的匹配(这是没有意义的,因为主表单已经存在!)
我知道这些记录存在(它们就在子表单中),而那些Debug.Print
行告诉我ID1
正从子表单传递。我在这里缺少什么?
修改
在执行rs.MoveLast
然后检查克隆记录集的rs.RecordCount
和rs!ID
之后,似乎只记录了主表单上的当前记录,而不是整个表格。主要形式必然。为什么不克隆主窗体的整个记录集?
答案 0 :(得分:0)
我的表单使用DoCmd.OpenForm
方法的 WhereCondition 参数打开了特定记录。
这会导致表单的.Filter
属性设置为 WhereCondition 中放置的内容。
当在过滤后的表单上使用RecordsetClone
时,它会以过滤后的状态进行克隆,因此尝试查找该克隆记录集中的任何其他记录都是徒劳的。
感谢@ andre451的评论帮助我解决了这个问题。正如所建议的那样,只需重新定义表单的过滤器以匹配所选子表单记录的过滤器就可以了:
Private Sub cmdLoadAssess_Click()
Dim frm As Form
Set frm = Me.Parent
frm.filter = "ID1=" & Me.ID1
Set frm = Nothing
End Sub
答案 1 :(得分:0)
嘿。 :)
总而言之,如果你打开一个这样的表格来显示1条记录
DoCmd.OpenForm "MainForm", WhereCondition:="ID1 = " & someId
它设置表单的.Filter
属性(和.FilterOn = True
)。
要显示其他记录,请更改过滤器:
frm.Filter = "ID1 = " & Me.ID1