【问题标题】:MS Access - Using Form Inputs to Filter on Multiple Criteria in a QueryMS Access - 使用表单输入过滤查询中的多个条件
【发布时间】:2018-12-11 02:26:42
【问题描述】:

在 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

如何正确开发我的代码?

谢谢。

【问题讨论】:

    标签: sql ms-access filtering


    【解决方案1】:

    这种过滤器的想法是将控件中的 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],"*") 
    

    【讨论】:

    • 您好 John F,我用您的替换了 WHERE 部分并修复了格式,因为 Access 在尝试运行您的代码后给了我一个语法错误(缺少运算符)。
    • 哦,好的,语法错误是什么,所以我可以修复它?成功了吗?
    • 抱歉,我不得不离开办公桌并锁定了评论。以下是我修改后能够在 Access 中运行的代码。但它破坏了功能,因为我什至无法再根据协议类型值进行过滤哈哈.. WHERE TestInput.[Type of Agreement] LIKE Nz("'" & [Forms]![Console]![SelectType] & " '","''") AND TestInPut.[Sponsor] LIKE Nz("'" & [Forms]![Console]![SelectSponsor] & "'","''");如果有任何进一步的见解,我将不胜感激!
    • 我应该问:您使用什么来将过滤器应用于表单的数据?您使用的是 Filter 属性还是 RowSource 属性?此外,您还需要 Nz 函数的第二个参数为“'*'”,即双引号、单引号、星号、单引号、双引号。
    • 我希望我能正确回答你的问题...在我的表单 [Console] 中,我使用 RowSource 属性从我的数据库表 TestInput 中获取现有记录,并添加了一个带有技巧的 Null我在堆栈上找到的。 “SELECT TestInput.[Type of Agreement] FROM TestInput UNION SELECT Null FROM TestInput GROUP BY TestInput.[Type of Agreement] ORDER BY TestInput.[Type of Agreement];”我在查询中找不到 Rowsource 或 Filter 属性,因为我一直在处理 SQL 视图中的代码。
    猜你喜欢
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    相关资源
    最近更新 更多