如何在 Access VBA 中引用已保存的查询?

Posted

技术标签:

【中文标题】如何在 Access VBA 中引用已保存的查询?【英文标题】:How can I refer to Saved Queries in Access VBA? 【发布时间】:2018-06-01 04:04:59 【问题描述】:

我正在尝试检查已保存查询中的记录以确定 VBA 是否应禁用某些表单控件:

Dim SavedQry
SavedQry = Queries!qryCurrentItems 'or Queries("qryCurrentItems")

不会编译,因为它要我定义变量“查询”。

您可以使用Forms!FormName!ControlName 执行此类操作来引用控件中的数据,那么为什么不这样呢?


为了清楚起见;有问题的查询具有由表单填充的“参数”。代码如下。

SELECT tblColour.Colour AS Colour
FROM tblColour 
INNER JOIN (tblGenCol 
INNER JOIN tblAutCol ON tblAutCol.Colour = tblGenCol.Colour) 
ON tblGenCol.Colour = tblColour.ID
WHERE tblGenCol.Genre = Forms!frmColourChoice!cmbGenre
AND tblAutCol.Author = Forms!frmColourChoice!cmbAuthor;

参数为 Forms!frmColourChoice!cmbGenre 和 Forms!frmColourChoice!cmbAuthor。

【问题讨论】:

声明变量As QueryDef 并使用CurrentDb().QueryDefs("QueryName") 设置对查询的引用。 【参考方案1】:

使用一两个对象:

Dim SavedQry As DAO.QueryDef
Dim rs As DAO.Recordset

Set SavedQry = CurrentDb.QueryDefs("qryCurrentItems")
SavedQry.Parameter("ParameterName1").Value = SomeValue
SavedQry.Parameter("ParameterName2").Value = AnotherValue
Set rs = SavedQry.OpenRecordset()
' Investigate records.

【讨论】:

这给了我“错误号 3061 - 参数太少。预期为 2。”在点Set rs = SavedQry.OpenRecordset() 然后设置参数值。请查看编辑后的答案。 但是参数在查询中被定义为来自触发此代码的开放表单...难道不应该通过它来解决吗? 太棒了。谢谢!

以上是关于如何在 Access VBA 中引用已保存的查询?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Access VBA,如何计算选择查询中的输出记录数并将计数存储为 VBA 变量?

如何使用 VBA 从 Access 中的表单更改保存的导出路径?

如何在 Access VBA 中运行附加查询以根据表单字段中的数量创建一定数量的相同记录?

在Access 2007 VBA中,未保存的表单和报表是否可以键入为“AccessObject”..?

尝试通过 VBA 创建查询,但即使我引用了 MS Access 15.0 对象库,也无法使用任何 DAO

通过 VBA 在 Access 2007 中运行以相同单词开头的多个查询