有人可以帮助我使用MS Access吗?我的问题类似于以下链接中的问题:
MS Access multi field search with empty fields
但在我的情况下,每个搜索字段都是一个列表框,我们可以从中选择多个内容。
在我的情况下,数据库应用程序的用户将输入开始日期和结束日期(文本框),这将填充与单个数据库表中的列表框(成本中心,项目编号,员工ID)相匹配的行生效日期介于开始日期和结束日期之间。填充列表框后,用户可以选择选择多个成本中心或将搜索字段留空,多个项目编号或空白,多个员工编号或空白。选择后,如果按下命令按钮显示结果,我们应该能够得到满足所有这些搜索条件的结果。例如,如果我选择成本中心1301,1302和员工编号492128,492690,492959并将项目编号搜索字段留空,则在数据表中,所有与这些成本中心和员工编号匹配的条目(
。应显示所有搜索字段是单独的列,这些列位于开始日期和结束日期之间。我无法在VB中获得逻辑。请指导我。
答案 0 :(得分:0)
您需要在vba中构建一个sql语句,然后使用记录集运行它,以获得结果。
显然我不知道你需要获取的数据是什么,或者从你的表中得到它们;我会得到它,但是where子句需要按如下方式构建:
dim wc as string
wc = wc & iif(lst_costcenter.ItemsSelected.Count = 0, "", " AND " & InClause(lst_costcenter, "tablename.columnname", false))
wc = wc & iif(lst_itemnumber.ItemsSelected.Count = 0, "", " AND " & InClause( ...
最后在构建sql语句时,你需要在wc&中删除第一个“AND”。将其替换为“WHERE”
wc = iif(wc <> "", " WHERE " & mid(trim(wc), 5), "")
InClause是一个需要在模块中或在查询表单中添加的函数: 它使用3个参数: 1.用于构建in子句的列表框控件, 2.包含tablename-dot-columnname的字符串,该列表是要在列表框中选择的值进行过滤的表/列,&amp; 3.根据列的数据类型是字符串(true)还是数字(false)
,为真/假Public Function InClause(lst as ListBox, tblcol as string, isAlpha as boolean)
Dim si As String
Dim vv As Variant
For Each vv In lstBox.ItemsSelected
If isAlpha Then
si = si & "," & Chr(34) & lstBox.Column(0, vv) & Chr(34)
Else
si = si & "," & lstBox.Column(0, vv)
End If
Next vv
If si <> "" Then
si = "(" & tblcol & " IN (" & mid(si, 2) & "))"
End If
InClause = si
End Function
希望这有帮助