3

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

查询如下所示:

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

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

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

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

4

1 回答 1

5

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

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

它返回some_text包含任何非 Null 值(甚至是空字符串)的行。但是,它不会返回some_textNull 所在的行。

原因是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

于 2013-10-02T22:13:35.497 回答