我在访问(简化)中有一个表格,包括性别,名字,姓氏和电话号码。
Sex First Last Phone
F Alice Smith
M Bob 111-111-1111
F Smithe 111-111-1112
M Charlie Smith
F Eve Drop 111-111-1113
我创建了一个表单以及一个使用
标准搜索记录的查询Is Null Or Like "*" & [Forms]![Search]![Criteria] & "*"
其中Search是我的表单的名称,Criteria是我表单上各个条目的名称。
现在,如果我搜索性别F和姓氏史密斯,并将名字和姓氏字段留空,我希望能够看到" Alice Smith"和" Smithe"。但相反,我只得到了#34; Alice Smith"的记录。此外,如果我搜索性别F和电话号码111,我会得到Alice,Smithe和Eve的结果。同样,如果我只搜索电话号码,我将获得所有五个记录。
我假设我在这里做错了什么,但我无法说出它是什么。基于或的条件逻辑,结果应该是Null或111(和其他字段类似),所以我猜它的行为与预期的一样。然而,我尝试了xor,并且得到了相同的结果(即使它确实按照我认为的方式工作,但它似乎很糟糕,因为空白条目将被解释为null而不是&# 34;搜索每个条目"。我尝试过使用iif,这应该是正确的方法,但是当它放在条件字段时似乎不起作用。我在这里遗漏了什么吗?
答案 0 :(得分:1)
Null
是特殊值(含义not-known
), NOT 与空白文本字段相同,后者具有值""
(空字符串)。
因此请调整您的条件以接受值""
。
答案 1 :(得分:1)
对于多字段搜索,请使用每个字段的条件,如下所示:
WHERE
([Sex] Like "*" & [Forms]![Search]![CriteriaSex] & "*"
OR Nz([Forms]![Search]![CriteriaSex],"")="")
AND ([First] Like "*" & [Forms]![Search]![CriteriaFirst] & "*"
OR Nz([Forms]![Search]![CriteriaLast],"")="")
AND ([Last] Like "*" & [Forms]![Search]![CriteriaLast] & "*"
OR Nz([Forms]![Search]![CriteriaLast],"")="")
AND ([Phone] Like "*" & [Forms]![Search]![CriteriaPhone] & "*"
OR Nz([Forms]![Search]![CriteriaPhone],"")="")
在这种情况下,如果相应的条件字段为空,则每个条件都为TRUE。
答案 2 :(得分:0)
构建此查询的另一种方法是根据填充的字段构建字符串。
q = "SELECT * FROM table "
w = ""
IF(nz([Forms]![Search]![Criteria1],"")<> "") THEN
w = "WHERE [table]![field] like '*" & [Forms]![Search]![Criteria1] & "*'"
END IF
IF(nz([Forms]![Search]![Criteria2],"")<> "") THEN
IF (w="") THEN
w=" WHERE "
ELSE
w=w & " AND "
END
w = w & " [table]![field] like '*" & [Forms]![Search]![Criteria2] & "*'"
END IF
IF(nz([Forms]![Search]![Criteria3],"")<> "") THEN
IF (w="") THEN
w=" WHERE "
ELSE
w=w & " AND "
END
w = w & " [table]![field] like '*" & [Forms]![Search]![Criteria3] & "*'"
END IF
q = q & w