Newsgroup: it.comp.lang.visual-basic
Titolo: Mai sentito parlare di Crystal Report ????

Sembra che questo argomento sia tabu' in questo ng !!!!
Ho gia' postato tre msg ma non ho avuto risposte.
Non e' che c'e' qualche anima pia disponibile a darmi una mano al riguardo ?
Grazie

 wrote in message
news:384f424a.02040...@posting.google.com...

Io fino ad oggi non frequentavo il NG: ho lavorato anche in CR, spara le
domande
e se sono in grado ti rispondo.
   Fabrizio
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

    Fabrizio
Innanzitutto , grazie per la tua disponibilita'.
Spero tu possa aiutarmi a risolvere i miei piccoli problemi quotidiani
che ho con questo bellissimo/odiatissimo programma !
Quesito #1
==========
Clausola "GROUP BY"
Mi sembra di aver capito che la sintassi SQL proprietaria di CR, non
supporta la clausola GROUP BY.
L'unico modo che ho trovato per aggirare l'ostacolo e' quello di
creare una query sql utilizzando Crystal SQL Designer e di impostare
come fonte dati per il report il file .qry da esso generato.
In questo modo, pero', la query rimane "statica".
Io, invece, avrei bisogno di cambiare a runtime i criteri di selezione
dei record.
Esiste un modo per modificare i file qry da codice (uso VB) ??
Quesito #2
==========
RAGGRUPPARE
Ho realizzato un report che stampa l'elenco degli appuntamenti dei
tecnici di una ditta di assistenza.
L' ho impostato cosi:
Gruppo 1 : Data Intervento
Gruppo 2 : Nome tecnico
- Campi : Nome tecnico, Data Intervento
Gruppo 3 : IdCliente
- Campi : Nome Cliente, Ora Inizio - Ora Fine Appuntamento
Dettagli :
- Campi : Prodotto/i del cliente sui quali si fa l'intervento.
poi ho impostato l'ordinamento sull'ora di inizio e sull'ora di fine
dell'appuntamento.
Non riesco, pero', ad avere gli appuntamenti ordinati in base
all'orario.
Se levo il gruppo 3 e sposto i campi nei dettagli, funziona, solo che
mi ripete il nome del cliente, tante volte quanti sono i prodotti su
cui bisogna intervenire.
Esempio:
Mario Rossi - ore 10.00 / 12.00
Caldaia a Gas
Mario Rossi - ore 10.00 / 12.00
Lavatrice
Mentre io vorrei :
Mario Rossi - ore 10.00 / 12.00
Caldaia a Gas
Lavatrice
Quesito #3
==========
GUIDA IN LINEA ???
Ma e' normale che sia cosi' striminzita ?
Avrei altre domande, ma non vorrei esagerare della tua disponibilita'.
Grazie se vorrai darmi un mano, sopratutto per il quesito 2 che mi sta
facendo impazzire !!!
Ciao

 Avrei altre domande, ma non vorrei esagerare della tua disponibilita'.
Esagera pure.

 Esagera pure.
Ti conviene non invogliarmi troppo.... potrei essere esageratamente
"invasivo". :-)
Grazie nuovamente
Ciao

 E come si farebbe ?????
Questo è un mio vecchio post a proposito:
...
Io utilizzo una filosofia diversa rispetto a quella che ti hanno consigliato
e che a me (magari mi sbaglio) sembra più versatile soprattutto in una
situazione client/server.
Premetto che uso VB6 SP5, ADO 2.5, CR7.
Bisogna agire in modo lievemente diverso se usi un report disegnato
all'interno di Vb come finestra di progettazione o se usi un file rpt
esterno. Ti descrivo il primo caso.
1. La scelta è quella di utilizzare tra le scelte di database possibili
"Dati attivi (solo per definizioni campi)". Per farlo si deve creare un
piccolo file con estensione ttx che contiene la descrizione dei campi del
recordset; nella documentazione di Crystal Report è spiegato come farlo. In
particolare puoi utilizzare la seguente funzione:
Declare Function CreateFieldDefFile Lib "p2smon.dll" (lpUnk As Object, _
    ByVal FileName As String, ByVal bOverWriteExistingFile As Long)  As Long
dove lpUnk è il recordset Ado di cui vuoi generare la descrizione e FileName
è il file ttx che vai a generare. Fai attenzione che se la p2smon.dll non è
la più recente (scaricabile dal sito Seagate) sbaglia a creare i
campi Memo di Access che vanno corretti a manina.
2. Dal report scegli Aggiungi Database al Report ... Tabelle SQL ... Dati
attivi (solo per definizioni campi) e scegli il file ttx precedentemente
creato. A questo punto hai i campi per lavorare sul report.
3. Quando devi lanciare il report apri normalmente il recordset Ado
(ovviamente i campi devono coincidere con il file ttx),  crei un'istanza del
report e poi gli assegni il recorset in questo modo
rptReport.Database.Tables.item(1).SetPrivateData 3, adoRs
L'istruzione va poi ripetuta per le altre istanze se ci sono più recordset.
Il report può poi essere visualizzato con un controllo CRViewer.
Si può fare anche con report esterni, ma ci sono alcune differenze.
In questo modo puoi sfruttare tutta la complessità di sql senza dover
"salvare" le query da nessuna parte.
Ciao
--
Lawrence Lebowsky
#marcone#@
sidsrl.it

 Si può fare anche con report esterni, ma ci sono alcune differenze.
A me interesserebbe in particolar modo questa seconda ipotesi.
Non e' che saresti cosi' gentile da indicarmi come fare ?
Grazie


Non trovo più il codice che avevo scritto perché adesso seguo sempre l'altra
via; cerco di recuperarti qualcosa da qualche cd di backup
--
Lawrence Lebowsky
#marcone#@
sidsrl.it

 via; cerco di recuperarti qualcosa da qualche cd di backup
Se dovessi mandare qualcosa anche a me te ne sarei immensamente grato.
Ciao

 ha scritto nel messaggio
news:a9h60n$38kku$1...@ID-104747.news.dfncis.de...

Ti ringrazio in anticipo.
Ciao
Aldo

Scusate il ritardo ma mi dimenticavo sempre di  prendere i backup.
A rischio di essere tedioso ripeto un po' tutto il discorso evidenziando le
differenze; l'idea di fondo č che in un gestionale client-server legare i
report di Crystal Report a delle tabelle o a delle query non mi sembrava
molto versatile. La soluzione ideale almeno per me č quella di creare
dinamicamente dei recordset ado e passarli al report.
Versioni utilizzate:  VB6 SP5, ADO 2.5, CR7.
Bisogna agire in modo lievemente diverso se si usa un report disegnato
all'interno di Vb come finestra di progettazione oppure un file rpt esterno:
Io preferisco la prima soluzione inserendo tutti i report nell'eseguibile o
in una dll collegata.
1. Utilizzare tra le scelte di database possibili "Dati attivi (solo per
definizioni campi)". Per farlo si deve creare un piccolo file con estensione
ttx che contiene la descrizione dei campi del recordset; nella
documentazione di Crystal Report č spiegato come farlo. In particolare si
puň utilizzare la seguente funzione:
Declare Function CreateFieldDefFile Lib "p2smon.dll" (lpUnk As Object, _
    ByVal FileName As String, ByVal bOverWriteExistingFile As Long)  As Long
dove lpUnk č il recordset Ado di cui vuoi generare la descrizione e FileName
č il file ttx che si genera. Bisogna fare attenzione che se la p2smon.dll
non č la piů recente (scaricabile dal sito Seagate) sbaglia a creare i campi
Memo di Access che vanno corretti a manina.
Il risultato č un file di testo con estensione ttx in cui sono presenti i
nomi dei campi del recordset e il loro tipo.
2. Dal report si sceglie Aggiungi Database al Report ... Tabelle SQL ...
Dati attivi (solo per definizioni campi) e il file ttx precedentemente
creato. A questo punto si puň disegnare il report utilizzando i campi
generati.
3. Quando si deve lanciare il report si apre normalmente il recordset Ado
(ovviamente i campi devono coincidere con il file ttx),  si crea un'istanza
del report e si assegna il recorset in questo modo
- report in finestra di progettazione di Vb
Dim rptReport As Report
Set rptReport = New cryNomeReport
rptReport.Database.Tables.item(1).SetPrivateData 3, adoRs
- report esterno in file rpt
Dim ApplicazioneReport As CRPEAuto.Application
Dim Report As CRPEAuto.Report
Set ApplicazioneReport = CreateObject("Crystal.CRPE.Application")
Set Report = ApplicazioneReport.OpenReport("rptNomeReport.rpt")
Report.Database.Tables.Item(1).SetPrivateData 3, adoRs
Le istruzioni SetPrivateData vanno  ripetute su Item diversi se ci sono piů
recordset nel report.
4. Il report puň poi essere visualizzato con un controllo CRViewer nel primo
caso, nel secondo caso con il metodo Preview o PrintOut (per stampare).
Con questo metodo io non ho mai incontrato problemi che mi hanno bloccato,
si possono gestire sottoreport, parametrizzazioni etc. e se č vero che CR č
un po' antipatico da usare, i risultati finali sono estremamente buoni.
Spero di essere stato chiaro.


 Scusate il ritardo ma mi dimenticavo sempre di  prendere i backup.
--- cut ---
Per il momento ti ringrazio e cerco di capirci qualcosa !
Se non ce la faccio, mi sa che ti rompero' di nuovo le scatoline !
:-)
Grazie