Forms 基于用户定义参数的IIf函数

Forms 基于用户定义参数的IIf函数,forms,ms-access,iif-function,Forms,Ms Access,Iif Function,我正试图根据表单中输入的参数开发一个查询。我希望确保即使用户选择不输入参数(例如,开始和结束日期)或用户只输入一半参数(例如,用户只输入开始但不输入结束日期或结束但不输入开始日期),查询仍能工作。这就是我想要的: 如果开始日期和结束日期为空,则返回所有日期 否则,如果开始日期为空,则返回日期小于或等于给定的结束日期 否则,如果结束日期为空,则返回日期大于或等于给定的开始日期 否则,返回给定开始日期和结束日期之间的所有日期 我所想到的似乎并没有超出第一个真实的陈述,我也不知道为什么 IIf(IsN

我正试图根据表单中输入的参数开发一个查询。我希望确保即使用户选择不输入参数(例如,开始和结束日期)或用户只输入一半参数(例如,用户只输入开始但不输入结束日期或结束但不输入开始日期),查询仍能工作。这就是我想要的:

如果开始日期和结束日期为空,则返回所有日期

否则,如果开始日期为空,则返回日期小于或等于给定的结束日期

否则,如果结束日期为空,则返回日期大于或等于给定的开始日期

否则,返回给定开始日期和结束日期之间的所有日期

我所想到的似乎并没有超出第一个真实的陈述,我也不知道为什么

IIf(IsNull([forms]![Volunteer_Hours_By_Person]![Volunteer_Hours_By_Person_Start_Date]
And [forms]![Volunteer_Hours_By_Person]![Volunteer_Hours_By_Person_End_Date]),  
[Volunteer_Date],  

IIf(IsNull([forms]![Volunteer_Hours_By_Person]![Volunteer_Hours_By_Person_Start_Date]),  
<= [forms]![Volunteer_Hours_By_Person]![Volunteer_Hours_By_Person_End_Date],  

IIf(IsNull([forms]![Volunteer_Hours_By_Person]![Volunteer_Hours_By_Person_End_Date]),  
>= [forms]![Volunteer_Hours_By_Person]![Volunteer_Hours_By_Person_Start_Date],  

(Between [forms]![Volunteer_Hours_By_Person]![Volunteer_Hours_By_Person_Start_Date] 
And [forms]![Volunteer_Hours_By_Person]![Volunteer_Hours_By_Person_End_Date]))))
IIf(IsNull([表格]![志愿者工作时间]![志愿者工作时间]由志愿者工作时间开始日期]
和[表格]![志愿者的工作时间]![志愿者的工作时间和结束日期],
[志愿者日期],
IIf(为空([表格]![志愿者工作时数]![志愿者工作时数]开始日期],
=[表格]![志愿者的工作时间]![志愿者的工作时间和开始日期],
(在[表格]之间)![志愿者工作时数由人确定]![志愿者工作时数由人确定开始日期]
和[表格]![志愿者工作时间(人)![志愿者工作时间(人)【结束日期】)
明白了

WHERE (IIf(IsNull([Forms]![Volunteer_Hours_By_Person]!      [Volunteer_Hours_By_Person_Name_Selection]),(People.PID) like "*",(People.PID)=[Forms]![Volunteer_Hours_By_Person]![Volunteer_Hours_By_Person_Name_Selection]))

AND (IIf(IsNull([forms]![Volunteer_Hours_By_Person]![Volunteer_Hours_By_Person_Start_Date]) AND IsNull([forms]![Volunteer_Hours_By_Person]![Volunteer_Hours_By_Person_End_Date]),(Volunteer.Volunteer_Date) like "*",([Volunteer].[Volunteer_Date]) Between [forms]![Volunteer_Hours_By_Person]![Volunteer_Hours_By_Person_Start_Date] And [forms]![Volunteer_Hours_By_Person]![Volunteer_Hours_By_Person_End_Date]))

我认为用vba宏检查日期会更容易“vba宏”在Access中是矛盾的,在Access中有宏(不使用vba)和vba(不是宏)。在Word/Excel中,术语是不同的。我认为这意味着用VBA对其进行编码。宏在Access中根本不是一个好的解决方案(直到2010年,它们才得到错误处理)?如果它是表单或报表的记录源,则不包括任何条件,只需打开表单/报表,将条件作为DoCmd.OpenForm/OpenReport命令的WHERE参数。