2015-10-29 2 views
1

У меня есть интересное требование. В Access (2010) Мне нужно создать отдельные отчеты в формате PDF, в котором уникальный идентификатор в отчете т.е. F9902_ReportName.pdfСоздание отдельных отчетов PDF - Доступ

Код ниже может успешно генерировать индивидуальные отчеты точно, как я хочу, чтобы они работали, только проблема заключается в том, что он удаляет ограничения ресурсов при запуске. В результате я получаю следующую ошибку: Ошибка времени выполнения '3035'. Системный ресурс превышен. Если я правильно понимаю, DoCmd.OpenReport & DoCmd.OutputTo являются открытыми отчетами, но только одна из них закрывается в команде DoCmd.Close, другая остается скрытой и хранит ресурсы, и как только цикл обрабатывает около 400 раз, он достигает предела ресурса. Я просмотрел несколько веб-страниц, чтобы решить эту проблему, но каждый, кажется, останавливается на этой конкретной проблеме.

Проблема заключается в том, что я хочу использовать только функцию DoCmd.OutputTo, но это не позволяет мне фильтровать на основе записи (насколько мне известно), поэтому я должен использовать DoCmd.OpenReport перед этим.

Private Sub Command526_Click() 
    Dim db As DAO.Database 
    Dim rs As DAO.Recordset 
    Dim MyFileName As String 
    Dim mypath As String 
    Dim temp As String 

    mypath = "C:\location\" 

    Set db = CurrentDb() 
    Set rs = db.OpenRecordset("SELECT * FROM [NameOfTable]", dbOpenDynaset) 

    Do While Not rs.EOF 

    temp = rs("Ref#") 
    MyFileName = temp & "_PdfOutput.pdf" 

    DoCmd.OpenReport "ReportName", acViewReport, , "[Ref#]='" & temp & "'" 
    DoCmd.OutputTo acOutputReport, "", acFormatPDF, mypath & MyFileName 
    DoCmd.Close acReport, "ReportName" 

    rs.MoveNext 
    Loop 

    Set rs = Nothing 
    Set db = Nothing 

End Sub 

Любая помощь очень ценится.

ответ

1

Один из способов - не фильтровать отчет при его открытии, а фильтровать его источник записей с помощью публичной функции.

В общественном модуле, у вас есть этот код:

Dim strCurRef as string 

Public Function GetCurrentRef() As String 
    GetCurrentRef = strCurRef 
End Function 

Public Sub SetCurrentRef(strRef As String) 
    strCurRef = strRef 
End Sub 

И вы создаете запрос как RecordSource для отчета, который фильтрует данные по GetCurrentRef():

SELECT * FROM myTable WHERE [Ref#] = GetCurrentRef() 

И перед экспортом отчет в PDF, вы устанавливаете текущие данные:

temp = rs("Ref#") 
MyFileName = temp & "_PdfOutput.pdf" 
Call SetCurrentRef(temp) 

DoCmd.OutputTo acOutputReport, "ReportName", acFormatPDF, mypath & MyFileName 
+0

Это исправляет проблему с ограничением ресурсов, теперь выводит полный объем отчетов и правильно их называет. Сейчас проблема заключается в том, что сами отчеты не содержат никаких данных, они просто пустой шаблон. Таким образом, кажется, проблема заключается в том, что OutputTo не получает никаких данных ... – rjmd

+0

Включили ли вы «ReportName» в вызов DoCmd.OutputTo? Если да, сделайте 'DoCmd.OpenReport 'ReportName", acViewPreview' и установите точку останова после - показывает ли она выбранную запись? – Andre

+0

Да. Я просто выполнил команду 'acViewPreview', отчет отображался как пустой. – rjmd

Смежные вопросы