我有一个名为" Expertise"其中包含有关医生/护士/外科医生的数据,以便Doctor1可能拥有"小儿外科医生;神经病学"在这个领域里。基本上只是关于博士的一堆信息将填补这个领域。我在表单上有四个搜索框,用户可以搜索特定的医疗保健专业人员。有人可能想要搜索"儿科","外科医生"和"神经病学"。我现在使用SQL进行此设置,我的代码如下所示:
AND (dbo_Contact.Expertise) Like "*" & [Forms]![Data_Qry_Test_Page]![Expertise1] & "*"
AND (dbo_Contact.Expertise) Like "*" & [Forms]![Data_Qry_Test_Page]![Expertise2] & "*"
AND (dbo_Contact.Expertise) Like "*" & [Forms]![Data_Qry_Test_Page]![Expertise3] & "*"
AND (dbo_Contact.Expertise) Like "*" & [Forms]![Data_Qry_Test_Page]![Expertise4] & "*"
注意我是如何使用Like的,因为用户可能想要查找单词" Surg"这将返回包含手术和外科医生的记录。如果记录在其专业领域中具有儿科,外科医生和神经病学的话,这将非常有用。但是我需要这个查询来返回在他的专业领域只有外科医生的Doctor1和在他的专业领域中有神经病学的Doctor2。
如果我使用OR代替AND,它将返回数据库中的所有记录。我相信我必须使用Nz()函数,但我不确定如何。
答案 0 :(得分:1)
我认为你的问题只是在布尔逻辑的组织中。
您的查询现在的工作方式,只有在所有4个字段中都存在dbo_Contact.Expertise
时才会得到结果。
你想要的是,如果{1}存在于field1或field2或field3或field4中。
您目前获取整个数据库的原因是因为您在此组中有一些标准,而您未在此处包含这些标准。它的说法"以上所有这些东西"或者"用专业知识检查这个"
相反,您需要将其作为一个组包含在上面的其他组中。
Expertise
注意我是如何将所有约束放在parens和#34; anded"它们与先前的约束一起。
答案 1 :(得分:1)
您可以使用Nz
将空文本框值转换为字符串,该字符串永远不会匹配dbo_Contact.Expertise
中存储的任何值。例如,说“BOGUS”永远不会匹配。然后Like '*BOGUS*'
也永远不会匹配。
因此,您可以OR
这些Nz
条件。任何非空文本框都将选择匹配的行。空文本框不会选择任何文本框。 (并且查询结果集是由每个条件选择的行的组合。)
SELECT c.*
FROM dbo_Contact AS c
WHERE
c.Expertise Like '*' & Nz(Forms!Data_Qry_Test_Page!Expertise1, 'BOGUS') & '*'
OR c.Expertise Like '*' & Nz(Forms!Data_Qry_Test_Page!Expertise2, 'BOGUS') & '*'
OR c.Expertise Like '*' & Nz(Forms!Data_Qry_Test_Page!Expertise3, 'BOGUS') & '*'
OR c.Expertise Like '*' & Nz(Forms!Data_Qry_Test_Page!Expertise4, 'BOGUS') & '*'