访问运行时中的查询返回不同的结果

时间:2017-06-22 20:13:28

标签: sql vba ms-access

我有一个带有一些控件的表单。输入控件的值将传递给我用于填充同一表单上的列表框的查询的WHERE子句。

我正在过滤的一些列具有空值。当控件保持为空时,它应该拉入未被该列过滤的所有行。

因此,我的WHERE子句的一部分如下所示:

WHERE
(person.last_name like [Forms]![frmFilterPerson]![txtLastName] & "*"  
OR [Forms]![frmFilterPerson]![txtLastName] Is Null)

当我在完整版访问中运行我的应用程序,并且将txtLastName控件留空时,我会返回所有结果,包括姓氏为空的结果

但是,当我在Access Runtime中运行它时,我没有得到所有结果,只有那些在表中有值的结果。

关于如何在我的where子句中根据表单上的控件使用过滤器来检索具有空值的行的任何建议?

1 个答案:

答案 0 :(得分:1)

你可以使用这个老技巧 - 将字段与自身进行比较:

WHERE 
    person.last_name Like Nz([Forms]![frmFilterPerson]![txtLastName], person.last_name) & "*" 
    OR
    person.last_name Is Null

或者:

WHERE 
    person.last_name Like Nz([Forms]![frmFilterPerson]![txtLastName], person.last_name) & "*" 
    OR
    [Forms]![frmFilterPerson]![txtLastName] Is Null