在声明中使用的形式参数(Using parameter from form in IN statem

2019-10-22 18:15发布

我有几个输入,然后被传递到查询的形式。 这是非常简单的,但我想在IN语句中使用我的SQL像我这样的参数之一:

Select sum(id) as numobs from table where year=[form]![form1]![year] and (group in([form]![form1]![group]));

当[表格]![Form1中]![组] = “3,4”,它querys “组中(34)”,如果[表格]![Form1中]![组] = “3,4”,则我得到一个错误说“这种表达的输入不正确,或者实在是太复杂,无法评估。”

我希望能够进入的形式在现场用逗号分隔的多个号码,然后有一个查询中使用结果的陈述。 这看起来是可行的?

我知道用VBA我能做的if-then语句来看看一组数字每个可能的组合(有超过40组,以便combinatorically有超过4万亿方式到40+基团结合,因为42的总和选择k从0到42超过4万亿美元),以便使用IN语句似乎是一个更好的选择。

关于如何获取报表的任何想法与形式的参数来工作?

谢谢

Answer 1:

这可以用VBA模块中的子非常简单地完成:

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


Answer 2:

我不能想出一个办法做到这一点的IN

我的解决办法:在你的数据库中的VBA模块中,写一个子建基于表单控件的值的查询。 让我们用Split方法,使一个数组,我们可以遍历构建查询。

Sub MakeTheQuery()
Dim strSQL As String, db As DAO.Database
Set db = CurrentDb()

strSQL = "SELECT sum(id) AS numobs _
FROM table WHERE ("

Value = Forms!YourForm!YourControl.Caption
'The property may vary with controls ^

'Create an array from the control values
anArray = Split(Value, ",")

'Add to the query for each value
For i = LBound(anArray) To (UBound(anArray) - 1)
strSQL = strSQL & " ErrorKey.ID = " & anArray(i) & " OR"
Next i

'Wrap it all up
strSQL = strSQL & " ErrorKey.ID = " & anArray(UBound(anArray)) & ")"

'Assign SQL to query
db.QueryDefs!YourQuery.SQL = strSQL

End Sub

请记住这是假定从表单控件的字符串将空格的格式,但你可以很容易地改变,通过使用anArray = Split(Value, ", ")代替(注意空格添加逗号后)。

要转到指定的VBA子到窗体上的按钮或其他控件Layout View ,单击控制,去Event选项卡上的属性表,击中......开点击旁边按钮。 打Code Builder 。 把Call MakeTheQuery在子,它建立你。 如果你想运行查询,也把DoCmd.OpenQuery "YourQuery"

你也可以用这种方法来建立一个更复杂的,动态的参数查询 。



Answer 3:

您可以考虑INSTR()函数,而不是在。 假设要生成编号列表程序上,而不是强迫最终用户键入一个逗号分隔的列表,可以改变的格式。 我们通常使用管隔板,因此,例如,输入可以是这样的: [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. 该管道确保我们没有得到误报(例如,发现3当我们通过34)。 我们用这个多选列表框和一个自定义的VBA函数,但它是完全可行的,你必须在格式控制的任何时间。 InStr函数- support.office.com



文章来源: Using parameter from form in IN statement