【问题标题】:Moving Main Form to specific record from Subfrom将主表单从子表单移动到特定记录
【发布时间】: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.RecordCountrs!ID 之后,似乎只为记录集克隆了主窗体上的当前记录,而不是主窗体绑定到的整个表。为什么不克隆主窗体的整个记录​​集?

【问题讨论】:

  • 我正要建议rs.MoveLastDebug.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


【解决方案1】:

呵呵。 :)

总而言之,如果您打开这样的表单以显示 1 条记录

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

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

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

frm.Filter = "ID1 = " & Me.ID1

【讨论】:

    【解决方案2】:

    我的表单使用DoCmd.OpenForm 方法的WhereCondition 参数打开到特定记录。

    这会导致表单的 .Filter 属性设置为该 WhereCondition 中的任何内容。

    RecordsetClone 用于过滤表单时,它会在过滤状态下被克隆,因此试图在克隆的记录集中查找任何其他记录是徒劳的。

    感谢@andre451 的 cmets 帮助我解决了这个问题。正如建议的那样,只需重新定义表单的过滤器以匹配所选子表单记录的过滤器即可:

    Private Sub cmdLoadAssess_Click()
    
        Dim frm As Form
    
        Set frm = Me.Parent
    
        frm.filter = "ID1=" & Me.ID1
    
        Set frm = Nothing
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-31
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 2021-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多