我有一个现有模块,它通过循环浏览另一个表(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 classroom report gr 5] - 条件字段为[school_room_grade]。 用于循环的表是[school_room_query_table_5],匹配字段是[school_room_grade]
我从未在命名查询中完成循环 - 它可以完成吗?
答案 0 :(得分:1)
Dim db as Database
Dim rs as RecordSet
Set db = DAO.OpenDatabase("Database path")
Set rs = db.OpenRecordSet("Query name")
For i = 0 To rs.QueryDefs.Count - 1
rs.QueryDefs.Name
next i
这样的事情应该可以遍历所有查询定义名称的名称。