我试图创建一个漂亮的骨架搜索工具来从表(“ApplicationTable”)拉记录。向用户呈现包含多个文本框控件的表单,每个表单对应于表中的一个字段(ApplicationID,FirstName,LastName等)。它们将数据输入到他们希望的任何字段中,然后单击按钮。搜索应返回相应字段包含搜索参数的每个记录,并忽略任何空白的搜索字段。数据显示在弹出的报告中。试图定制一个查询搜索功能没有vba
例如,如果在ApplicationID控件中输入“A17”,它将返回ApplicationID字段包含“A17”的所有记录。如果在ApplicationName和“John”中输入“A17”到FirstName中,它将返回ApplicationID字段包含“A17”和FirstName字段包含“John”的所有记录。如果您点击搜索按钮并且所有字段都为空白,它只会返回表格中的所有记录。
不幸的是,对于我的生活,我无法通过简单的查询获得SQL权限,因此我不得不使用vba。但我不想这样做,因为它使得很多事情比需要的复杂得多。 (例如,我试图将结果导出到Excel,这是一种痛苦,因为传输格式表不能接受动态SQL。)
SO!
这是我目前使用VBA代码:
Dim QueryStr As String
Dim AddAnd As Boolean
AddAnd = False
If Not IsNull([Forms]![ClientSearchForm]![ApplicationID]) Then
QueryStr = QueryStr & "((ApplicationTable.ApplicationID) Like '*' &
[Forms]![ClientSearchForm]![ApplicationID] & '*')"
AddAnd = True
End If
If Not IsNull([Forms]![ClientSearchForm]![NevadaApplicationID]) Then
If AddAnd = True Then
QueryStr = QueryStr & " AND "
End If
QueryStr = QueryStr & "((ApplicationTable.NevadaApplicationID) Like '*'
& [Forms]![ClientSearchForm]![NevadaApplicationID] & '*')"
AddAnd = True
End If
If Not IsNull([Forms]![ClientSearchForm]![FirstName]) Then
If AddAnd = True Then
QueryStr = QueryStr & " AND "
End If
QueryStr = QueryStr & "((ApplicationTable.ClaimantFirstName) Like '*' &
[Forms]![ClientSearchForm]![FirstName] & '*')"
AddAnd = True
End If
If Not IsNull([Forms]![ClientSearchForm]![LastName]) Then
If AddAnd = True Then
QueryStr = QueryStr & " AND "
End If
QueryStr = QueryStr & "((ApplicationTable.ClaimantLastName) Like '*' &
[Forms]![ClientSearchForm]![LastName] & '*')"
AddAnd = True
End If
If Not IsNull([Forms]![ClientSearchForm]![AssignedStaff]) Then
If AddAnd = True Then
QueryStr = QueryStr & " AND "
End If
QueryStr = QueryStr & "((ApplicationTable.AssignedStaff) Like '*' &
[Forms]![ClientSearchForm]![AssignedStaff] & '*')"
AddAnd = True
End If
If Not IsNull([Forms]![ClientSearchForm]![VictimDescription]) Then
If AddAnd = True Then
QueryStr = QueryStr & " AND "
End If
QueryStr = QueryStr & "((ApplicationTable.VictimDescription) Like '*' &
[Forms]![ClientSearchForm]![VictimDescription] & '*')"
AddAnd = True
End If
DoCmd.OpenReport "ClientSearchQuery", acViewReport, , QueryStr
“ClientSearchQuery” 是我使用的核心查询,没有它的任何过滤器:
SELECT ApplicationTable.PrimaryAppID, ApplicationTable.ApplicationID, ApplicationTable.NevadaApplicationID,
ApplicationTable.EarliestReceivedDate, ApplicationTable.ClaimantFirstName, ApplicationTable.ClaimantLastName,
ApplicationTable.AssignedStaff, ApplicationTable.ContactDate, ApplicationTable.VictimDescription
FROM ApplicationTable;
帮助?我假设我需要使用iif来让这个事情只用SQL来进行,但是我无法获得正确的语法,并且它会抛出错误或返回错误的结果。
完美的工作! –