Newsgroup: it.comp.lang.visual-basic
Titolo: Crystal Report con query parametriche

Ciao a tutti,
devo usare una query parametrica con Crystal Report per
ottenere una stampa riassuntiva con delle somme su alcuni
campi numerici. I parametri sono la data di inizio e di fine
dell'intervallo da cui prendere i dati. Queste due date sono
stata aggiunte alla query in modo da poterle utilizzare come
titolo del report (Totali dal ... al ...).
Il problema è che con Crystal Report, in progettazione, non
mi fa vedere la mia query nella lista delle tabelle/query
utilizzabili, penso sia perché ha dei paramertri.
Scegliendo SQL/ODBC riesco ad accedere alla query, ma non
all'anteprima perché non riesco a dare i due parametri.
Per usare il report in VB6, avendo scelto SQL/ODBC, devo
creare la DSN sull'ODBC ? Come faccio a dare i parametri ?
Ho pensato anche di sommarei dati direttamente sul report, in
questo modo posso usare WHERE nel codice SQL per selezionare
i dati di interesse, ma a quel punto come faccio a mettere nel
titolo l'intervallo ?
Spero di essere stato abbastanza chiaro. Grazie a tutti in anticipo.

Devi crearti una fonte dati ODBC.
I parametri li passi da codice mediante l'istruzione
crystalreport1.sqlquery="select * from tabella1 where data between........"
Per quanto riguarda il titolo del report creati due campi formula uguali a
stringa vuota e da codice te li riempi con le tue date:
CrystalReport1.Formulas(0) = "Nomeformula ='01/01/1999'"
CrystalReport1.Formulas(1) = "Nomeformula1 ='31/01/1999'"
Nel report avrai 'Totali dal  '@Nomeformula' al '@NomeFormula1''
Le somme te le puoi fare direttamente con l'autocomposizione di
crystalreport ma devi passare una query (anche generale, tanto poi i
parametri glieli passi da codice).
Forse le query non te le fa vedere perchè hai il driver sbagliato.
Vai in Database-->Convert database driver e imposta il driver pdsodbc.dll.
Se non sono stato abbastanza chiaro e hai bisogno di chiarimenti scrivi.

Ciao, grazie per la risposta. Ho comunque ancora dei problemi.
1) in VB6 PRO, per lanciare il report uso il codice
   With CR
      .ReportFileName = App.Path & "\Report\NOMEREPORT"
      .DataFiles(0) = App.Path & "\NOMEDATABASE"
      .PrintReport
   End With
Il problema è che, anche su report molto semplici senza gruppi e
parametri, ottengo sempre un report uguale a quello creato, anche
se i dati sono cambiati. Mi spiego meglio: se nella tabella aggiungo
o tolgo dati, il risultato non cambia. Posso anche cambiare nome
alla tabella e mi restituisce comunque una stampa.
Non ho ancora registrato il CR, è la prima volta che lo uso,
può dipendere da questo ?
2) Lo stesso problema lo ho con le formule, nelsenso che cambiando
il valore come mi hai dettodi fare, nell'anteprima da VB non
vedo nessun cambiamento.
3) Per la query parametrica, non volendo usare l'ODBC ed essendo
impossibilitato a creare un report su una query parametrica (CR in fase
di progettazione non mi fa vedere le query parametriche), ho creato
una query in ACCESS con il filtro sulla data e da quella ho progettato il
report. Al momento della stampa cancello la querye la ricreo con i dati
filtrati correttamente (infatti CR va a cercarsi proprio quella query), e a
quel punto otengo il risultato. Sembrerebbe funzionare, a parte il
problema al punto 1: l'anteprima è idenica a quella della creazione dei
dati, la query nel file MDB invece è cambiata e mi da i risultati che mi
aspetto.
Ultima considerazione: per questa applicazione sono passato per
la prima volta ad ADO, ho fatto una buona scelta o le prestazioni
sono inferiori rispetto al DAO ?
Grazie in anticipo, ciao.

1) Prova a lanciare il report piuttosto che con .PrintReport, con:
CrystalReport1.Action=1
decidendo  prima se visualizzarlo a video (Crystalreport1.Destination=0)
oppure direttamente su stampante (Crystalreport1.Destination=1)
In questo modo ti dovrebbe restituire degli errori se la query che gli passi
da codice non gli piace.
Se provi nel report a fare un refresh(F5) ti accorgi che i dati sono
cambiati, e proprio per questa ragione devi sempre dare da codice una
formula o una query affinchè nel report non compaiono i dati visualizzati in
creazione.
2) Prova il metodo action anche per verificare le formule .
    Ricordati dopo l'action di riportare la formula a ""
    CrystalReport1.Formulas(1) = "Nomeformula1 =''"
3)Visto che usi Access non hai bisogno di ODBC (io lo usavo per rendere
dinamica la connessione da codice usando SQL-SERVER)
Prova .Action e usa selectionformula o sqlquery
Comunque su una cosa sono sicuro:la scelta di passare ad Ado è azzeccata(è
molto più potente)
Ciao e fammi sapere

 wrote:
A volte il file Crystal report puo contenere anche il database, quindi
ogni stampa avviene utilizzando una copia interna del database. Per
evitare cio togli il flag "Salva dati con report". 
E per maggio sicurezza prima di stampare metti: 
CrystalReport1.DiscardSavedData = True
Anche io ho un problema:
          ' Prima setto come default la stampante richiesta
 
         Cry!CrystalReport1.PrinterName = Printer.DeviceName
         Cry!CrystalReport1.PrinterPort = Printer.Port
         Cry!CrystalReport1.PrinterDriver = Printer.DriverName
Se inposto questi parametri: Mi cambia la stampante correttemnte ma
non l'orientamento del report.
Se invece non inposto questi parametri: Non mi cambia piu la stampante
ma gestisce bene l'orientamento   !!!!!!!!!
Sembra fatto apposta , in perfetto stile Microsoff !, compra la
versione agggiornata che forse funziona meglio ?
Che fare ?
Ciao