查询结果未显示具有空值的记录

时间:2013-10-02 21:24:21

标签: ms-access ms-access-2010

我正在设计一个搜索表单,根据4个文本字段,Firstname,Surname,Phonenumber和Promo Code搜索我的访问数据库。

查询如下:

Like "*" & [Forms]![SearchF]![txtFirstName] & "*"
Like "*" & [Forms]![SearchF]![txtSurnameName] & "*"
Like "*" & [Forms]![SearchF]![txtPhone] & "*"
Like "*" & [Forms]![SearchF]![txtPromo] & "*"

如果所有字段都为空,则搜索应返回所有记录。在文本框中输入一些值时,结果会缩小到匹配。

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

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

1 个答案:

答案 0 :(得分:5)

我认为文本框在这里可能有点分心,因为这个问题更基本。考虑这个问题......

SELECT f.id, f.some_text
FROM tblFoo AS f
WHERE f.some_text Like "*";

它返回some_text包含任何非空值的行,甚至是空字符串。但是,它不会返回some_text为空的行。

原因是Like比较中的Null永远不会评估为True。从立即窗口考虑这个例子......

? "foo" Like "*"
True
? Null Like "*"
Null

对于Like比较,我认为您希望目标字段包含文本框文本的行。但是当文本框为Null时返回所有行。您可以通过将这两个条件与OR组合来实现。

WHERE
    [Promo Code] Like "*" & Forms!SearchF!txtPromo & "*"
    OR
    Forms!SearchF!txtPromo Is Null

当文本框为Null时,OR的第二部分对所有行都为true,因此返回所有行。

如果文本框不是Null,则仅返回满足Like比较的那些行。