【发布时间】:2011-04-28 16:21:15
【问题描述】:
我有一个现有模块,它通过循环遍历另一个表 (School_room_grade),根据查询 (CAP 课堂报告 gr 5) 打印一系列报告。报告是根据模块中与 School_room_grade 表中的行匹配的 WhereCondition 打印的。使用此过程是为了让每个 school_room_grade 组合都有自己的报告,并且不需要重新使用报告。
其中一份报告(CAP Math Gr 5)已经过修改,现在包括 7 个链接的子报告,这使得处理速度变慢。每个子报表都基于相同的查询,但使用不同的字段进行排序。我认为最好取消子报告的链接并将查询限制为一次只有一个 school_room_grade 组合。当我第一次制作报告而不链接子报告时,它似乎运行得更快。但当然,当它没有链接时,报告的排序不起作用。
我在想我应该在外部使用查询进行嵌套循环,然后循环打印报告。您认为这会提高速度吗?
这是在添加链接报表之前有效的原始报表打印代码。
Option Compare Database
'------------------------------------------------------------
' Print Grade 5 & 6 CAP homeroom reports
'
'------------------------------------------------------------
Sub PrintReports()
Dim rs As DAO.Recordset
Dim rptArr As Variant
Dim rpt As Long
rptArr = Array("CAP MATH GR 5", "CAP ELA GR 5")
Set rs = CurrentDb.OpenRecordset("school_room_query_table_5")
With rs
.MoveFirst
Do While Not .EOF
For rpt = LBound(rptArr) To UBound(rptArr)
DoCmd.OpenReport ReportName:=rptArr(rpt), View:=acViewNormal, _
WhereCondition:="[school_room_grade] = '" & rs!school_room_grade & "'"
Next
.MoveNext
Loop
.Close
End With
MsgBox "Done"
End Sub
所有报告都基于的查询:[cap 课堂报告 gr 5] - 条件字段是 [school_room_grade]。 循环使用的表是[school_room_query_table_5],匹配字段是[school_room_grade]
我从未通过命名查询执行过循环 - 可以吗?
【问题讨论】:
-
我决定将查询分成两部分,并从这些单独的较小查询中运行报告。这提高了性能。我仍然想知道是否可以遍历命名查询并仅引用查询名称,或者是否必须将整个语法复制到 VBA 并将条件字段放入该语法的 where 语句中。