Jump to content

Imprimir para PDF


lcross

Recommended Posts

Boas ,

estou a tentar imprimir uns relatórios para pdf mas algo está a acontecer que eu não consigo entender...

tenho o codigo todo feito para gerar um snapshot com os dados escolher as pastas onde colocar o pdf e filtrar o relatório para imprimir 1 pdf por registo.

Funciona tudo muito bem, só que tenho um pouco menos de 500 registos, ou seja PDF's...

o codigo faz tudo gera a estrutura das pastas como definidas e imprime os pdf nos sitios certos, mas chega quase ao fim e dá um erro "maximo de tabelas abertas ".

eu uso o close ao relatorio e ao rs e a db que abri, mas parece que não resulta...

será de estar a usar snapshot?

se forem poucos registos funciona ás mil maravilhas, mas para fazer todos de uma só vez dá este erro....

If strFolderName <> "" Then
   Set db = CurrentDb()
  Set rs = db.OpenRecordset("SELECT * from [c_oferta_form] ", dbOpenSnapshot)

Do While Not rs.EOF

    mypath = strFolderName & "\"
    temp = rs("Curso")
    MyFileName = rs("Nome_PDF") & ".pdf"
    DoCmd.OpenReport "print", acViewReport, , "[Curso]='" & temp & "'"
    DoCmd.OutputTo acOutputReport, "", acFormatPDF, mypath & MyFileName
    DoCmd.Close acReport, "print"
    DoEvents
    rs.MoveNext
   Loop
   rs.Close
   Set rs = Nothing
   db.Close
   Set db = Nothing

Qualquer ajuda será bem vinda, estou a ficar totalmente maluco .

Link to comment
Share on other sites

experimenta definir o objecto DoCmd dentro do ciclo e depois do close limpa (=nothing)

Esse erro dá em que linha?

acho que não entendi muito bem o que querias dizer...

podes dar-me so umas linhas gerais?

o eero dá no output do relatório mas como disse, só após ter criado muitos ficheiros... até 100 de uma vez criou sem problemas...

Link to comment
Share on other sites

infelizmente o resultado é o mesmo , até experimentei com o "acSaveNo" mas foi igual....

Realmente ao fazer o loop pelos relatórios ele parece abrir uma ou mais "tabelas" (???) e depois não a fecha... é a única explicação que me ocorre com este erro mas não consigo entender o porquê....

O dbOpenSnapshot deveria fazer só um pedido certo? e depois fazer o loop pelos registos e ai, não deviriam abrir tabelas...

O DoCmd.OpenReport mesmo que tenha que abrir a rs.RecordSource e chamar a origem do relatório de cada vez que abre , e não conseguir fecha-las, seriam menos de 500 tabelas, eu pelo que li o access suporta em simultâneo 2048 tabelas.... o que significa que estará a abrir mais de 7 tabelas por relatório....

(nem consigo imaginar como)...

Link to comment
Share on other sites

Pelo que vi, pode ser o comando de fechar o report não esteja a funcionar porque o report ainda está a processar quando é executado.

Podes é experimentar colocar o doevents antes do close.

Uma hipotese que falam será abrir a janela em modal, mas não consigo experimentar aqui para ver se é viavel (adicionar , acDialog no final do openreport)

Link to comment
Share on other sites

Estive a investigar noutro lado e uma das soluções propostas era a de "cortar o DoCmd.OpenReport do loop, mas assim ficava sem poder filtrar o relatório...

isto faz-te algum sentido??

será que me podes ajudar a adaptar este código proposto... isto usa os campos de um formulário para passar os valores para filtrar o relatório

mas será possível fazê-lo sem o formulário, só com código?

Dim qdf As QueryDef
Set qdf = CurrentDb.QueryDefs("qryRptS")
qdf.Parameters("[Forms!frmCompany!StartDate]") = Forms!frmCompany!StartDate
qdf.Parameters("[Forms!frmCompany!EndDate]") = Forms!frmCompany!EndDate
Dim rst As DAO.Recordset
Set rst = qdf.OpenRecordset()
rst.MoveFirst
Dim filename As String
Do While rst.EOF = False
  filename = rst.Fields("Trading Name") & " " & rst.Fields("Company ID")
  filename = Replace(filename, "/", "-")
  DoCmd.OutputTo acOutputReport, "rptQryS", "PDFFormat(*.pdf)", "\\HBSRV01\common\PROJECTS\Q1 Test\" & filename & ".pdf", False, "", , acExportQualityPrint
  rst.MoveNext
  DoCmd.SelectObject acForm, "frmCOMPANY", False
  DoCmd.GoToRecord acForm, "frmCOMPANY", acNext
Loop
End Function
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.