访问:使用从另一个查询中选择的 DAO.recordset 运行查询
Posted
技术标签:
【中文标题】访问:使用从另一个查询中选择的 DAO.recordset 运行查询【英文标题】:Access: Running query with DAO.recordset that selects from another query 【发布时间】:2016-08-05 18:19:00 【问题描述】:我有一个带有文本字段的访问表单和一个子表单。文本字段是名为 myQuery 的查询的参数,子表单显示 myQuery 的结果。
在 VBA 中,我想访问 myQuery 的第一行,所以我尝试使用 DAO.recordsets
,如下所示:
dim query as string
dim rs as DAO.recordset
query = "select top 1 * from myQuery"
set rs=CurrentDb.OpenRecordset(query)
我收到一条错误消息,提示“参数太少”。
如果我转到创建查询选项卡,并运行 SQL 代码“从 myQuery 中选择前 1 个*”,它就可以工作。我猜当通过CurrentDb.OpenRecordset
运行查询时,您不能像使用常规 SQL 那样将另一个查询视为表。
有谁知道如何使用OpenRecordset
从另一个查询中进行选择?
问候
【问题讨论】:
您保存的查询引用了表单上的控件,因此当您调用保存的查询时,它会尝试评估Forms!SomeForm!TextField
作为参数,而不是查看实际的控件本身。删除保存的查询并将完整的查询文本放入您的 query
字符串变量中。
谢谢,通过一些调整,我能够让你的方法发挥作用。
或者如果查询复杂到不想将整个 SQL 放到 VBA 中,可以使用这个:***.com/a/32118340/3820271
【参考方案1】:
考虑使用 querydef 并在打开记录集之前评估参数。但是,在此实例中不能使用特定的SELECT
表达式,只能使用整个查询对象。 TOP 1
可以通过选择记录集值进行镜像,而无需循环(因为它首先选择)。
Dim db As DAO.Database
Dim qdf As DAO.querydef
Dim rst As DAO.Recordset
Set db = CurrentDb
Set qdf = db.QueryDefs("myQuery")
For Each prm In qdf.Parameters
prm.Value = Eval(prm.Name)
Next prm
Set rst = qdf.OpenRecordset(dbOpenDynaset)
rst.MoveFirst
Debug.Print rst.Fields(0), rst.Fields(1), rst.Fields(2), rst.Fields(3), rst.Fields(4)
【讨论】:
以上是关于访问:使用从另一个查询中选择的 DAO.recordset 运行查询的主要内容,如果未能解决你的问题,请参考以下文章
Oracle SQL:从一个表中选择一个计数,从另一个表中使用子查询缩小选择范围