我在数据表视图模式下有一个子表单,它缺少通常带有复选框的过滤器选项。
失踪
通过快速过滤器和过滤器复选框,我的意思是:
有人可以告诉我如何找回它吗?
今天我偶然发现了一个可能的答案。试试这个选项:
Menu File → Options... → Filter lookup options for <your DB name> Database
更改选项在读取的记录数超过此数量时不显示列表:从 1000(默认值)到适合您需要的更大数字。
就这样。
表单的数据源查询具有导致递归过滤的过滤器参数集。当我删除那个过滤器(因为它没有用)时,它运行良好。这就像一个逻辑错误导致了这个问题。
如果您要解决最初列出的问题,上述答案都不正确。在我自己的数据库中玩弄过这个问题后,我发现 Access 似乎不再支持带有链接字段的交叉引用查询(例如,使用具有通用名称 [文本] 的下拉列表链接到主表中的字段使用数字来减少记录/数据库大小)。我发现通过将索引字段的大小从 0 调整到 0.0202 可以让过滤机制再次工作,但会自动列出字段中的数字而不是关联的常用名称。似乎解决此问题的唯一方法是将您的关系链接从数字更改为文本,并使用通用名称作为实际条目(我认为这是巨大的错误更改)。希望他们能修复它。与此同时,我会寻找更好的答案。如果我找到了,我会在这里发布。-DFoxII
列出的答案并没有解决我的具体问题。我也没有让过滤器列表出现在子表单上。
在敲了很多次之后,我发现我的主表单将“允许过滤器”设置为否。即使子表单都打开了允许过滤器,但它们似乎继承了主表单的设置。
这是一个有很多答案的老问题。这些都不适用于 Access 2016。只有在我将表单的数据源从 SQL 语句更改为 Access 查询的简单名称之后,它才起作用并且快速过滤器重新出现。
我确实认为这是由于大量不重复的条目造成的。换句话说,这是因为您有许多条目没有从复选框过滤器中受益。他们留下“文本过滤器>”以便您可以搜索,但省略复选框,因为它只是一个列表太长。我不知道有什么方法可以改变这种行为,因为它内置在 Access 中作为不可自定义的。
底线:复选框对话框的选项太多,无法更改。
列上的数据类型看起来是number
在这种情况下它根本没有文本过滤器。请注意,您的过滤选项是“数字过滤器”而不是“文本过滤器”
我解决了一个类似的问题 - Access 2013 中拆分表单的数据表部分中没有快速过滤器。快捷菜单的表单属性设置已设置为否。我将其更改为是,瞧,快速过滤器变得可用。
只需将您的数据类型更改为短文本即可。
确保不要使用“NO”作为字段名称。我有一个名为 NO 的字段,它导致过滤器消失。它似乎是 MS 访问的无证“功能”。
在这里,我找到了结果。首先,我要感谢这个答案,他给了我火花。
“表单的数据源查询具有导致递归过滤的过滤器参数集。当我删除该过滤器(因为它没有用)时,它运行良好。这就像一个逻辑错误导致了这个问题。”
我用两个代码来展示解决方案,其实是Access自身原因造成的。
代码1:
Me.RecordSource = "SELECT * FROM CAPData ORDER BY [DAILY_CLIENT],[CLIENT_NAME],[ASSET_NAME]"
在这种情况下,有时会导致没有自动过滤器。
代码2:
Me.RecordSource = "SELECT * FROM CAPData Where Not IsNull(ID) ORDER BY [DAILY_CLIENT],[CLIENT_NAME],[ASSET_NAME]"
这样,问题就解决了。
原因:当您在记录源 SQL 中添加某些条件时,Access 会设置自动过滤器。如果你没有设置,当记录大于某个数字时,自动过滤器将不会出现。但是当您在记录源 SQL 中添加 where 条件时,您可以找到自动过滤器。已测试 20000+ 条记录。
第一次写回答,好激动。</p>
我遇到了同样的问题,在尝试了不同的方法(包括这里提到的方法)之后,我想我终于让它工作了。
首先,请确保您更改了布拉德在回答中所说的选项。我有一个包含两列 ID 和 CustomerName 的组合框。一开始,这个组合框的行源是:SELECT ID AS CustomerID, CustomerName FROM tblCustomers ORDER BY CustomerName; 过滤器的复选框未显示。
我发现这个查询组合框行源有两个问题:
所以在我将查询更改为:SELECT ID, CustomerName FROM tblCustomers; 复选框回来了!(虽然你可以对第一列进行排序)
正如已经证明的那样,快速过滤器未显示有多种原因。我遇到的三个主要原因:
要解决此问题,您需要将 SQL 动态推送到 Access 查询对象中,然后将表单的记录源设置为查询 - 问题已解决。
我使用我编写的名为 CreateQuery 的模块来执行此操作,并像这样调用它:
例如 Form1.recordsource = CreateQuery("SELECT * from Table", "qrySource1") 使用下面的子:
PUBLIC SUB CreateQuery(SQL as String, qryName as String)
Dim qDef As DAO.QueryDef
With CurrentDb
For each qDef in .QueryDefs
If qDef.Name = qryName Then
.QueryDefs.Delete (qryName)
Exit For
End IF
Next qDef
set qDef = .createQueryDef(qryName, SQL)
END WITH
set qDef = nothing
END SUB
下一个真的很狡猾 - 检查以确保源表的字段不是长文本。Access 将不允许在任何长文本字段上使用“快速过滤器”列。
确保您没有禁用表单的快捷菜单选项,该选项位于表单属性的“其他”选项卡中。
我遇到了一个字段不是“可排序”的问题,即在数据表视图中右键单击列时没有显示 AZ 选项。我从设计视图中删除了该字段,控制源并重新选择它,然后排序可用。
文件->选项->当前数据库->向下滚动到该部分->过滤myDBName数据库的查找选项检查ODBC字段复选框
我发现如果表单的记录源是包含排序子句的 SQL 语句,则不会出现快速过滤器。
解决方案:要么删除排序子句(如果您希望对数据进行排序,则没有那么有用)或将包含排序的 SQL 语句保存为查询,然后将表单的记录源更改为已保存的查询。瞧,快速过滤器可用。
问候彼得。