【问题标题】:How to make a query criteria select everything If the parameter is blank如果参数为空,如何使查询条件选择所有内容
【发布时间】:2017-07-19 20:45:35
【问题描述】:

我有一个表单,它有一个名为 [Supp] 的组合框,它从名为 [Supplier] 的表列中提取。

同时,我正在过滤与日期范围为 [Text6](Starting Date) 和 [Text7](Ending Date) 的记录关联的日期

我正在尝试使供应商过滤器成为可选,只要您将 [Supp] 留空/空,它就会选择所有供应商。

问题是,每当我将 [Supp] 留空时,它似乎超出了日期范围过滤器并选择所有可用记录,而不管日期如何。我认为这很可能是因为我使用的是“OR”。

SQL Code

SELECT [Table Material Label].Serial, [Table Material Label].[Date Recieved], [Table Material Label].MaterialDescription, [Table Material Label].MaterialCode, [Table Material Label].Supplier, 

[Table Material Label].[Lot Number], [Table Material Label].Weight, [Table Material Label].Quantity, [Table Material Label].[Purchase Order Number], [Table Material Label].[Received By], [Table Material Label].[Checked in By], [Table Material Label].[Total Weight]

FROM [Table Material Label]

WHERE ((([Table Material Label].[Date Recieved])>=[Forms]![Report Generator]![Text6] 
    And ([Table Material Label].[Date Recieved])<=[Forms]![Report Generator]![Text7]) 
    AND (([Table Material Label].Supplier)=IIf([forms]![Report Generator]![Supp].[Value]="*",([Table Material Label].[Supplier])='*',([Table Material Label].[Supplier])=[Forms]![Report Generator]![Supp].[Value])))


ORDER BY [Table Material Label].[Date Recieved], [Table Material Label].MaterialDescription, [Table Material Label].MaterialCode, [Table Material Label].Supplier;

总而言之 - 我正在尝试按日期范围和供应商进行过滤的查询。但如果供应商标准为空白,我希望它不过滤供应商。如果不破坏日期范围过滤器,我将无法执行此操作。

任何帮助将不胜感激。谢谢。

成品,感谢 Andre 的解决方案:

SELECT [Table Material Label].Serial, [Table Material Label].[Date Recieved], [Table Material Label].MaterialDescription, [Table Material Label].MaterialCode, [Table Material Label].Supplier, 

[Table Material Label].[Lot Number], [Table Material Label].Weight, [Table Material Label].Quantity, [Table Material Label].[Purchase Order Number], [Table Material Label].[Received By], [Table Material Label].[Checked in By], [Table Material Label].[Total Weight]

FROM [Table Material Label]

WHERE  (([Table Material Label].[Date Recieved])>=[Forms]![Report Generator]![Text6] 
    And ([Table Material Label].[Date Recieved])<=[Forms]![Report Generator]![Text7]) 
    AND ([Table Material Label].Supplier = [Forms]![Report Generator]![Supp] 
    OR [Forms]![Report Generator]![Supp] IS NULL)

ORDER BY [Table Material Label].[Date Recieved], [Table Material Label].MaterialDescription, [Table Material Label].MaterialCode, [Table Material Label].Supplier;

【问题讨论】:

    标签: sql ms-access


    【解决方案1】:

    看这里:https://stackoverflow.com/a/38899574/3820271

    AND ([Table Material Label].Supplier = [Forms]![Report Generator]![Supp] 
         OR [Forms]![Report Generator]![Supp] IS NULL)
    

    如果供应商标准为空,则此 AND 部分将始终为真。

    【讨论】:

    • 感谢十亿安德烈,工作就像一个魅力。令人惊讶的是,有多少组织代码可以帮助您发现错误。
    猜你喜欢
    • 2014-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    相关资源
    最近更新 更多