dlo*_*loh 3 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] & "*"
Run Code Online (Sandbox Code Playgroud)
如果所有字段都为空,则搜索应返回所有记录.在文本框中输入一些值时,结果将缩小为匹配.
它几乎可以正常工作,但是当某些字段中没有值时会出现问题.例如,如果某人没有促销代码,那么即使您将其留空,也会始终跳过他们的记录.我假设访问查询不喜欢空白字段.
什么是解决这个问题的最简单方法?
我认为文本框在这里可能有点分心,因为问题更基本.考虑这个查询......
SELECT f.id, f.some_text
FROM tblFoo AS f
WHERE f.some_text Like "*";
Run Code Online (Sandbox Code Playgroud)
它返回some_text包含任何非Null值的行,甚至是空字符串.但是它不会返回some_textNull的行.
原因是Like比较中的Null 永远不会评估为True.从立即窗口考虑这个例子......
? "foo" Like "*"
True
? Null Like "*"
Null
Run Code Online (Sandbox Code Playgroud)
对于您的Like比较,我认为您希望目标字段包含文本框文本的行.但是当文本框为Null时返回所有行.你可以通过将这两个条件结合起来做到这一点OR.
WHERE
[Promo Code] Like "*" & Forms!SearchF!txtPromo & "*"
OR
Forms!SearchF!txtPromo Is Null
Run Code Online (Sandbox Code Playgroud)
当文本框为Null时,OR对于所有行,第二部分为true,因此返回所有行.
当文本框不是Null时,仅Like返回满足比较的那些行.