VB La stampa con RDC6
Cosa è RDC6 e dove lo si trova

RDC (Report Designer Component) 6.0 è un programma della Seagate Software e serve per la creazione visuale di report e grafici basati su dati provenienti da database. E' possibile usarlo per creare report anche molto complessi accedendo ai database con l'ausilio delle librerie DAO o ADO. Esso supporta i sottoreport ed è quindi possibile creare dei report nidificati che estraggono dati da fonti diverse presentando poi un report contenente più sezioni. A differenza del vecchio Crystal Reports 4.6 funziona come un "Designer" ("finestra di progettazione" per chi usa VB in italiano), e quindi per progettare i report ci si serve dello stesso IDE di VB. Questo potrebbe far sembrare RDC6 un prodotto inferiore al CR 4.6, ma in realtà RDC6 è estremamente più potente: forse il suo maggior punto di forza rispetto alla vecchia versione è proprio la gestione dei sottoreport, ma non dimentichiamo l'anteprima con gestione dei gruppi, la ricerca di testo nel report e l'esportazione del report a runtime in diversi formati.
RDC6 è in pratica il sostituto del Crystal Reports 4.6 fornito insieme a VB5 e VB6, ed è liberamente utilizzabile per gli utenti registrati di questi prodotti.
E' possibile scaricarlo partendo da questo indirizzo (salvo variazioni dell'ultim'ora):
http://www.seagatesoftware.com/vb/
Occhio che sono 13Mb, anche se quando l'ho scaricato io era diviso in file da circa 3Mb.
ATTENZIONE! Installando RDC6 su un PC con CR 4.6 quest'ultimo non funzionerà più! Questo perchè ogni nuova versione del prodotto Seagate ha il brutto vizio di non mantenere la compatibilità all'indietro e sovrascrive le vecchie librerie con nuove versioni non compatibili.

 

E' possibiler usare ancora i report rpt con RCD6 ?

Per quanto riguarda i report esistenti, si può importarli usando l'apposita opzione del RDC6. Per i nuovi report non è necessario includere il Designer nel programma che usa il report. RDC6 ha una opzione nella toolbar "Save to Crystal Report file" che salva il report in formato RPT. Questa è la soluzione che consente di avere un programma più "leggero" senza portarsi appresso l'intero Designer che è piuttosto pesante. Usando i file RPT si perde però la possibilità di inserire del codice VB nei vari eventi del report, quindi bisogna considerare anche questo aspetto nella scelta del metodo di distribuzione.
Usando il report salvato in formato RPT è possibile creare una istanza dell'oggetto CRAXDRT.Report da utilizzare nel CRViewer o da stampare. Esempio:

Dim app As CRAXDRT.Application
Dim rep As CRAXDRT.Report

'Il secondo parametro serve ad aprire il file rpt in modo condiviso e non esclusivo
Set rep = app.OpenReport("file.rpt", 1)

'Da qui in poi è possibile gestire il report nel modo consueto

Da notare che è necessario per usare questa tecnica inserire tra i riferimenti del programma la libreria CRAXDRT.dll. Stranamente questa di solito non appare tra le librerie ActiveX registrate: bisogna cercarla manualmente con il tasto "sfoglia" e includerla, dopodichè salvare il progetto. Potrebbe anche succedere che riaprendo il progetto il riferimento a CRAXDRT.dll "sparisca" misteriosamente. Non conosco la causa del problema, ma a me è accaduto con VB6 SP1 e ho dovuto ripetere l'operazione di registrazione libreria e salvataggio del progetto due o tre volte prima che il problema sparisse.

 

RDC6 e la password in MDB

Ho sviluppato un software in VB con il quale accedo ad un MDB con password. Ora voglio effettuare delle stampe tramite RDC6, ma mi sono accorto che lanciando l'applicazione, al momento della stampa questa mi chiede la password dell'MDB. Come si fa a fornire in modo automatico la password?

Puoi farte così:

'objReport è il report da stampare
'DBName è una stringa che contiene il pathname completo del file mdb
'Password contiene la password per l'accesso al file mdb
With objReport.Database.Tables(1)
    .Location = DBName
    .SetLogOnInfo DBName, , , Password
End With

E se hai un subreport che punta ad un'altra tabella/query:

Set objSubReport1 = objReport.Subreport1.OpenSubreport
With objSubReport1
    .Location = DBName
    .Database.Tables(1).SetLogOnInfo DBName, , ,Password
End With
'E cosi' via per tutti i subreport

Passare variabili a RCD6

Vorrei sapere se è possibile inviare variabili, in fase di programazione, a RDC6 e se (e come) evenutalmente gestirle nel report.

Si deve adoperare i campi di tipo parametro dell'oggetto Report. Si tratta di un array con base 1 che contiene tanti indici quanti sono i parametri definiti. I campi parametro si possono poi usare dovunque nel report: possono essere stampati, inseriti in formule ecc. Ad esempio, per passare al report l'intestazione della ditta possiamo scrivere:

Set objReport = New CRAXDRT.Report
'L'esempio suppone che siano definiti nel report 2 campi parametro
objReport.ParameterFields(1).SetCurrentValue "Pinco Pallino S.p.A."
objReport.ParameterFields(2).SetCurrentValue "Via Roma 123 - Milano"

 

Quali file servono per installare un programma che usa RDC6

Non riesco a far funzionare i programmi che usano i report creati con RDC6 e il controllo ActiveX CRViewer sui computer dei clienti. Quali file devo installare per far funzionare i report?

Questo è uno dei problemi più diffusi. In realtà gran parte delle risposte si trovano nell'help in linea del RDC6, dove sono elencati i requisiti di sistema e la lista dei file installati da RDC6 e a cosa servono.
Cominciamo col leggere nella sezione "Installation" che è necessario Internet Explorer versione 3.0 o superiore. In realtà per quanto mi riguarda credo di poter affermare che la versione di IE deve essere almeno la 3.02, installabile col CD di Office97. Cosa c'entra IE con RDC6? RDC6 usa alcune API contenute nelle librerie URLMON.DLL e SHLWAPI.DLL, dove la seconda è una dipendenza della prima. Entrambe le librerie fanno parte di IE nelle sue varie versioni, e senza queste librerie fallisce la registrazione del controllo ActiveX CRViewer.dll. Chiaramente il problema si può presentare solo su sistemi operativi win95 o NT 3.51 o 4.0, ma non su win98 che nasce con IE incorporato. Il rimedio consiste quindi nell'installare per prima cosa IE sul computer target della vostra applicazione oppure includere questi due file nel pacchetto di installazione. E qui nasce un altro problema: questi sono due file di sistema che il programma di installazione fornito con VB5-VB6 non è in grado di sostituire se già presenti nel PC target ma non aggiornati. La soluzione a questo problema è usare InstallShield, Wise, Visual Studio Installer o comunque un prodotto che sia in grado di sostituire i file di sistema durante l'installazione, altrimenti bisogna sostituirli a mano partendo in modalità MS-DOS. Un aggiramento potrebbe essere quello di includere nel setup le librerie della versione 3.02 di IE (Attenzione: devono avere entrambi la stessa versione) in modo che installando l'applicazione su un PC con win98 non vengano installate (perchè quelle esistenti sono più recenti) e che vengano quindi installate solo dove mancanti. In questo modo i PC su cui il setup potrebbe fallire sarebbero probabilmente molto pochi.
Un problema più insidioso si può presentare installando un report che accede ai dati usando DAO invece del nuovo sistema "Active Data" di RDC6: infatti in questo caso è necessario installare (basta copiarla senza registrarla) la libreria P2BDAO.DLL.Senza questa libreria otterrete un messaggio di errore che recita qualcosa tipo "Libreria PDBDAO.DLL non installata". Il messaggio è pure fuorviante visto che il vero nome del file è P2BDAO.DLL e non PDBDAO.DLL. Ma dove sta questo file? Incredibile ma vero: non è un file installato da RDC6, ma dal vecchio CR 4.6! Come se non bastasse, in certe versioni italiane di DAO viene richiesta anche la libreria di localizzazione P3BDAOIT.DLL, ma dovrebbe funzionare tutto anche senza.
I report creati con il sistema "Active Data" hanno invece bisogno della libreria P2SMON.DLL per funzionare.
RDC6 ha bisogno anche di un componente del sistema operativo che potrebbe non essere sempre presente: la libreria Video-for-Windows MSVFW32.DLL e le sue dipendenze WINMM.DLL e DCIMAN.DLL, e tutte e tre devono avere la stessa versione. In realtà non ho mai trovato un PC privo di questi file, probabilmente contenuti nella sezione "Multimedia" tra i componenti del sistema operativo.