Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Mi manca il report !! (lungo)

Sto quasi terminando il mio programmino però (come immaginavo) ho dei
problemi con la costruzione del report.
Vorrei usare Crystal report ed ho la versione allegata a VB6 Prof. la 4.6
Il foglio di lavoro deve contenere:
Il nome e i dati del cliente ( quello visualizzato al momento della stampa)
Il nome dell'impianto ( quello visualizzato al momento della stampa)
Le macchine alle quali è richiesto l'intevento
Le varie motivazioni della chiamata ( ed è questa la parte che mi crea
problemi.
Naturalmente prima di poter stampare il foglio di lavoro devo aver inserito
i vari dati nelle varie sezioni ed essere posizionato sui dati del foglio di
lavoro che voglio stampare.
L'inserimento del foglio di lavoro comporta la scelta delle macchine, che
costituiscono l'impianto, sulle quali andrò a eseguire il lavoro. Quindi se
l'impianto è costituito da 3 macchine potrebbe essere necessario eseguire
l'intervento magari solo su una macchina che al momento dell'inserimento del
nuovo foglio di lavoro vado a selezionare.
Le motivazioni della chiamata sono basate sull'ID del foglio di lavoro e
possono essere diverse (come quantità)
Allora ho creato una query che mi estrae tutti i dati.
Mettiamo che il foglio di lavoro sia costituito da un'impianto XXX e il
foglio di lavoro sia per 2 delle 3 macchine (Mac1 Mac2) che costituiscono
l'impianto e che le motivazioni della chiamata siano 2 (Mot1 Mot2)
Qundo vado a posizionare i campi e visualizzo il report vedo:
Impianto: XXX
Macchina: Mac1
                Mot1
                Mot2
Macchina: Mac2
                Mot1
                Mot2
Io vorrei, e dovrebbe essere così vedere:
Impianto: XXX
Macchina: Mac1
                Mac2
Motivazioni: Mot1
                   Mot2
Ho provato di tutto in crystal inserenzo sezioni girandole e rigirandole ma
penso che sia un problema di query.
In access avevo risolto il problema creando ed inserendo un sottoreport che
mostrava le motivazioni della chiamata di quel foglio di lavoro.
Grazie e scusate se mi sono dilungato ma ci sto sopra da diversi giorni.
Alberto


Ciao. La versione di CR inserita in VB(5-6) non supporta i subreports.
Una alternativa gratuita può essere il Crystal Report Designer Component, un
componente activex che ti permette di inserire i report all'interno
dell'applicazione (no file rpt sparsi), importando i report disegnati
precedentemente. Supporta i subreports ed è molto flessibile.
Difetti: è un po' complicato passare il percorso del file mdb a runtime (io
uso dei percorsi assoluti!!!) e, una volta importato il file rpt, se lo
esporti di nuovo in rpt NON è leggibile da CR4.6 (il CRDC usa l'engine di
CR6).
Non so se si trova ancora in giro (sul sito seagate 
www.seagatesoftware.com
è presente solo la trial della versione 8, mentre la versione 6 è free e
senza limitazioni e/o scadenze), ma eventualmente posso postare il file sul
S.C.
Saluti
Stefano

Se tu potessi farlo (magari al + presto :-))) )sarebbe fantastico.
Grazie

Ma nel S.C. come lo trovo poi?

Se vuoi per il momento lo puoi spedire al mio e-mail
Scusa se sono opprimente ma non vedo l'ora di finire sto programma.  :-)

Stefano puoi aiutarmi ?
Sto facendo delle prove con il designer 6 di crystal.
Guardando l'help stavo provando a passare i dati a crystal da runtime
Allora :
Ho creato una form frmCli con una connessione ado ad una tabella clienti con
il recordset
adoPrimaryRS.Open "select cli_nome,cli_indirizzo,cli_localita from CLIENTI
where cli_nome = '" & InputBox("Nome") & "'", db, adOpenStatic,
adLockOptimistic
Ho inserito un nuovo report CrystalReport1 con la form (frmPrev) di
visualizzazione (che apro quando premo un pulsante sulla frmCli.
Nel codice della frmPrev è stato aggiunto automaticamente :
Dim Report As New CrystalReport1
Option Explicit
Private Sub Form_Load()
CRViewer1.ReportSource = Report
CRViewer1.ViewReport
End Sub
Private Sub Form_Resize()
CRViewer1.Top = 0
CRViewer1.Left = 0
CRViewer1.Height = ScaleHeight
CRViewer1.Width = ScaleWidth
End Sub
Io ho solo aggiunto una riga come da esempio su Private Sub Form_Load() che
quindi è diventata:
Private Sub Form_Load()
Report.Database.SetDataSource adoPrimaryRS ********* riga aggiunta
CRViewer1.ReportSource = Report
CRViewer1.ViewReport
End Sub
Ma mi da un'errore di variabile non definita.
Dove sbaglio ?
Grazie, Alberto


Forse che nel form frmprev adoprimaryrs non è definito?

é il recordset della form che visualizza i dati.


non dubito, ma dove lo dichieri e con che visibilità?

Private Sub Form_Load()
  Dim rs As New ADOdb.Recordset
  Dim db As Connection
  Set db = New Connection
  Set adoPrimaryRS = New Recordset
  db.CursorLocation = adUseClient
  db.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=D:\1-Progetti
VB\Aermec\AERCALL New 1.1.4\Datacontrol\AERDATA.mdb;"
 adoPrimaryRS.Open "select cli_nome,cli_indirizzo,cli_localita from CLIENTI
where cli_nome = '" & InputBox("Nome") & "'", db, adOpenStatic,
adLockOptimistic
End Sub
Ho provato anche a mette invece che Private Sub Form_Load()  Public Sub
Form_Load() ma il risultato non cambia
La form nella quale è inserito questo evento è quella nella quale visualizzo
i dati
Poi è presente un pulsante che lancia la form che contiene il viewer di CR
nella quale sono inserite queste righe
Option Explicit
Dim Report As New CrystalReport1
Private Sub Form_Load()
    CRViewer1.ReportSource = Report
    Report.Database.SetDataSource adoPrimaryRS


Ho provato ad inserire il viewer CR nella maschera dove creo il recordset
(adoPrimaryRs) e visualizzo i clienti.
Non mi da più errore ma il report non visualizza i dati correttamente.
Comunque una cosa che non riesco a capire è che se creo un report da zero ho
bisogno di un database e una tabella a cui collegarlo per poter poi vedere e
scegliere i campi che andrò ad inserire.
Ma quando la fonte dati è una query a runtime come posso inserire i campi al
momento della creazione del report ?
Abbi pazienza :-))