最近,我开始使用复选框创建表单以过滤数据库。
我有以下数据:
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和坚果腰果美国
我希望我的问题清楚了;如果没有,请随时澄清!
答案 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))
我感觉这可以缩短很多时间,但是现在开始伤到我的头了。