【发布时间】:2015-10-07 17:23:56
【问题描述】:
我有一个列表框,其中填充了以下数据。我只希望能够按名称列进行选择(视觉上)。
id | name
1 | value1
2 | value2
我需要一些条件发生并将它们应用到我的 SQL 中的 where 语句中。
- 如果未选择任何内容,则将 where 语句全部省略
- 如果包含 1 个值,请将 where id = 1
-
如果两个值都被选中,则创建如下 IN 语句
IN ('1','2')
编辑 --//
这是在初始化时填充列表框的代码
Sub UserForm_Initialize()
'SQL query that will populate the Mode Box
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Set cnn = New ADODB.Connection
Set rst = New ADODB.Recordset
cnn.Open "Provider=SQLOLEDB;Data Source=yadayda;" & _
"Initial Catalog=db;" & _
"Integrated Security=SSPI;"
Set rst = cnn.Execute("SELECT [ID] AS [ID],[Name] AS [Name] FROM [Table]")
rst.MoveFirst
i = 0
With Me.form_mode
.Clear
Do
.AddItem
.List(i, 0) = rst![Mode]
.List(i, 1) = rst![ID]
i = i + 1
rst.MoveNext
Loop Until rst.EOF
End With
rst.Close
cnn.Close
Set rst = Nothing
Set cnn = Nothing
End Sub
编辑 -// 使用以下方法让它工作
`将 strFilter 调暗为字符串 将 i 调暗为整数
For i = 0 To Main_Window.form_mode.ListCount - 1
If Main_Window.form_mode.Selected(i) Then
If strFilter <> vbNullString Then strFilter = strFilter & ", "
strFilter = strFilter & "'"
strFilter = strFilter & Main_Window.form_mode.List(i, 1)
strFilter = strFilter & "'"
End If
Next i`
感谢此线程中的@ralph - VBA - SQL with optional joins
【问题讨论】:
-
您的标签使用
excel-vba,但这听起来像是一个带有 SQL 行源的 Access 表单列表框。 -
我在 Excel 中执行此操作。添加人口代码进行编辑
-
创建“where”子句的具体问题是什么?请注意,您还可以通过将
IN()用于单一选择案例来简化您的逻辑。 -
啊,我的印象是你不能做 WHERE [col] IN ('1')。我需要能够选择多个值,比如说我有 10 个选项可供选择,但只能选择 5 个。如何在 IN 语句中循环这些值。