【发布时间】: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