我有一个只有1个表的数据库,该表有27个以上的字段,但并非所有字段都包含值(某些字段为空)。我在导航表单上有一个按钮(“搜索警报”),该按钮执行多字段搜索,用户可以搜索6个不同的字段,并且用户可以同时使用1到6个条件(请参阅照片)。 。
例如,我可以仅按名称搜索,也可以按名称和标记等搜索,即使该记录中还有一些其他缺少的字段,我也希望显示所有包含这些项目的记录。
下面是单击按钮时执行的代码。
varI = DLookup("Tag", "tblAlarms", "Tag Like '*" & Forms![frmHomePage]!inputTag & "*'")
varJ = DLookup("Name", "tblAlarms", "Name Like '*" & Forms![frmHomePage]!inputName & "*'")
varX = DLookup("Plant_Identification_Number", "tblAlarms", "Plant_Identification_Number Like '*" & Forms![frmHomePage]!inputPlantID & "*'")
varY = DLookup("Priority", "tblAlarms", "Priority Like '*" & Forms![frmHomePage]!inputPriority & "*'")
varZ = DLookup("Group", "tblAlarms", "Group Like '*" & Forms![frmHomePage]!inputGroup & "*'")
varK = DLookup("Classification", "tblAlarms", "Classification Like '*" & Forms![frmHomePage]!inputClass & "*'")
If Not IsNull(varI) And Not IsNull(varJ) And Not IsNull(varX) And Not IsNull(varY) And Not IsNull(varZ) And Not IsNull(varK) Then
DoCmd.OpenForm "frmAlarms", acNormal, "", "Tag Like ""*"" & [Forms]![frmHomePage]![inputTag] & ""*"" and Name Like ""*"" & [Forms]![frmHomePage]![inputName] & ""*"" and Plant_Identification_Number Like ""*"" & Forms![frmHomePage]!inputPlantID & ""*"" and Priority Like ""*"" & Forms![frmHomePage]!inputPriority & ""*"" and Group Like ""*"" & Forms![frmHomePage]!inputGroup & ""*"" and Classification Like ""*"" & Forms![frmHomePage]!inputClass & ""*""", acEdit, acNormal
DoCmd.Close acForm, "frmHomePage", acSaveNo
Me.Visible = False
Else
MsgBox "0 Search Results Were Found!"
Me.Visible = True
End If
我的问题是,当数据表中缺少字段时,我无法运行查询/搜索(DoCmd.OpenForm行)。
我尝试删除'If'条件,以便无论是否缺少字段都将运行命令,但是ms access不会返回任何记录,除非该记录包含所有字段中的数据。有没有解决的办法?
我想到了以下内容:
具有“ If”语句,可以根据输入的数据执行不同的查询,但是有6种不同的字段可以从720种不同的组合中进行搜索。
根据搜索输入构建查询字符串(代码中的DoCmd.OpenForm行),但是我想不出一种方法来使代码知道何时在两者之间添加“&”。
尝试使用按钮只是运行查询,但是问题仍然是,如果记录中缺少字段,即使搜索条件匹配,该记录也不会显示。例如,如果我搜索标记= 1234的所有记录,则仅当该记录中的所有27个以上字段都包含一个值时,这些记录才会显示。
是否可以在所有空字段中输入“ n / a”,但是有没有一种自动执行此操作的方法?由于该数据库有一个用户输入部分,因此如果在创建新记录时自动用“ n / a”填充空白字段,则将是理想的选择。尽管这会使表/数据看起来有些混乱,所以还是希望采用一种解决搜索查询和缺少字段的方法。
任何帮助将不胜感激!预先感谢。
答案 0 :(得分:0)
字符串连接不正确。考虑:
DoCmd.OpenForm "frmAlarms", acNormal, , "[Tag] LIKE '*" & Me.inputTag & _
"*' AND [Name] LIKE '*" & Me.inputName & _
"*' AND Plant_Identification_Number LIKE '*" & Me.inputPlantID & _
"*' AND Priority LIKE '*" & Me.inputPriority & _
"*' AND [Group] LIKE '*" & Me.inputGroup & _
"*' AND Classification LIKE '*" & Me.inputClass & *'", acEdit, acNormal
LIKE和通配符在数字字段上将无法正常工作。
处理记录选项中的空(空)字段:
计算,如果字段为null则返回值-“不适用”的想法-对该字段应用过滤条件
包括OR Is Null
,OR短语两个部分的括号都至关重要
但是,如果要使用VBA构建标准字符串(与动态参数化查询对象相对),则有条件地构建字符串可能是最好的方法。如果文本框中没有输入,则不包含条件。查看http://allenbrowne.com/ser-62.html
标记,名称和组是保留字。请勿将保留字用作名称,以免发生意外结果。包含在[]中应该可以解决,但最好避免。