Получить подпись к закрытому отчету - PullRequest
0 голосов
/ 03 ноября 2011

У меня есть настраиваемый диалог печати сборки, который используется для многих отчетов. Его аргументами являются имя отчета, строка фильтра, открытые аргументы для отчета и т. Д. Я хотел бы отобразить заголовок отчета, указанный для печати в форме. Из соображений производительности я бы не стал открывать отчет, получать заголовок и закрывать его снова. Я бы предпочел получить его из базы данных, не открывая сам отчет.

Одна вещь, которая ДОЛЖНА работать, - это вызывать отчет, используя его имя класса report_some_report.caption, но нет способа сделать это без имени отчета, сохраненного в переменной. Я бы ожидал, что Reports("some_report").caption также будет работать, но он работает только для открытых отчетов.

Есть ли лучший способ сделать это или я собираюсь сделать что-то вроде следующего? (Который работает)

docmd.OpenReport "schedule_simple",acViewDesign,,,acHidden
strCaption = Reports("schedule_simple").Caption
docmd.Close acReport,"schedule_simple"

1 Ответ

1 голос
/ 03 ноября 2011

Нет способа получить заголовок отчета из отчета без предварительного открытия отчета или использования объекта класса отчета (как вы знаете).Стоит также отметить, что в «легких» отчетах (т. Е. В тех, у которых свойство HasModule = False) нет объектов класса.

У вас есть несколько вариантов.

  1. Вы можете создать локальную таблицу с полями RptName и RptCaption и запросить ее.Конечно, тогда вам нужно как-то обновлять его.
  2. Вы можете написать функцию, которая «запоминает» результаты, так что вам нужно открывать данный отчет только один раз при каждом запуске программы.Например:.

    Function GetReportCaption(RptName As String) As String
    Static RptCaptions As Collection
    
        If RptCaptions Is Nothing Then Set RptCaptions = New Collection
        On Error Resume Next
        GetReportCaption = RptCaptions(RptName)
        If Err.Number = 0 Then Exit Function
        On Error GoTo 0
    
        DoCmd.OpenReport RptName, acViewDesign, , , acHidden
        RptCaptions.Add Reports(RptName).Caption, RptName
        DoCmd.Close acReport, RptName
    
        GetReportCaption = RptCaptions(RptName)
    End Function
    
...