【发布时间】:2019-09-28 20:06:32
【问题描述】:
似乎我不能像通常那样在 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)不知什么原因没有值,但它确实是因为我可以Debug.Print(coProj(1)),所以它与声明有关。
有什么建议吗?
【问题讨论】:
-
你
Debug.Print conoProj(1)但代码中的变量是coProj(1)。我不使用动态参数化查询。我将构建一个表单并使用 VBA 构建过滤条件并设置表单 Filter 和 FilterOn 属性。甚至是一个子窗体。 allenbrowne.com/ser-62.html -
我认为查询中需要PARAMETERS子句。
-
我看不出有关更新查询的问题与询问选择查询的问题是如何重复的。请实际阅读问题,而不是急于说它是重复的,然后链接到不相关的东西。
-
引用的问题的答案显示了如何在 VBA 中使用 PARAMETERS 和 QueryDef,这是您问题的基础。不管是SELECT还是UPDATE,使用PARAMETERS都是一样的。您是否费心阅读答案?但是,正如 Andre 的回答中所指出的,VBA 对于用作 RecordSource 的查询毫无用处,因此相关性没有实际意义。