MS使用空字段或列表框中的多个选项进行多字段搜索

时间:2013-11-26 21:51:43

标签: sql ms-access vbscript

有人可以帮助我使用MS Access吗?我的问题类似于以下链接中的问题:

MS Access multi field search with empty fields

但在我的情况下,每个搜索字段都是一个列表框,我们可以从中选择多个内容。

在我的情况下,数据库应用程序的用户将输入开始日期和结束日期(文本框),这将填充与单个数据库表中的列表框(成本中心,项目编号,员工ID)相匹配的行生效日期介于开始日期和结束日期之间。填充列表框后,用户可以选择选择多个成本中心或将搜索字段留空,多个项目编号或空白,多个员工编号或空白。选择后,如果按下命令按钮显示结果,我们应该能够得到满足所有这些搜索条件的结果。例如,如果我选择成本中心1301,1302和员工编号492128,492690,492959并将项目编号搜索字段留空,则在数据表中,所有与这些成本中心和员工编号匹配的条目(

。应显示所有搜索字段是单独的列,这些列位于开始日期和结束日期之间。

我无法在VB中获得逻辑。请指导我。

1 个答案:

答案 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

希望这有帮助