我有一个带有几个输入的表单,然后将这些输入传递给查询。这非常简单,但我希望在sql中的in语句中使用参数之一,如下所示:
Select sum(id) as numobs from table where year=[form]![form1]![year] and (group in([form]![form1]![group]));当form="3,4“在(34)中查询”组“时,如果form="3,4”,则会出现一个错误,即“该表达式键入错误,或者它太复杂,无法计算.”
我希望能够在表单中的字段中输入由逗号分隔的多个数字,然后让查询在in语句中使用结果。这看起来可行吗?
我知道,使用VBA,我可以做if-然后语句来查看每一个可能的组数组合(有40多个组,所以组合起来有超过4万亿种方法来组合40+组,因为42选择k从0到42是超过4万亿),所以使用IN语句似乎是一个更好的选择。
对于如何让IN语句与表单中的参数一起工作有什么想法吗?
谢谢
发布于 2015-04-22 08:25:48
这可以非常简单地通过VBA模块中的sub来完成:
Sub MakeTheQuery()
Dim db As DAO.Database
Dim strSQL As String
Dim strElements As String
Set db = CurrentDb()
strSQL = "SELECT Sum(id) AS numobs " & _
"FROM ErrorKey WHERE ErrorKey.ID In ({0});"
' Example: "3,5"
strElements = Forms!YourForm!YourControl.Caption
' Assign SQL to query
db.QueryDefs!YourQuery.SQL = Replace(strSQL, "{0}", strElements)
End Sub发布于 2016-07-28 18:50:12
您可以考虑Instr()函数而不是In。假设您是按过程生成编号列表,而不是强迫最终用户键入逗号分隔的列表,则可以更改格式。我们通常使用管道分隔符,因此,例如,输入可能如下所示:将[form]![form1]![group]="|3|4|"作为单个字符串参数传递给查询,并在Instr()函数中进行测试,如下所示:Instr([form]![form1]![group],"|" & group & "|")>0 ' Instr() returns a numeric value of the position in the first argument where the second argument is found.管道确保不获得假阳性(例如,在传递34时查找3)。我们使用这个多选择列表框和一个自定义的VBA功能,但它是完全可行的任何时候,你可以控制的格式。Instr函数- support.office.com
https://stackoverflow.com/questions/29779515
复制相似问题