首页 > 解决方案 > 在 Access 中传递参数以使用 VBA 进行查询并获取“”

问题描述

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

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

因为它是表单中的一个表,并且是一个子表单/子报表,所以从我读到的唯一方法来填充它是使用预构建的 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)没有值,因为某种原因,但它确实是因为 I can Debug.Print(coProj(1)),所以它与声明有关。

有什么建议么?

标签: vbams-access

解决方案


将参数设置为 querydef 对作为表单记录源的 SELECT 查询没有好处。它只对打开记录集有用。

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

但这没关系 - 如果您想动态填写子表单,只需像这样处理它:

Me.mySubformControl.Form.RecordSource = strDynamicSQL

表单:请参阅表单和子表单属性和控件


推荐阅读