Access 2007, как использовать VBA для циклического прохождения запросов и циклического прохождения отчетов о печати - PullRequest
0 голосов
/ 21 октября 2010

У меня есть существующий модуль, который печатает серию отчетов, основанных на запросе (Отчет классной комнаты CAP gr 5), просматривая другую таблицу (School_room_grade). Отчеты были напечатаны на основе условия WhereCondition в модуле, который соответствовал строкам таблицы School_room_grade. Этот процесс используется для того, чтобы в каждом комбо «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

Запрос, на котором основаны все отчеты: [верхний классный отчет № 5] - поле критериев - [school_room_grade]. Таблица, используемая для цикла - [school_room_query_table_5], а соответствующее поле - [school_room_grade]

Я никогда не делал цикл через именованный запрос - это можно сделать?

1 Ответ

1 голос
/ 26 августа 2011
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

Что-то вроде этого должно работать, чтобы перебирать имена всех имен определений запросов.

...