[英]Multi-field searches in Access with blank fields
我在访问中有一个表(简体),其中包含性别,名字,姓氏和电话号码。
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] & "*"
“搜索”是我的表单的名称,“条件”是我的表单上各个条目的名称。
现在,如果我搜索Sex F和姓氏Smith,并将姓氏和姓氏字段留空,则希望能够看到“ Alice Smith”和“ Smithe”的记录。 但是,我只得到了“爱丽丝·史密斯”的唱片。 此外,如果我搜索性别F和电话号码111,则可以获得有关爱丽丝,史密斯和夏娃的结果。 同样,如果仅搜索电话号码,我将获得全部五个记录。
我以为我在这里做错了什么,但我不知道这是什么。 根据或的条件逻辑,结果应为Null或111(其他字段相似),因此我认为它的行为符合预期。 但是,我尝试了xor,得到的结果相同(即使按我认为的方式工作,它也似乎很糟糕,因为空白条目将被解释为null而不是“搜索每个条目”。我尝试使用iif,这应该是正确的方法,但是放在“条件”字段中似乎不起作用。我在这里遗漏了什么吗?
Null
是特殊值(与意义not-known
),它是不一样的空白文本字段 ,其值为""
(空字符串)。
因此,调整您的条件以接受值""
。
对于多字段搜索,请对每个字段使用如下条件:
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。
构建此查询的另一种方法是根据填充的字段构建字符串。
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.