Ms access 查询结果不显示具有空值的记录

Ms access 查询结果不显示具有空值的记录,ms-access,ms-access-2010,Ms Access,Ms Access 2010,我正在设计一个搜索表单,根据名字、姓氏、电话号码和促销代码这4个文本字段搜索access数据库 查询如下所示: Like "*" & [Forms]![SearchF]![txtFirstName] & "*" Like "*" & [Forms]![SearchF]![txtSurnameName] & "*" Like "*" & [Forms]![SearchF]![txtPhone] & "*" Like "*" & [Forms]

我正在设计一个搜索表单,根据名字、姓氏、电话号码和促销代码这4个文本字段搜索access数据库

查询如下所示:

Like "*" & [Forms]![SearchF]![txtFirstName] & "*"
Like "*" & [Forms]![SearchF]![txtSurnameName] & "*"
Like "*" & [Forms]![SearchF]![txtPhone] & "*"
Like "*" & [Forms]![SearchF]![txtPromo] & "*"
如果所有字段均为空,则搜索应返回所有记录。在文本框中输入一些值时,结果将缩小到匹配的范围

它几乎可以正常工作,但在某些字段中没有值时会出现问题。例如,如果某人没有促销代码,那么即使您将其保留为空,他们的记录也会被跳过。我假设access查询不喜欢空白字段


解决这个问题最简单的方法是什么?

我认为文本框可能有点分散注意力,因为这个问题更基本。考虑这个查询…

选择f.id,f.some\u文本
从tblFoo到f
其中f.一些文本,如“*”;
它返回
某些\u text
包含任何非空值的行,即使是空字符串。但是,它不会返回
某些_text
为空的行

原因是,在类似比较的
中,Null永远不会作为True计算。从即时窗口考虑这个例子…
?“foo”像“*”
真的
? 空值类似“*”
无效的
对于
类似的
比较,我认为您需要目标字段包含文本框文本的行。但当文本框为空时返回所有行。您可以通过将这两个条件与
组合来实现

在哪里
[促销代码]如“*”和表单!搜索!txtPromo&“*”
或
形式!搜索!txtPromo为空
当文本框为空时,
的第二部分对所有行都为真,因此返回所有行

当文本框不为空时,仅返回满足
Like
比较的行