有没有办法找出对查询应用了什么自动筛选?
我不能使用表单,因为数据库结构正在改变(我对此无能为力)。因此,遗憾的是,使用表单和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