我正在设计一个搜索表单,根据4个文本字段,Firstname,Surname,Phonenumber和Promo Code搜索我的访问数据库。
查询如下:
Like "*" & [Forms]![SearchF]![txtFirstName] & "*"
Like "*" & [Forms]![SearchF]![txtSurnameName] & "*"
Like "*" & [Forms]![SearchF]![txtPhone] & "*"
Like "*" & [Forms]![SearchF]![txtPromo] & "*"
如果所有字段都为空,则搜索应返回所有记录。在文本框中输入一些值时,结果会缩小到匹配。
它几乎可以正常工作,但在某些字段中没有值时会出现问题。例如,如果某人没有促销代码,那么即使您将其留空,也会始终跳过他们的记录。我假设访问查询不喜欢空白字段。
解决这个问题的最简单方法是什么?
答案 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
比较的那些行。