Reports

4.31 Report dinamici basati su query a campi incrociati parametriche
  Roberto

Nella Sezione Reports di questo sito già esiste una FAQ di RoDAgo e Davide La Mantia (Sib) intitolata 4.7 Report dinamici per rappresentazioni a campi incrociati che tratta l'argomento in maniera completa, ma la soluzione illustrata in quella FAQ risulta poco comprensibile agli sviluppatori meno esperti, in quanto complicata dalla gestione di report stampati su più pagine affiancate, nessarie se il numero delle colonne rende insufficiente la larghezza di un solo foglio per contenerle tutte. Ciò premesso ho ritenuto opportuno pubblicare anche questa soluzione, meno completa ma credo più comprensibile anche ai meno espertii.

Come ben si sa non si ha mai la certezza del nome dei campi di una query a campi incrociati parametrica a meno che non si imposti adeguatamente la sua proprietà Intestazione colonne attraverso la quale, appunto, si predefiniscono e si preintestano i campi della query a campi incrociati; questa imponderabilità fa sì che la creazione di un report basato su una query a campi incrociati dovrebbe essere fatta solamente dopo l'esecuzione della query, quando sono ormai noti tutti i nomi delle colonne della query stessa.
Se però non si vuole demandare all'utente finale l'onere di crearsi da solo il report basato sulla query a campi incrociati (cosa di solito impensabile), è necessario personalizzare dinamicamente da VBA le origini controllo dei controlli di un report generico non associato ed il caption delle relative etichette con i nomi dei campi della query a campi incrociati parametrica su cui deve essere basato il report stesso.
Le caselle di testo e le etichette saranno definite tutte non visibili e si renderanno visibili mano a mano che verranno personalizzate con il nome di un campo della query, così che alla fine nel report verranno visualizzati solo i controlli necessari e non tutti quelli inseriti nel report che dovrebbero essere invece tanti quanto il numero massimo dei campi previsti nella query a campi incrociati parametrica.

Nel database di esempio allegato a questa FAQ è mostrato un esempio di tale tecnica, ed inoltre in esso sono gestiti dinamicamente anche dei totali posti nel Pié di pagina Report.
Alcune routine VBA contenute in tale database fanno riferimento alla libreria Microsoft DAO quindi, se vengono usate con una versione di Access successiva ad Access 97 sarà necessario aggiungre al database il riferimento a Microsoft DAO 3.6 Object Library.

Il database di esempio allegato a questa FAQ può risultare utile anche per vedere quale sia il codice SQL corretto di una query a campi incrociati parametrica (per maggiori dettagli vedere nella Sezione Queries di questo sito la FAQ intitolata 2.12 Query a campi incrociati parametrica) e come sia possibile aprire da VBA un recordset su una query parametrica, dove i parametri debbono essere passati da VBA contestualmnte all'apertura del recordset (per maggiori dettagli vedere nella Sezione Queries di questo sito la FAQ intitolata 2.2 Aprire una query parametrica da codice VBA).

Download:
 
  ReportCampiIncrociati.zip (29Kb) MSAccess97 database


Se pensate di avere del materiale freeware interessante e volete pubblicarlo, allora leggete qui.