访问表单复选框AND OR语句

时间:2018-12-13 07:47:44

标签: ms-access

最近,我开始使用复选框创建表单以过滤数据库。

我有以下数据:

Category  Type   Country  
Fruit     Apple  NL   
Fruit     Apple  SU   
Fruit     Banana NL   
Fruit     Banana DE   
Nuts      Cashew NL   
Nuts      Cashew US   
Nuts      Almond UK   
Nuts      Almond GR   

现在,我以水果和坚果,苹果,香蕉,腰果和杏仁以及NL,SU,DE,美国,英国和GR的复选框构建表单。

此刻,我在SQL脚本中仅使用OR语句,效果很好。但是,如果用户想知道例如哪个水果来自NL,并且同时标记了Fruit和NL,那么我的输出将是来自Fruit和来自NL的所有内容(由于OR语句)。

如何根据选中的复选框更改使用过滤器的脚本?在我的示例中:如果用户同时选中了Fruit和NL,那么它将给出输出-> Fruit Apple NL和Fruit Banana NL

另一个例子:他想要香蕉和腰果,并获得输出->水果香蕉NL和水果香蕉DE和坚果腰果NL和坚果腰果美国

我希望我的问题清楚了;如果没有,请随时澄清!

1 个答案:

答案 0 :(得分:0)

据我了解,您有一个带有2个 Category 复选框,4个 Type 复选框和6个 Country 复选框的表单。

听起来好像没有任何这些过滤器本身,所以可以尝试返回 Nuts Apple UK 一个空桌子。

我认为您必须广泛使用LIKE命令,以便任何NULL/FALSE值都可以转换为*

当复选框返回TRUE/FALSE而不是Apple/False时,可以使用IIF语句将TRUE更改为Apple(您可以使用{{1 }}或CHOOSE)。

所以这里的SWITCH子句说WHERE水果任何东西

chkFruit

修改:
阅读下面的注释,听起来像是希望它被选中的框过滤,或者如果没有选中任何框,则将其全部显示(就像选中了“类别/类型”或“国家/地区”中的所有框一样)。
如果您有很多复选框,那可能会变得非常复杂。

因此,复选框的每个部分都需要细分为类似于以下内容的内容。

SELECT  Category, Type, Country
FROM    Table2
WHERE   Category LIKE (IIF([Forms]![Form1]![chkFruit],'Fruit','*')) AND
        Category LIKE (IIF([Forms]![Form1]![chkNuts],'Nuts','*')) AND
        Type LIKE (IIF([Forms]![Form1]![chkApple],'Apple','*')) AND
        Type LIKE (IIF([Forms]![Form1]![chkBanana],'Banana','*')) AND
        Type LIKE (IIF([Forms]![Form1]![chkCashew],'Cashew','*')) AND
        Country LIKE (IIF([Forms]![Form1]![chkNL],'NL','*')) AND
        Country LIKE (IIF([Forms]![Form1]![chkSU],'SU','*')) AND
        Country LIKE (IIF([Forms]![Form1]![chkDE],'DE','*'))  

完整的SQL将是:

WHERE   ((
        Category = IIF([Forms]![Form1]![chkFruit],'Fruit',NULL) OR
        Category = IIF([Forms]![Form1]![chkNuts],'Nuts',NULL)
        ) OR IIF(NOT [Forms]![Form1]![chkFruit] AND 
                 NOT [Forms]![Form1]![chkNuts],Category LIKE '*',NULL))  

我感觉这可以缩短很多时间,但是现在开始伤到我的头了。