我有一个带有子表单的主表单 . 主窗体绑定到一个表,该表的主键为 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
正在从子表单传递 . 我在这里错过了什么?
Edit: 在执行 rs.MoveLast
然后检查克隆记录集的 rs.RecordCount
和 rs!ID
之后,似乎只为主记录集克隆了主表单上的当前记录,而不是主表单绑定的整个表 . 为什么不克隆主窗体的整个记录集?
2 回答
嘿 . :)
总而言之,如果你打开一个这样的表格来显示1条记录
它设置表单的
.Filter
属性(和.FilterOn = True
) .要显示不同的记录,请更改过滤器:
我的表单使用
DoCmd.OpenForm
方法的WhereCondition参数打开到特定记录 .这会导致窗体的
.Filter
属性设置为WhereCondition中放置的内容 .当在过滤的表单上使用
RecordsetClone
时,它将被克隆到其过滤状态,因此尝试查找该克隆记录集中的任何其他记录都是徒劳的 .感谢@ andre451的评论帮助我解决了这个问题 . 正如所建议的那样,只需重新定义表单的过滤器以匹配所选子表单记录的过滤器就可以了: