2016-08-05 225 views
0

我有一个带有文本字段和子窗体的访问表单。文本字段是一个名为myQuery的查询的参数,子表单显示myQuery的结果。访问:使用DAO.recordset运行查询,从另一个查询中进行选择

在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

Regards

+4

您保存的查询引用了窗体上的控件,因此当您调用保存的查询时,它会尝试将“Forms!SomeForm!TextField”作为参数进行计算,而不是查看实际控件本身。取消保存的查询并将完整的查询文本放入查询字符串变量中。 –

+0

谢谢,通过一些调整,我能够让你的方法工作。 – Carl

+0

或者如果查询足够复杂以至于您不想将整个SQL放入VBA中,则可以使用以下命令:http://stackoverflow.com/a/32118340/3820271 – Andre

回答

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) 
相关问题