Newsgroup: it.comp.lang.visual-basic
Titolo: [Crystal 8.0] Subreport: cambiare location tabelle ( utilizzo di API )

Premetto che non ho molta familiarità con Crystal Report e purtroppo ho
dovuto creare un report contenente 6 subreports, ma non riesco ad impostare
via codice la posizione dove si trova il database, perciò vi chiedo se
qualcuno è già a conoscenza di un metodo più rapido e sopratutto funzionante
per risolvere il problema.
Il codice che ho scritto è il seguente:
    Declare Function PEGetNSections Lib "crpe32.dll" (ByVal printJob%) As
Integer
    Declare Function PEGetSectionCode Lib "crpe32.dll" (ByVal printJob%,
ByVal sectionN%) As Integer
    Declare Function PEGetNSubreportsInSection Lib "crpe32.dll" (ByVal
printJob%, ByVal sectionCode%) As Integer
    Declare Function PEGetNthSubreportInSection Lib "crpe32.dll" (ByVal
printJob%, ByVal sectionCode%, ByVal subreportN%) As Long
    Declare Function PEGetSubreportInfo Lib "crpe32.dll" (ByVal printJob%,
ByVal subreportHandle As Long, subReportInfo As PESubreportInfo) As Integer
    Declare Function PEOpenSubreport Lib "crpe32.dll" (ByVal parentJob%,
ByVal subreportName$) As Integer
    Global Const PE_TABLE_LOCATION_LEN = 256
    Global Const PE_SIZEOF_TABLE_LOCATION = 258
    Type PETableLocation
        StructSize As Integer
        Location  As String * PE_TABLE_LOCATION_LEN
    End Type
    Type PESubreportInfo
        StructSize As Integer
        Name As String * PE_SUBREPORT_NAME_LEN
        NLinks As Integer
        IsOnDemand As Integer
    End Type
    Dim strTMP As String
    Dim lngTMP As Long
    Dim bolCancel As Boolean
    Dim petblTMP As PETableLocation
    Dim intNumSections As Integer
    Dim intI As Integer
    Dim intSectionCode
    Dim intNumSubReports As Integer
    Dim lngSubReportHandle As Long
    Dim subReportInfo As PESubreportInfo
    Dim intPrintSubJob As Integer
    Dim intJ As Integer
    Dim intSubReportInfo As Integer
    Dim intNumTableLocation As Integer
    Dim lngCont As Long
    Dim petblTMP2 As PETableLocation
    Dim intTest  As Integer
        intPrintJob = PEOpenPrintJob(strReport)
        If intPrintJob <> 0 Then
            strTMP = Trim(strRDBPath)
            With petblTMP
                .StructSize = PE_SIZEOF_TABLE_LOCATION
                .Location = strTMP & String$(256 - Len(strTMP), Chr(0))
            End With
            intNumSections = PEGetNSections(intPrintJob)
            For intI = 0 To intNumSections - 1
                intSectionCode = PEGetSectionCode(intPrintJob, intI)
                intNumSubReports = PEGetNSubreportsInSection(intPrintJob,
intSectionCode)
                For intJ = 0 To intNumSubReports - 1
                    lngSubReportHandle =
PEGetNthSubreportInSection(intPrintJob, intSectionCode, intJ)
                    intSubReportInfo = PEGetSubreportInfo(intPrintJob,
lngSubReportHandle, subReportInfo)
                    intPrintSubJob = PEOpenSubreport(intPrintJob,
subReportInfo.Name )
                    lngTMP = PESetNthTableLocation(intPrintSubJob, 0,
petblTMP)
                Next
            Next
...
...
Quando controllo il valore contenuto in subReportInfo.Name, mi restituisce
degli spazi vuoti, perciò penso che il problema sia nella funzione
PEGetSubreportInfo.
Spero di avere scritto il codice giusto, è la prima volta che mi cimento con
Crystal Report.
Un'ultima informazione riguarda sempre i subreports: Se tutti i reports e
sottoreports, che si trovano in una cartella ( ad esempio "C:\Temp")
venissero spostati in un'altra cartella ( ad esempio "C:\Temp2"), potrebbero
sorgere dei problemi durante l'apertura del report "padre"? In questo caso,
esiste un metodo per riassegnare via codice i sottoreport al report
principale?
Grazie a tutti

 ha scritto nel
messaggio news:Iqdna.31974$T34.8...@news2.tin.it...

Ho risolto in parte il problema, purtroppo non avevo dato nomi ai
sottoreport all'interno del report principale.
Ora passando il nome giusto alla funzione PEOpernSubreport riesco ad aprire
il sottoreport ed a modificare la location del database.
Purtroppo non riesco ancora a recuperare il nome giusto dalla funzione
PEGetSubreportInfo.
Qualcuno mi può spiegare come funziona esattamente e cosa gli devo passare?
Grazie a tutti