【发布时间】:2020-07-13 15:40:51
【问题描述】:
我正在基于多选列表框中的选择构建一个 SQL 字符串,为了实现这一点,我试图确定我的列表框的绑定列的类型是否为字符串。 我写了以下代码:
If lstBox.ItemsSelected.Count > 0 Then
lstVar = lstBox.ItemData(i)
Debug.Print VarType(lstVar)
For Each varItem In lstBox.ItemsSelected
strCrit = strCrit & "," & "'" & lstBox.ItemData(varItem) & "'"
Next varItem
' remove first comma
strCrit = Mid(strCrit, 2)
在 debug.print VarType 语句中,它总是产生字符串类型,即使列表框的绑定列是自动编号字段。我想知道类型是否是数字而不是字符串,以便稍后在我的 SQL 语句中
SELECT … FROM … WHERE … IN (x,y,z)
我可以编写正确的 WHERE ... IN 标准,以后不会导致类型不匹配。有没有办法准确确定列表框绑定列的变量类型?也许我应该通过查看列表框的行源的类型来解决这个问题。因为我正在使用这个函数来遍历构建 where 条件的多个列表框,所以我需要它是动态和灵活的,因为某些列表框绑定的列将是数字,而其他列将是字符串,所以我不能只是将其硬编码到循环中。
【问题讨论】:
-
lstVar是如何声明的? -
lstVar 被声明为变体
-
在任何情况下,
ListBox中的选定项目始终是String。你不能得到底层类型,因为它在那个时候已经消失了:它是一个String。获取ID进入列表框,拉取ID,然后使用该ID查询源;记录集将具有正确的类型。 -
ID在列表框中,我已经拉出来了。但我只是不确定如何在不确定绑定列的类型的情况下指定在 IN 标准周围不使用引号。否则我会收到类似
SELECT foo FROM bar WHERE myID IN ('1','2','3')的查询,这会导致类型错误。我想要...myID IN (1,2,3),但如果我有一个实际的字符串,我希望该函数也能在那里工作...myStr IN ('a','b','c') -
您可以在临时表中插入您想要的 ID,然后从您的源中选择并加入该临时表。基本上完全放弃
IN("foo", "bar")路径
标签: ms-access vba ms-access-2016