MS Access-使用表单输入过滤查询中的多个条件

时间:2018-07-02 20:26:25

标签: sql ms-access filtering

在MS Access中,我想使用表单来驱动查询的多个筛选条件。在每个组合框中,我为用户添加了空值,以使用户留空,因为并非所有条件都需要指定值

Form

当前,我可以在第一个字段[协议类型]上进行过滤,但是无法使“赞助商”字段起作用。这使我什至无法尝试根据其他字段进行过滤。首先,这就是我所拥有的:

SELECT TestInPut.[Type of Agreement], TestInPut.Sponsor, TestInPut.[Proposal Title], TestInPut.Div,  TestInPut.[Award Status], 
FROM TestInPut
WHERE ((TestInput.[Type of Agreement])=Forms!Console!SelectType) Or ((Forms!Console!SelectType) Is Null); 

我尝试了以下解决方案,但是如果我在“赞助者”组合框中选择一个值,我的代码将不适用:https://stackoverflow.com/a/19568169

如何正确开发代码?

谢谢。

1 个答案:

答案 0 :(得分:0)

这种过滤器的想法是将控件中的Null值转换为SQL,这意味着该字段上没有条件。为此,我们使用Nz函数和LIKE关键字。

WHERE部分应显示为:

WHERE TestInput.[Type of Agreement] LIKE Nz("'" & Forms["Console"].SelectType & "'","'*'") AND
      TestInPut.Sponsor LIKE Nz("'" & Forms["Console"].Sponsor & "'","'*'") AND ...

,对于要过滤的每个字段,依此类推。现在,如果组合框为Null,它将替换LIKE '*',它返回该字段的所有内容。如果使用值填充,则将其替换为LIKE 'Grant'。没有通配符(*,?)表示有效地要求它相等。

编辑:对不起,其中有一些错误。应该是:

WHERE TestInput.[Type of Agreement] LIKE Nz([Forms]![Console]![SelectType],"*") AND
          TestInPut.Sponsor LIKE Nz([Forms]![Console]![Sponsor],"*")