首页 文章

将主表单从Subfrom移动到特定记录

提问于
浏览
0

我有一个带有子表单的主表单 . 主窗体绑定到一个表,该表的主键为 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.RecordCountrs!ID 之后,似乎只为主记录集克隆了主表单上的当前记录,而不是主表单绑定的整个表 . 为什么不克隆主窗体的整个记录集?

2 回答

  • 0

    嘿 . :)

    总而言之,如果你打开一个这样的表格来显示1条记录

    DoCmd.OpenForm "MainForm", WhereCondition:="ID1 = " & someId
    

    它设置表单的 .Filter 属性(和 .FilterOn = True ) .

    要显示不同的记录,请更改过滤器:

    frm.Filter = "ID1 = " & Me.ID1
    
  • 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
    

相关问题