IIF查询表达式,对条件使用Like“ *”

时间:2019-01-03 22:45:36

标签: ms-access

我有一个跟踪员工质量检查的数据库。我希望可以按一个职员,整个团队或一个单位进行搜索。我有三个与这些字段相对应的控件,一次只能有一个值。在查询中,我希望有3个表达式将其结果限制在这3个字段之一中。我仅添加一个开始,但是遇到了问题。

我发现这个https://www.acuitytraining.co.uk/microsoft-training-courses/access/if-statements/似乎可以满足我的要求。这是我正在尝试的代码。

IIf(IsNull([Forms]![MainMenu]![btnManagersMenu].[Form]![cmbStaffSelect]), 
[UserLogin] Like "*",[UserLogin]=[Forms]![MainMenu]![btnManagersMenu]. 
[Form]![cmbStaffSelect])

如果控件具有值,则可以正常工作。 (条件为false)如果下拉列表没有值(条件为true),则结果为零。我怀疑问题出在我的UserLogin字段上的Like“ *”。这是我的查询向导和IIF表达式的生成器向导 A picture of the query wizard

任何人都可以看到为什么下拉列表控件为空时为什么我没有得到任何结果。我认为这应该给我未过滤的结果列表。我已经仔细检查了我的数据,如果不受员工选择的限制,应该显示137条记录。

这的简短版本是,如果cmbStaffSelect具有一个值,我希望我的记录受该值限制。如果cmbStaffSelect为空,我想获取所有记录。

3 个答案:

答案 0 :(得分:1)

请记住,iif函数将始终对两者 then else 进行评估参数,然后根据评估提供的测试表达式时返回的值返回适当的值。

这样,如果 then else 参数在评估时有可能出错(无论测试表达式的评估结果如何),则iif表达式有可能出错。

或者,您可以使用Nz函数来获得相同的结果:

[UserLogin] LIKE Nz([Forms]![MainMenu]![btnManagersMenu].[Form]![cmbStaffSelect],"*")

答案 1 :(得分:0)

也许您的IsNull([Forms]![MainMenu]![btnManagersMenu]。[Form]![cmbStaffSelect])始终返回false,因为cmbStaffSelect可能等于空字符串?

尝试类似这样的方法: IIf(Trim([Forms]![MainMenu]![btnManagersMenu]。[Form]![cmbStaffSelect]&“”)=“”, [UserLogin]类似于“ *”,[UserLogin] = [Forms]![MainMenu]![btnManagersMenu]。 [表格]![cmbStaffSelect])

这将检查cmbStaffSelect是否为“ ... ...,如果cmbStaffSelect为空-通过在空值后附加”“将其转换为”“。

答案 2 :(得分:0)

我相信您的直觉是完全正确的。如果您希望查询结果返回UserLogin字段的*符号;然后将您的IIF语句更改为:[UserLogin] =“ *”