在Access中使用VBA传递参数以进行查询并获取“”

时间:2019-05-10 22:39:08

标签: vba ms-access access-vba

似乎不能像通常那样在VBA中构建查询。

我有一个表单,用户可以从列表等中选择参数。他们单击“提交”按钮,该按钮应过滤一个表,以便他们可以仅对那些记录进行更改。该表以相同的形式嵌入到表单的底部。在他们设置参数并提交之前为空。

因为它是表单中的表格,并且是Subform / Subreport,据我所知,填充它的唯一方法是使用预建的Access查询。因此,我需要传递变量以使其动态。

因此查询numberSections如下:

SELECT title, group, group_num
FROM groupings
WHERE co = [co] AND project = [project]
ORDER BY ID;

据我了解,方括号表示变量。

VBA是这样的:

Function RunQueryForGroupings(coProj As Collection)

    Dim qdf As DAO.QueryDef
    Set qdf = CurrentDb.QueryDefs("numberSections")
    qdf.Parameters("co").Value = coProj(1)
    qdf.Parameters("project").Value = coProj(2)
    qdf.Execute
    Set qdf = Nothing

End Function

到达qdf.Parameters("co").Value = coProj(1)时出现以下错误:

Run-time error '3265':

Item not found in this collection.

起初,我认为coProj(1)由于某种原因没有值,但之所以如此,是因为我可以Debug.Print(coProj(1)),所以它与声明有关。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

将参数设置为querydef将对作为表单记录源的SELECT查询不利。这仅对打开记录集有用。

qdf.Execute仅对操作查询(INSERT,UPDATE,DELETE)有效。

但这没关系-如果要动态填写子表单,只需按以下方式解决它:

Me.mySubformControl.Form.RecordSource = strDynamicSQL

Forms: Refer to Form and Subform properties and controls