在 sql 语句中引用 ListBox 多选值

Posted

技术标签:

【中文标题】在 sql 语句中引用 ListBox 多选值【英文标题】:Referencing ListBox multiselect values in sql statement 【发布时间】:2014-08-31 22:38:21 【问题描述】:

我想使用多选列表框的一列中的匹配值打开一个记录集。目前我的代码只打开并编辑选择的最后一条记录,我希望它打开所有这些记录。这是我的代码:-

 Set oRSAppt = Application.CurrentDb().OpenRecordset("Select * FROM [Appointments] WHERE [SlotID] =" & ListBox.Column(7, ListBox.ItemsSelected))
With oRSAppt
    If .BOF = True And .EOF = True Then
        MsgBox "No records found", , "Failed"
        Exit Sub
    Else
    .MoveFirst
    Do While Not .EOF
    .Edit
    .Fields("Status").Value = "Invoiced"
    .Fields("InvoiceID").Value = vInvoiceID
    .Update
    .MoveNext
    Loop
    .Close
    End If
End With

此链接建议使用 for 循环从列表框中获取选定的值 http://msdn.microsoft.com/en-us/library/office/ff823015%28v=office.15%29.aspx 但我不确定如何在 sql 语句中执行此操作,或者我是否应该以这种方式执行此操作 - 也许我已经研究了很长时间,我错过了一个明显的解决方案。任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

您需要先构建 SQL 语句,是的,您需要使用循环。像这样的东西应该可以解决问题:

Dim strSQL as String
Dim vItm as Variant
Dim oRSAppt As DAO.Recordset

For Each vItm In Me!Listbox.ItemsSelected
    strSQL = strSQL & ListBox.Column(7, vItm) & ","
Next vItm

strSQL = left(strSQL,len(strSQL) - 1) ' remove last comma

Set oRSAppt = CurrentDb.OpenRecordset("Select * FROM [Appointments] " _
    WHERE [SlotID] In (" & strSQL & ")")

【讨论】:

正是我需要的,完美运行 - DAO.Recordset 是否优于 Object?感谢您的帮助。 我添加了一个 ListBox.ItemsSelected.Count = 0 的 If 语句来处理空值。 DAO.Recordset 更可取,您可以输入 itellisense,我会说明确声明不需要额外引用的任何变量都是一件好事。

以上是关于在 sql 语句中引用 ListBox 多选值的主要内容,如果未能解决你的问题,请参考以下文章

将多选 ListBox 与 MVVM 同步

JS获取select option获取选中的值多选

使用 AngularJS 将所​​选值绑定到多选 ListboxFor 控件

MVC 5下拉列表用于编辑视图中的多选值绑定

Python中tkinter中控件的使用(6.Listbox列表框(单击多选))

VueJS中的多个多选值作为一个对象?