【问题标题】:MS Access multi field search with empty fields or multiple selections from list boxes使用空字段或从列表框中进行多项选择的 MS Access 多字段搜索
【发布时间】:2013-12-12 06:48:25
【问题描述】:

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

MS Access multi field search with empty fields

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

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

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

【问题讨论】:

    标签: sql ms-access vbscript


    【解决方案1】:

    您需要在 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 的字符串,该字符串是要为列表框中选择的值过滤的表/列,& 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
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-09
      相关资源
      最近更新 更多