繁体   English   中英

Access中具有空白字段的多字段搜索

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM