Report da query, in formato PDF

di il
10 risposte

Report da query, in formato PDF

Buongiorno,
uso Access 2007 (win7) per gestire schede anagrafiche e eventi diversi associati ai nominativi.
Non essendo esperto di VBA, ho setacciato la rete (e anche questo forum) alla ricerca di suggerimenti per produrre report singoli in formato pdf; dopo un po' di prove, ho messo insieme il codice che spero di inserire in modo corretto.
Private Sub Comando0_Click()
On Error GoTo Err_Comando0_Click

    Dim ProviderNm As String
    Dim ApeNm As String
    Dim PathNm As String
    Dim RptNm As String
    Dim strFileNm As String
    Dim Sql As String
    Dim db As Object
    Dim rs As Recordset
     
    strPathNm = "C:\PROVE_DB\"
    strRptNm = "r_anagrafiche"
     
    Sql = "SELECT DISTINCT CODICE, NOMINATIVO FROM Q_anagrafiche"
    Set db = CurrentDb
    Set rs = db.OpenRecordset(Sql)
     
    Do While Not rs.EOF
 
    ProviderNm = rs!CODICE
    ApeNm = rs!NOMINATIVO
    strFileNm = strPathNm & ProviderNm & ApeNm & ".pdf"
    
    DoCmd.OpenReport strRptNm, acViewPreview, , "CODICE = '" & ProviderNm & "' "
     
    DoCmd.OutputTo acOutputReport, strRptNm, acFormatPDF, strFileNm, 0

    DoCmd.Close acReport, strRptNm
     
    DoEvents
     
    rs.MoveNext
     
    Loop
     
    rs.Close
    Set rs = Nothing
    Set db = Nothing
     
Exit_Comando0_Click:
    Exit Sub

Err_Comando0_Click:
La query che alimenta il report genera un solo record per ciascun nominativo.
Probabilmente si potrebbe fare di meglio, ma così funziona egregiamente.
Ora, però, vorrei creare report singoli in formato pdf partendo da una query che genera più record per nominativo e che, attualmente, alimenta correttamente un report che impagina più notizie relative allo stesso soggetto.
Ho provato a cercare suggerimenti, per ora senza fortuna.
Non cerco la "pappa fatta", ovviamente, solo qualcuno che sappia indicarmi la strada da seguire.
E che ringrazio da ora.

10 Risposte

  • Re: Report da query, in formato PDF

    Il codice che ci proponi cosa FA e cosa NON FA...?
    Dai qualche dettaglio in quanto quel codice a me non sembra errato, ma non capisco in cosa è carente... potrei dire che forse manca nella WHERE il doppio criterio con il CODICE AND NOMINATIVO... ma per te che ci lavori è semplice comprendere... noi ndiamo a seconda di quanto tu chiarisci le cose...
  • Re: Report da query, in formato PDF

    Mi scuso, forse non mi sono spiegato bene.
    Il codice che ho pubblicato funziona benissimo (per me), era semplicemente un esempio di ciò che sono riuscito a produrre.
    Lo stesso tipo di codice applicato a una query che, invece, genera più record per lo stesso CODICE non va proprio.
    Esiste una ragione "di fondo" che io, non esperto, non conosco?
    Spero di aver chiarito...grazie
  • Re: Report da query, in formato PDF

    Se hai una Query deve andare nello stesso modo... ti suggerisco di fare DEBUG e vedrai che la Query non ha RECORDS... probabilmente per qualche tuo errore...
    Non esistono motivi per cui non vada, quindi li devi ricercare nel tuo codice...
  • Re: Report da query, in formato PDF

    Intanto grazie per le risposte.
    Questo è il codice che non va
    Private Sub Comando36_Click()
    On Error GoTo Err_Comando36_Click
    
    
    
        Dim ProviderNm As String
        Dim PathNm As String
        Dim RptNm As String
        Dim strFileNm As String
        Dim Sql As String
        Dim db As Object
        Dim rs As Recordset
         
        strPathNm = "C:\PROVE_DB\"
        strRptNm = "x_r_prova_vba"
          
        Sql = "SELECT DISTINCT MATRICOLA FROM x_query_prova_vba"
    
        Set db = CurrentDb
          
        Beep
        Set rs = db.OpenRecordset(Sql)
    
        Do While Not rs.EOF
     
        ProviderNm = rs!MATRICOLA
        strFileNm = strPathNm & ProviderNm & ".pdf"
         
        DoCmd.OpenReport strRptNm, acViewPreview, , "MATRICOLA = '" & ProviderNm & "' "
         
        DoCmd.OutputTo acOutputReport, strRptNm, acFormatPDF, strFileNm, 0
    
        DoCmd.Close acReport, strRptNm
         
        DoEvents
         
        rs.MoveNext
         
        Loop
         
        rs.Close
        Set rs = Nothing
        Set db = Nothing
    
    Exit_Comando36_Click:
        Exit Sub
    
    Err_Comando36_Click:
        MsgBox Err.Description
        Resume Exit_Comando36_Click
        
    End Sub
    
    
    
    L'errore è segnalato subito dopo il beep ( Set rs = db.OpenRecordset(Sql)), il messaggio è "tipo non corrispondente".
    La query funziona, genera 1300 records; è una query che seleziona dati provenienti da una query di unione, sarà quello il problema?
  • Re: Report da query, in formato PDF

    wakaiawaka ha scritto:


    Intanto grazie per le risposte.
    Questo è il codice che non va
    Private Sub Comando36_Click()
    On Error GoTo Err_Comando36_Click
    ...
        Dim Sql As String
        Dim db As Object <=== DAO.Database
        Dim rs As Recordset <=== DAO.Recordset
    ...      
        Sql = "SELECT DISTINCT MATRICOLA FROM x_query_prova_vba"
    
        Set db = CurrentDb
          
        Beep
        Set rs = db.OpenRecordset(Sql)
    ...
    End Sub
    L'errore è segnalato subito dopo il beep ( Set rs = db.OpenRecordset(Sql)), il messaggio è "tipo non corrispondente".
    Mi intrufolo nel thread. Modifica le dichiarazioni delle variabili db ed rs. Forse tra i riferimenti hai anche ADO (magari è un db creato con vecchie versioni, che selezionavano di dafault ADO invece di DAO), verifica in quale ordine, se prima o dopo di DAO (che quindi deve esserci). Se non lo usi, toglilo. In ogni caso con la dicitura [DAO.] non corri rischio di ambiguità.
    Perché db era stato dichiarato Object e non Database?
  • Re: Report da query, in formato PDF

    Ho modificato il codice, ora il messaggio di errore è "Tipo definito dall'utente non definito", in corrispondenza della dichiarazione DAO.database.
    Il fatto che il db fosse dichiarato Object e non Database dipende dalla mia ignoranza e dagli esempi che ho trovato online, anche se, nell'esempio riportato all'inizio, funziona perfettamente e il db è lo stesso.
  • Re: Report da query, in formato PDF

    wakaiawaka ha scritto:


    Ho modificato il codice, ora il messaggio di errore è "Tipo definito dall'utente non definito", in corrispondenza della dichiarazione DAO.database.
    Significa che nei Riferimenti non c'è DAO (o Microsoft Office xx.x Access Database Engine Object Library se usi Access a 64bit). Sistemali, in generale, da VBE - Strumenti - Riferimenti.

    wakaiawaka ha scritto:


    ... dagli esempi che ho trovato online, anche se, nell'esempio riportato all'inizio, funziona perfettamente e il db è lo stesso.
    Forse c'è qualche altri riferimento sballato, magari mancante, che mette tutto ko.

    wakaiawaka ha scritto:


    Il fatto che il db fosse dichiarato Object e non Database dipende dalla mia ignoranza
    Questo rende tutto più difficile
  • Re: Report da query, in formato PDF

    RISOLTO!!!
    Grazie agli ultimi suggerimenti ho trovato la soluzione, che era semplice, bastava pensarci.
    Ho verificato, infatti, che non potevo attivare i riferimenti che mi sono stati suggeriti, evidentemente si trattava i un db che, pur essendo stato convertito in accdb, era stato creato inizialmente come mdb, dunque con qualche oggetto che impediva comunque l'attivazione di Microsoft Office Access Database Engine Object Library.
    Ho importato il necessario in un nuovo db (con i riferimenti necessari attivi) e il codice funziona benissimo.
    Prometto che cercherò di imparare qualcosa di più su vba prima di porre nuovi quesiti; grazie, davvero, a chi ha avuto tempo e voglia di darmi retta.
    un saluto
  • Re: Report da query, in formato PDF

    wakaiawaka ha scritto:


    RISOLTO!!!
    Grazie agli ultimi suggerimenti ho trovato la soluzione, che era semplice, bastava pensarci.
    ...
    Eh! Questa si chiama esperienza (dopo averci sbattuto la testa)
    Curiosità (nonché informazione da fornire in caso di futuri thread): che sistema operativo usi? e che versione di Access? soprattutto (per entrambi) 32 o 64 bit? Solo per capire se le mie indicazioni (e la tua soluzione) sono corrette al 100%
    (vedo all'inizio del thread A2007... presumibilmente a 32 bit e Win 7 ma qui non riesco a presumere nulla)
  • Re: Report da query, in formato PDF

    Uso Access 2007-32 bit in ambiente Win7 pro 64 bit.
    Spero confermi le tue teorie.
    Grazie ancora
Devi accedere o registrarti per scrivere nel forum
10 risposte