将主窗体从子窗体移动到特定记录
Moving Main Form to specific record from Subfrom
我有一个主窗体和一个子窗体。主窗体绑定了一个table,主键为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
之后,似乎只有主窗体上的当前记录被克隆到记录集而不是整个 table 主窗体绑定到。为什么不克隆主窗体的整个记录集?
我的表单是使用 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 条记录
DoCmd.OpenForm "MainForm", WhereCondition:="ID1 = " & someId
它设置表单的 .Filter
属性(和 .FilterOn = True
)。
要显示不同的记录,请更改过滤器:
frm.Filter = "ID1 = " & Me.ID1
我有一个主窗体和一个子窗体。主窗体绑定了一个table,主键为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
之后,似乎只有主窗体上的当前记录被克隆到记录集而不是整个 table 主窗体绑定到。为什么不克隆主窗体的整个记录集?
我的表单是使用 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 条记录
DoCmd.OpenForm "MainForm", WhereCondition:="ID1 = " & someId
它设置表单的 .Filter
属性(和 .FilterOn = True
)。
要显示不同的记录,请更改过滤器:
frm.Filter = "ID1 = " & Me.ID1