Access VBA获取当前的自动筛选设置



有没有办法找出对查询应用了什么自动筛选?

我不能使用表单,因为数据库结构正在改变(我对此无能为力)。因此,遗憾的是,使用表单和Me.Filter已经过时了。对于打开的选择查询,是否有类似的内容?

我现在在做什么,但它让我恶心:

DoCmd.RunCommand acCmdSelectAllRecords
DoCmd.RunCommand acCmdCopy

实际上,我需要对筛选后的查询运行另一个查询。所以:将所有内容粘贴到一个新表中是可以的,将过滤器设置作为条件列表或SQL语句会更好。

有什么想法吗?

您似乎知道如何检查表单的用户应用过滤器,但您不想使用表单,因为数据库模式仍然不稳定,这意味着查询的字段集可能会更改。

在这种情况下,使用子窗体控件创建一个简单的容器窗体,并将查询用作子窗体控件的SourceObject

下面是一个简单的示例,其中命名查询(qryFoo2)为SourceObject。。。

? Forms!Form20!Child0.SourceObject
Query.qryFoo2

没有应用用户筛选器。。。

? Forms!Form20!Child0.Form.Filter
? Forms!Form20!Child0.Form.FilterOn
False

然后,如果我在查询的文本字段上应用("以'h'开头")筛选器。。。

? Forms!Form20!Child0.Form.Filter
([qryFoo2].[text_field] Like "h*")
? Forms!Form20!Child0.Form.FilterOn
True

我也没有听说过自动过滤器,我相信Me.Filter会返回表单中任何应用的过滤器(当然,记录源中除外)。

但是,如果您遇到这种情况,您应该能够使用RecordsetClone,因为它总是返回以以下形式显示的当前记录:

Dim rs As DAO.Recordset
Set rs = Me.RecordsetClone
If rs.RecordCount > 0 Then
    While rs.EOF = False
        ' Loop rs and do stuff.
        rs.MoveNext
    Wend
End If
Set rs = Nothing

最新更新