Newsgroup: it.comp.lang.visual-basic
Titolo: [CR8.0] SubReport : sono alla frutta :(

Ciao a tutti.
Ho un'applicazione che utilizza crystal reports per le stampe (ma và :) ).
La routine di stampa è abbastanza generica e tutto fila liscio finchè non
metto dei sottoreport nel mio bel report.
Il codice funziona così:
Ad una routine passo il nome del file del report e sta routine apre la
mascherina di anteprima e tutto fila liscio come l'olio.
L'unico problema è costituito dalla locazione del database mdb memorizzata
nel report stesso. Per ovviare a questo problema utilizzo questo codice:
Private Sub subCaricaReport(strDescrizione As String, strReport As String)
    ' [...] Omissis (codice per mettere in attesa l'utente);
    Dim crxApplication As New CRAXDRT.Application
    Dim crxReport As New CRAXDRT.Report
    Dim crxTabella As CRAXDRT.DatabaseTable
    ' Apro il report qui:
    Set crxReport = crxApplication.OpenReport(mdb_Path & "RPT\" & strReport)
    Load frmReportsAnteprima
    ' Mi passo tutte le tabelle del report per cambiare la locazione del
database;
    For Each crxTabella In crxReport.Database.Tables
        Select Case LCase(crxTabella.Name)
            Case "impostazioni", "menu"
                crxTabella.Location = mdb_Path & "\impostazioni.mdb"
            Case Else
                crxTabella.Location = Siti_Path & "\" & strSitoCaricato &
"\database.mdb"
        End Select
    Next crxTabella
    Set frmReportsAnteprima.crxMyReport = crxReport
    frmReportsAnteprima.CR.ReportSource = frmReportsAnteprima.crxMyReport
    frmReportsAnteprima.CR.ViewReport
    ' [...]    OMISSIS Altro codice inutile ai fini di questo post;
    frmReportsAnteprima.Show vbModal, Me
    Set frmReportsAnteprima = Nothing
    Set crxApplication = Nothing
    Set crxReport = Nothing
    Set crxTabella = Nothing
End Sub
Non trovo nessuna collection che mi permetta di accedere ai SubReports.
Oddio ho trovato la collection Sections che contiene una sottocollection
ReportObjects ma ogni oggetto di quest'ultima è object quindi l'intellisense
non va :( e con F2 non riesco a vedere metodi e properties dell'oggetto
ReportObjects.item(i)... sigh...
Poi ho trovato il metodo OpenSubreport, ma a che mi serve se non conosco il
nome del sotto report???
Ho cercato su Google ma non ho trovato nulla che io riesca a far funzionare
con la libreria CRAXDRT (ho provato a cambiare con CRAXDDT ma il codice mi
va in tilt...).
Poi non vi dico che casino che è il sito della seagate... :(
CiaoZ
SebaMix

Ho risolto cosě:
Ho messo questo codice subito dopo la chiamata al metodo
Set crxReport = crxApplication.OpenReport(mdb_Path & "RPT\" & strReport)
    Dim crxSection As CRAXDDT.Section
    Dim crxSubReportObj As CRAXDRT.SubreportObject
    Dim crxSubReport As CRAXDRT.Report
    Dim crxReportObjects As CRAXDRT.ReportObjects
    Dim ReportObject As Object
    For Each crxSection In crxReport.Sections
        Set crxReportObjects = crxSection.ReportObjects
        For Each ReportObject In crxReportObjects
            If ReportObject.Kind = crSubreportObject Then
                Set crxSubReportObj = ReportObject
                Set crxSubReport = crxSubReportObj.OpenSubreport
                For Each crxTabella In crxSubReport.Database.Tables
                    crxTabella.Location = Siti_Path & "\" & strSitoCaricato
& "\database.mdb"
                Next crxTabella
            End If
        Next ReportObject
    Next crxSection
P.S. se per sbaglio non trovavo il file developr.hlp col cavolo che trovavo
la soluzione. Sgrunt!
CiaoZ
SebaMix


E' vero: anch'io ho faticato a trovarlo, pur sapendo che esisteva...
ciao
ugo
p.s.
perchč non provi ad usare direttamente le Api di cryrep ?
(vedi il progetto di esempio che avevo postato sul Sito comune: crysvr.vbp)

 (vedi il progetto di esempio che avevo postato sul Sito comune:
crysvr.vbp)
Le userei anche, ma purtroppo la maggior parte degli esempi che trovo in
giro (anzi, tutti) non usano le chiamate API... :(
Comunque adesso riscarico il crysrv dal S.C. e mi metto di impegno :)
CiaoZ
SebaMix