【发布时间】:2018-06-19 00:18:44
【问题描述】:
在我的数据库中,我有一个包含多个是/否列的表。
现在,我有一个未绑定的表单,其中包含一些未绑定的复选框和一个绑定到专门查询的列表框。
我想使用表单上的复选框来过滤列表框并显示列表中具有匹配值的项目。
例如,
- 如果我在表单上选中 box1,任何 列表框中包含 field1 的项目都应该显示。
- 如果我在表单上选中 box2 和 box3,任何 包含 field2 AND field3 的项目都应该显示在列表框中。如果项目没有 field3 和 field3,则它们的条目不应显示在列表中,因为未选中这些框。
表单上的每个控件都使用单击事件过程来重新查询列表。
现在,这不适合我。我的列表框仅在所有值与复选框匹配时才显示项目。因此,如果我选中 box1 和 box2,我 only 从具有 only field1 和 field2 的项目中获取结果。如果项目也有field3,它不会显示 - 这是我的问题。
这是我的查询到目前为止的样子:
SELECT MyQuery.title, field1, MyQuery.field2, MyQuery.field3
FROM MyQuery
WHERE (
(
(MyQuery.field1) like [Forms]![Ability Finder]![box1]
)AND(
(MyQuery.field2) like [Forms]![Ability Finder]![box2]
)AND(
(MyQuery.field2) like [Forms]![Ability Finder]![box3]
)
);
也许我做错了。另外,我有大约 20 个复选框需要这样做。
SELECT MyQuery.cat, MyQuery.nickname, MyQuery.title, MyQuery.level, MyQuery.field1, MyQuery.field2, MyQuery.field3
FROM MyQuery
WHERE (
((MyQuery.field1)=[Forms]![Ability Finder]![box1] Or [Forms]![Ability Finder]![box1] Is Null)
AND ((MyQuery.field2)=[Forms]![Ability Finder]![box2] Or [Forms]![Ability Finder]![box2] Is Null)
AND ((MyQuery.field3)=[Forms]![Ability Finder]![box3] Or [Forms]![Ability Finder]![box3] Is Null)
);
【问题讨论】:
-
据我了解 Where 子句应该是动态的,例如,如果 [Forms]![Ability Finder]![box1] 有一个值(已选择),那么应该包括以下行:MyQuery.field1) 喜欢[Forms]![Ability Finder]![box1] 否则此行应省略。
-
您需要添加类似
[Forms]![Ability Finder]![box3] OR [Forms]![Ability Finder]![box3]is Null的内容才能忽略未使用的查询条件。 -
但是只有当我从未点击过复选框时,复选框才会为空?如果我打开和关闭一个,那么它的空状态就会丢失。但是添加
is null部分并没有任何帮助。 -
@BData 您说得对,该子句应该是动态的,这就是为什么我需要查阅 box1 的值等。但是您说如果不选中该框,我应该忽略该框。好吧,它已经这样做了。如果我取消选中某个框,则不会对其进行过滤。我的问题是另一个方向。
标签: ms-access