使用多个复选框在Access表单中进行过滤

时间:2018-12-18 08:58:45

标签: sql ms-access

我真的是编程新手,并且想了解如何构建使用复选框过滤数据的表单。

在我的数据中,我有品牌名称和几列(鞋子,裤子,成本等),其中包含“是”或“否”。

我构建的表单包含所有这些列的复选框,它们分别称为ShoesCheck,PantsCheck等。这些复选框的默认值为 False ,并且有一个按钮可以运行我进行的查询。

在查询中,我有多个与AND结合使用的IIf语句,以应用过滤器,如下所示:

[Shoes]=IIf([Forms]![Filter]![ShoesCheck]=False,"*","Yes") AND ...

问题是,如果仅选中1个框,则没有输出。虽然我希望看到该复选框的“是”所有记录。 如果我选择2个复选框,则我想查看所有2个复选框均为 True 的记录,而不管其余数据是什么。

我在这个论坛上进行了很多搜索,但是大多数事情对我来说都很复杂,这就是为什么我先将其分解以理解这部分的原因,因此,如果您要链接到另一个问题或答案,请告诉我如何首先起作用。

我将添加访问文件,但是找不到附件按钮。我很抱歉。

查询中的完整SQL代码:

SELECT *
FROM Data
WHERE [Shoes]=IIf([Forms]![Filter]![ShoesCheck]=False,"*","Yes") AND
[Pants]=IIf([Forms]![Filter]![PantsCheck]=False,"*","Yes") AND
[Shirts]=IIf([Forms]![Filter]![ShirtsCheck]=False,"*","Yes") AND
[Hats]=IIf([Forms]![Filter]![HatsCheck]=False,"*","Yes") AND
[Costs]=IIf([Forms]![Filter]![CostsCheck]=False,"*",0);

按钮中的代码

DoCmd OpenQuery "FilterData"

数据: Not allowed to place an image so it became a link

3 个答案:

答案 0 :(得分:0)

您可以显示一些代码,以便我们知道当您仅单击一个时什么都没显示时发生了什么吗?

否则,我会冒险猜测。对于您的“提交”按钮后面的代码,通过阅读每个复选框状态逐渐为基础查询构建sql代码。因此,您可以从文本

开始
Select myfield1, myfield2 from mytable 

如果选中了任何复选框,则可以使用逐步添加到上面的文本中(我的解释是:

if chkboxShoes.checked then
    MySQL = MySQL & " where shoes is not null"
endif

对于下一个复选框,您可以:

if MySQL <> "" then MySQL = MySQL & " AND " pants is not null"

并继续像这样建立它。最后,您可以使该文本成为表单后面的记录源。

我可能在这里改写。

Myform.recordsource = MySQL

myform.requery

如果没有选中任何框,则必须对不具有where语句进行一些更改,但这是构建代码的方式。

答案 1 :(得分:0)

简单的方法是将字段与其自身进行比较的古老技巧-始终为 True Null 值除外):

WHERE [Shoes]=IIf([Forms]![Filter]![ShoesCheck]=False,[Shoes],True) AND

答案 2 :(得分:0)

SELECT *
FROM Data
WHERE IIf([Forms]![Filter]![ShoesCheck]=True,[Shoes]="Yes",[Shoes]) AND 
IIf([Forms]![Filter]![PantsCheck]=True,[Pants]="Yes",[Pants]) AND 
IIf([Forms]![Filter]![ShirtsCheck]=True,[Shirts]="Yes",[Shirts]) AND 
IIf([Forms]![Filter]![HatsCheck]=True,[Hats]="Yes",[Hats]) AND 
IIf([Forms]![Filter]![CostsCheck]=true,[Costs]=0,[Costs]);

直到我添加“成本”行,代码才能正常工作。如果不选中此框,则仅显示数字不等于0的行。如果选中此框,则它可以正确显示所有带有0的行。如何更改它,以便在框时显示所有记录没有检查?

最奇怪的是,如果我将数据从0更改为另一个数字,则它们又将再次正常运行。因此,它与0作为数据有关。我只是将所有0更改为免费,并将该列设置为短文本。现在就解决了,希望有人知道我如何仍然可以将该列保留为货币并应用过滤器。

每个人都感谢您的帮助!

相关问题