【问题标题】:Query results not showing records with null values查询结果不显示空值记录
【发布时间】:2013-10-02 21:24:20
【问题描述】:

我正在设计一个搜索表单来根据 4 个文本字段(名字、姓氏、电话号码和促销代码)搜索我的访问数据库。

查询看起来像:

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

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

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

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

【问题讨论】:

    标签: ms-access ms-access-2010


    【解决方案1】:

    我认为这里的文本框可能会让人分心,因为这个问题更基本。考虑这个查询...

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

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

    原因是 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 的第二部分对所有行都为真,因此返回所有行。

    当文本框不为 Null 时,仅返回满足 Like 比较的那些行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-14
      • 1970-01-01
      • 1970-01-01
      • 2020-05-27
      • 2012-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多