具有多个复选框的访问查询表单

时间:2015-03-24 08:28:32

标签: ms-access checkbox ms-access-2007

我有一个新手问题,并希望得到每一个帮助。 我有一个运行查询的表单。该查询基于一个表。 在此表中有几个项目。(项目1,项目2,项目3 ......等)

在表单中有几个复选框,用户可以在其中选择要查询的项目。如果我检查2个项目,他只显示在表格中选择了两个项目的记录。但是我想让它显示所有记录,其中任何一个都显示出来。 防爆。如果我选中Project1的框和Project2的复选框,它应该显示检查项目1的记录以及还检查项目2的记录。

SELECT Vergabeumfang.S63T4, *
FROM Vergabeumfang
WHERE (    
        ((Vergabeumfang.VSS_LAW) Like "*" & [Forms]![Vergabeumfang]![VSS_LAW_Box] & "*" 
            Or (Vergabeumfang.VSS_LAW) Is Null
        )     
        And ((IIf([Forms]![Vergabeumfang]![S63T4_box]=-1,([Vergabeumfang].[S63T4])=True,([Vergabeumfang].[S63T4])=False 
                or ((Vergabeumfang.[S63T4])=True )))
        )                    
        And ((IIf([Forms]![Vergabeumfang]![S63T2_box]=-1,([Vergabeumfang].[S63T2])=True,([Vergabeumfang].[S63T2])=False 
            or ((Vergabeumfang.[S63T2])=True )))
        )
        AND ((Vergabeumfang.V_Commodity_Name) Like "*" & [Forms]![Vergabeumfang]![Commodity_Name_Box] & "*" 
            Or (Vergabeumfang.V_Commodity_Name) Is Null
        ) 

1 个答案:

答案 0 :(得分:2)

以下查询应该适合您,假设我理解正确,最后我会提到一些警告。此外,无需在开头专门选择字段S63T4,因为*将检索它:

SELECT *
FROM Vergabeumfang
WHERE 
(
    Vergabeumfang.VSS_LAW Like "*" & [Forms]![Vergabeumfang]![VSS_LAW_Box] & "*" Or Vergabeumfang.VSS_LAW Is Null
)
AND 
(
    Vergabeumfang.V_Commodity_Name Like "*" & [Forms]![Vergabeumfang]![Commodity_Name_Box] & "*" Or Vergabeumfang.V_Commodity_Name Is Null
)
AND 
(
    (
        Vergabeumfang.S63T2 = iif([Forms]![Vergabeumfang]![S63T2_box]=-1, True, -999)
    )
    OR
    (
        Vergabeumfang.S63T4 = iif([Forms]![Vergabeumfang]![S63T4_box]=-1, True, -999)
    )
)

Access将在粘贴后重新格式化查询,但这些缩进使逻辑更清晰。 -999是一个虚拟值,在Yes / No字段中永远不会为true,以确保在未选中条件复选框时它始终返回false。 我根据给出的信息重建了你的桌子,看起来对吗?为实验而添加到文本字段的无意义数据:

enter image description here

首次打开表单时,它不会显示任何数据,如下所示: enter image description here

当你勾选S63T4并点击Requery时(你需要某种方式告诉Access requery,因为它不会自动执行 - 按钮是最简单的方法,{{1对于按钮的单击事件,但您也可以将其添加到条件复选框/文本框的AfterUpdate事件中),它将如下所示:

enter image description here

看起来你想进一步过滤部分文本条目,所以这张图片显示了字母" t"与该字段中的空值一起输入:

enter image description here

这是第二个复选框上的pic过滤:

enter image description here

现在,当您同时选中这两个复选框时,我不确定您是否要显示

项目

a) S63T2 S63T4

b) S63T2 S63T4

我觉得你希望能够展示任何一种类型的项目,这就是图片所示:

enter image description here

现在,有几个提示:

  1. 在代码中构造SQL语句然后将其应用于Form的Recordsource属性更容易,尤其是当您开始添加更多条件选项时。尝试使用有限的IIF语句来控制所有这些,在一个点之后将变得完全无法管理,因为你开始必须嵌套它们。
  2. 如果一个项目可以有多种类型(我假设" S63T4"" S63T4"是项目类型),并且将来可能获得更多,以便项目有一天可能有10种类型,它可以更灵活地创建一个链接在ID键上的项目类型的新表,如下所示:
  3. enter image description here

    标准表格现在看起来像这样:

    enter image description here

    现在添加新项目类型时,您的表单不需要编辑;它会自动出现在列表框中。

    无论如何,祝好项目好运!