在MS Access中,我想使用表单来驱动查询的多个筛选条件。在每个组合框中,我为用户添加了空值,以使用户留空,因为并非所有条件都需要指定值
当前,我可以在第一个字段[协议类型]上进行过滤,但是无法使“赞助商”字段起作用。这使我什至无法尝试根据其他字段进行过滤。首先,这就是我所拥有的:
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
如何正确开发代码?
谢谢。
答案 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],"*")