【发布时间】:2015-12-11 21:29:34
【问题描述】:
我有一个主窗体和一个子窗体。主窗体绑定一个表,主键为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 之后,似乎只为记录集克隆了主窗体上的当前记录,而不是主窗体绑定到的整个表。为什么不克隆主窗体的整个记录集?
【问题讨论】:
-
我正要建议
rs.MoveLast和Debug.Print rs.RecordCount- 你确定主窗体有完整的表格作为记录源,而不仅仅是一条记录吗?可以在主窗体中手动导航吗? -
我想我已经发现了我的问题(与您刚才问的问题相同),但我需要对其进行测试。打开表单时,它会打开特定记录,并且似乎使用了表单的
.Filter属性。因此,在我尝试在其中查找其他记录之前,记录集可能基本上已经被过滤了。 -
在这种情况下,您应该使用
frm.Filter = "ID1=" & Me.ID1而不是使用书签。 -
您的意思是只更改
frm.Filter而没有别的,即不要使用RecordsetClone?你不能在答案中扩展它吗?我只问是因为仅设置frm.Filter似乎不会将表单移动到记录中。 -
没关系,现在好像没事了..谢谢!
标签: ms-access vba ms-access-2007 ms-access-2010 ms-access-2013