我已经查看过您的前一个例子,详细说明如下。但是我有一个问题:
继承我的代码,它运行在名为Reports:
的表单上的按钮上Dim dbs As Database
Dim qdf As QueryDef
Dim varitem As Variant
Set dbs = CurrentDb()
Set qdf = dbs.QueryDefs("Qry_rpt_cr")
qdf.Parameters(0) = Forms!frm_reports.rmselectfilter.Column(1, varitem)
qdf.Parameters(4) = Forms!frm_reports.rmselectperiod.Column(0, 0)
qdf.Parameters(3) = Forms!frm_reports.rmselectperiod.Column(0, 1)
qdf.Parameters(2) = Forms!frm_reports.rmselectperiod.Column(0, 2)
qdf.Parameters(1) = Forms!frm_reports.rmselectperiod.Column(0, 3)
Set grst = CurrentDb.OpenRecordset("Select * from Qry_rpt_cr")
DoCmd.OpenReport "rpt_cr_test", acPreview
grst.Close
Set grst = Nothing
End Sub
问题是查询需要传递五个参数,然后使用定义的参数打开记录集,然后打开报告。但是代码没有打开。它在这一行上说错误设置grst = CurrentDb.OpenRecordset(“从* Qry_rpt_cr中选择*”)要求5个参数,但我已经在代码中提前通过了它们。任何建议都会受到欢迎。很乐意为正确答案捐款。 ED
您的档案示例 从Access Web,您可以使用记录集的“name”属性。结果代码看起来像这样:
在报告中
Private Sub Report_Open(Cancel As Integer)
Me.RecordSource = gMyRecordSet.Name
End Sub
在调用对象(模块,表单等)中
Public gMyRecordSet As Recordset
'...
Public Sub callMyReport()
'...
Set gMyRecordSet = CurrentDb.OpenRecordset("Select * " & _
"from foo " & _
"where bar='yaddah'")
DoCmd.OpenReport "myReport", acViewPreview
'...
gMyRecordSet.Close
Set gMyRecordSet = Nothing
'...
End Sub
答案 0 :(得分:1)
我暂时没有使用Access,但我认为你是为查询设置params,然后运行不同的查询。 Access要求为您询问的查询提供参数(“select * from ...”),而不是查询引用的(命名)查询,如果有意义的话。
这应该很容易修复,只需从QueryDef运行OpenRecordset
:
Set grst = qdf.OpenRecordSet
然后Access将正确包含查询的参数。
编辑:Thx Remou