将主窗体从子窗体移动到特定记录

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.RecordCountrs!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