【问题标题】:MS Access: Ignoring query criteria if blankMS Access:如果为空则忽略查询条件
【发布时间】:2016-12-18 03:36:42
【问题描述】:

我在 Access 中有一个表单,我在其中运行基于多个文本框的查询。我对从文本框中提取的几个查询字段应用条件,但希望查询在文本框为空白时忽略条件。

例如,如果 Machine_TextBox 为空,则不要将条件应用于 Events.Machine 字段。

SQL代码是:

SELECT Events.Machine, Events.[Event Date], Events.[Event Description],
Events.[Action Taken], Events.[Machine Clinical], Events.[Modalities Not Clinical],
Events.[Manufacturer Ticket #], Events.[TLC Ticket #], Events.FSR, Events.ID, 
Events.[Event Recorded By], Events.[Action Recorded By], Events.[Downtime Validation],
Events.[Event Time]  

FROM Events

WHERE (((Events.Machine)=IIf([Forms]![SearchEvent]![Machine_TextBox] Is Null,"",
[Forms]![SearchEvent]![Machine_TextBox]))  AND ((Events.[Event Date]) Between 
Nz([Forms]![SearchEvent]![StartDate_TextBox],#1/1/1900#) And Nz([Forms]![SearchEvent]![EndDate_TextBox],#1/1/2100#))  
AND ((Events.[Event Description]) Like "*" & [Forms]![SearchEvent]![EventDetails_TextBox])  
AND ((Events.[Manufacturer Ticket #])=[Forms]![SearchEvent]![Manufacturer_TextBox])  
AND ((Events.[TLC Ticket #])=[Forms]![SearchEvent]![TLC_TextBox]) 
AND ((Events.FSR)=[Forms]![SearchEvent]![FSR_TextBox]))  
OR (((Events.Machine)=IIf([Forms]![SearchEvent]![Machine_TextBox] Is Null,"",[Forms]![SearchEvent]![Machine_TextBox]))  
AND ((Events.[Event Date]) Between Nz([Forms]![SearchEvent]![StartDate_TextBox],#1/1/1900#) 
AND Nz([Forms]![SearchEvent]![EndDate_TextBox],#1/1/2100#))  
AND ((Events.[Action Taken]) Like "*" & [Forms]![SearchEvent]![EventDetails_TextBox])  
AND ((Events.[Manufacturer Ticket #])=[Forms]![SearchEvent]![Manufacturer_TextBox]) 
AND ((Events.[TLC Ticket #])=[Forms]![SearchEvent]![TLC_TextBox])  
AND ((Events.FSR)=[Forms]![SearchEvent]![FSR_TextBox]))

ORDER BY Events.[Date and Time Stamp] DESC;

此致,

标记

【问题讨论】:

  • 欢迎。请格式化您的代码,使其更具可读性。这些行目前有数百个字符
  • 通常在这种情况下,我将使用变量来捕获字段值,然后检查它们是否为空或为空。如果没有,我会将表字段名称附加到值和特定数据类型的任何格式中,然后将该变量添加到查询中。这样,如果它是空的,当变量被添加到查询中时,它基本上会被忽略。
  • @MichaelRusso,感谢您的回复。我希望能够避免重新构建查询的方式。确认一下,如果 IIF 语句返回为真(即文本框为 Null),我是否无法使用“IIF-IsNull”表达式并传递“Is Not Null”?
  • 我认为 IIF 在这种情况下不会起作用。如果您查看第一个 WHERE 条件,当文本框为空时,您正在询问 Events.Machine = "" 的记录,我很确定您不想要

标签: sql ms-access ms-access-2010


【解决方案1】:

您可以尝试here 描述的技术。

对于每个搜索框,使用布尔逻辑过滤其值,或者如果它为空则忽略此 AND 子句,方法是使 AND 子句为 TRUE。

我将仅使用两个搜索框作为示例:

SELECT stuff
FROM Events

WHERE ((Events.Machine = [Forms]![SearchEvent]![Machine_TextBox]) 
            OR ([Forms]![SearchEvent]![Machine_TextBox] Is Null))
  AND ((Events.[Event Description] Like "*" & [Forms]![SearchEvent]![EventDetails_TextBox] & "*") 
            OR ([Forms]![SearchEvent]![EventDetails_TextBox] Is Null))
  AND ...

【讨论】:

  • 成功了!太感谢了。谷歌了几个小时没有找到答案。早就应该发帖了!
猜你喜欢
  • 2021-07-02
  • 1970-01-01
  • 1970-01-01
  • 2018-12-23
  • 1970-01-01
  • 1970-01-01
  • 2023-03-06
  • 2021-12-04
  • 1970-01-01
相关资源
最近更新 更多