【问题标题】:Filter on Subdatasheet过滤子数据表
【发布时间】:2011-12-09 19:47:18
【问题描述】:

在 Access 2003 中,我的表单带有一个数据表和一个嵌入的子数据表。我想将过滤器应用于主数据表和子数据表。首先,我为主数据表strWhere 构建一个过滤器字符串,为子数据表sdsWhere 构建一个过滤器字符串。接下来,从主数据表的 From 对象中,我设置了.filter=strWhere。然后,我在子数据表的 Form 对象上设置了一个过滤器。基本上:

With Me.Controls(dataSheetName).Form
                .Filter = strWhere
                .FilterOn = True
     With .Controls(subsheetname).Form
                .Filter = sdsWhere
                .FilterOn = True
     End with
End with

问题是子数据表只针对主数据表的第一条记录进行过滤。查看子数据表的RecordSet,它只包含主数据表中第一条记录的子记录。我在任何地方都找不到其他记录。

我知道应该可以过滤所有子数据表记录,因为从 Access 界面,将光标放在所需的值上,然后选择 Records>>Filter by Selection 具有所需的效果。 (除了主窗体中的记录有空的子数据表显示,我希望它们不显示)

【问题讨论】:

    标签: ms-access vba


    【解决方案1】:

    使用查询。查询连接主数据集和子数据集。过滤查询。我真的没有看到任何其他有效的方法。

    【讨论】:

    • 如果我对主 (M) 和子 (S) 数据表中显示的查询进行连接,我将得到 M x S 行。我不确定如何以相同的方式显示它们,S 中的记录会扩展。
    【解决方案2】:

    我是个白痴 - 想通了,当然只是移动子数据表的 Recodset 位置,然后应用过滤器直到 eof。但是我们需要先转到第一条记录,否则它会错过用户当前定位的记录之前的记录。并确保 subdatasheetexpanded 为 true。

    Dim mainDS As Form, subDS As Form
    Set mainDS = Me.Controls(dataSheetName).Form
    
    If mainDS.SubdatasheetExpanded = False Then
        mainDS.SubdatasheetExpanded = True
    End If
    
    mainDS.Recordset.MoveFirst
    Do While Not mainDS.Recordset.EOF
        Set subDS = mainDS.Controls(sdsheet).Form
        subDS.Filter = sdsWhere
        subDS.FilterOn = True
        mainDS.Recordset.MoveNext
    Loop
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-15
      • 2019-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-07
      相关资源
      最近更新 更多