You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Access查询中获取ListBox控件的数据

Access查询从ListBox获取多选值无结果的解决方法

你的查询无结果的核心原因是:ListBox多选时,Forms![_Teilenummerneingabe3Form]![TestListe]返回的是逗号分隔的字符串,但SQL的In子句需要的是独立的参数列表(比如In ('位置1','位置2')),直接用控件值会被当成单个字符串(比如In ('位置1,位置2')),自然匹配不到数据。

以下是两种可行的解决方法:

方法一:用VBA生成动态查询

编写VBA代码获取ListBox的选中项,拼接成符合SQL语法的参数列表,再更新查询语句:

Dim db As DAO.Database
Dim qdf As DAO.QueryDef
Dim selectedItems As String
Dim i As Integer

Set db = CurrentDb()
Set qdf = db.QueryDefs("你的查询名称") ' 替换成你实际的查询名

' 遍历ListBox选中项,拼接带单引号的字符串
For i = 0 To Forms![_Teilenummerneingabe3Form]![TestListe].ListCount - 1
    If Forms![_Teilenummerneingabe3Form]![TestListe].Selected(i) Then
        ' 若位置值含单引号,用Replace转义
        selectedItems = selectedItems & "'" & Replace(Forms![_Teilenummerneingabe3Form]![TestListe].Column(0, i), "'", "''") & "', "
    End If
Next i

' 处理拼接后的字符串,更新查询
If Len(selectedItems) > 0 Then
    selectedItems = Left(selectedItems, Len(selectedItems) - 2) ' 去掉末尾多余的逗号和空格
    qdf.SQL = "SELECT DISTINCT [L-Ort1] FROM NeueAbfrageForm WHERE [L-Ort1] In (" & selectedItems & ")"
Else
    ' 无选中项时返回空结果
    qdf.SQL = "SELECT DISTINCT [L-Ort1] FROM NeueAbfrageForm WHERE 1=0"
End If

Set qdf = Nothing
Set db = Nothing

你可以把这段代码绑定到按钮的点击事件,点击后再打开报表使用该查询。

方法二:直接在报表中动态设置记录源

既然最终是给标签报表用,也可以跳过单独查询,直接在报表打开时设置记录源:

Private Sub Report_Open(Cancel As Integer)
    Dim selectedItems As String
    Dim i As Integer

    For i = 0 To Forms![_Teilenummerneingabe3Form]![TestListe].ListCount - 1
        If Forms![_Teilenummerneingabe3Form]![TestListe].Selected(i) Then
            selectedItems = selectedItems & "'" & Replace(Forms![_Teilenummerneingabe3Form]![TestListe].Column(0, i), "'", "''") & "', "
        End If
    Next i

    If Len(selectedItems) > 0 Then
        selectedItems = Left(selectedItems, Len(selectedItems) - 2)
        Me.RecordSource = "SELECT DISTINCT [L-Ort1] FROM NeueAbfrageForm WHERE [L-Ort1] In (" & selectedItems & ")"
    Else
        Cancel = True
        MsgBox "请选择至少一个位置"
    End If
End Sub

注意事项

  • 确认ListBox的绑定列和列索引:代码中Column(0, i)代表取ListBox第1列的值(索引从0开始),如果你的位置值在其他列,要修改对应的索引数字。
  • 若位置字段包含单引号,必须用Replace方法转义,否则会导致SQL语法错误。

内容的提问来源于stack exchange,提问作者Razer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 09:53:12