【问题标题】:Passing parameters to query with VBA in Access and getting ""在 Access 中传递参数以使用 VBA 进行查询并获取“”
【发布时间】: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 的查询毫无用处,因此相关性没有实际意义。

标签: vba ms-access


【解决方案1】:

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

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

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

Me.mySubformControl.Form.RecordSource = strDynamicSQL

Forms: Refer to Form and Subform properties and controls

【讨论】:

  • 我看到的子表单/子报表没有.RecordSource。只有.SourceObject 这就是为什么我尝试使用 Query 对象,以便我希望可以传入参数。我想我需要看看 MS Access 特定的 VBA 方法来处理表而不是 SQL。
  • 如果您已将查询直接嵌入到主表单中,那么您应该使用基于该查询的子表单(在数据表视图中)。对于子表单,您可以设置记录源。 @sockpuppet
猜你喜欢
  • 1970-01-01
  • 2011-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多