BobyIsProgress
Member
Hello Guyz,
We are using Crystal Report 11. And we are using it to make reports of many kinds.
We have an issue with the SQL connexion, it stay connected after the report was generated and until I completly shutdown the prowin32 by closing the App totaly (not just the window calling the report) .
I tried to use this:
There is the code I'm using to generate the report:
As you can see in it I also release the crReport object.
if you have any advice or doc I can look at I would gladly take them
Best Regards,
We are using Crystal Report 11. And we are using it to make reports of many kinds.
We have an issue with the SQL connexion, it stay connected after the report was generated and until I completly shutdown the prowin32 by closing the App totaly (not just the window calling the report) .
I tried to use this:
Code:/* Test 1 */ DEFINE VARIABLE k AS INTEGER NO-UNDO. DO k = 1 TO crReport:DATABASE:tables:COUNT: crReport:DATABASE:tables(k):Dispose() . END. /* Test 2 */ crReport:Dispose() .
There is the code I'm using to generate the report:
Code:
/*------------------------------------------------------------------------------
Purpose: Edition d'un rapport crystal au format PDF
Parameters: <none>
Notes:
------------------------------------------------------------------------------*/
DEFINE INPUT PARAMETER rptNumenr AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER rptChemin AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER typChemin AS INTEGER NO-UNDO.
DEFINE INPUT PARAMETER pdfChemin AS CHARACTER NO-UNDO.
DEFINE INPUT PARAMETER visualisation AS LOGICAL NO-UNDO.
{vignal/CRExportDestinationType.i}
{vignal/CRExportFormatType.i}
DEFINE VARIABLE crAppn AS COM-HANDLE . /* Application Crystal Report */
DEFINE VARIABLE crReport AS COM-HANDLE . /* Rapport Crystal */
DEFINE VARIABLE crExportOptions AS COM-HANDLE. /* Paramètre d'export */
DEFINE VARIABLE crSection AS COM-HANDLE.
DEFINE VARIABLE crSubReport AS COM-HANDLE.
DEFINE VARIABLE crObject AS COM-HANDLE.
DEFINE VARIABLE crParam AS COM-HANDLE.
DEFINE VARIABLE crSubParam AS COM-HANDLE.
DEFINE VARIABLE crParamFld AS COM-HANDLE.
/* paramétre de connexion */
/* base standard */
DEFINE VARIABLE cSrvBas AS CHARACTER NO-UNDO.
DEFINE VARIABLE cUseBas AS CHARACTER NO-UNDO.
DEFINE VARIABLE cPwdBas AS CHARACTER NO-UNDO.
/* base spé */
DEFINE VARIABLE cSrvSpe AS CHARACTER NO-UNDO.
DEFINE VARIABLE cUseSpe AS CHARACTER NO-UNDO.
DEFINE VARIABLE cPwdSpe AS CHARACTER NO-UNDO.
DEFINE VARIABLE i AS INTEGER NO-UNDO.
DEFINE VARIABLE j AS INTEGER NO-UNDO.
DEFINE VARIABLE cmpt AS INTEGER NO-UNDO.
/* récupération du chemin */
CASE typChemin :
WHEN 1 THEN DO:
FIND VCHEMIN WHERE VCHEMIN.checod = rptChemin NO-LOCK NO-ERROR.
rptChemin = VCHEMIN.cheche .
END.
WHEN 3 THEN DO:
FIND SYSPGM WHERE SYSPGM.pgmnom = rptChemin NO-LOCK NO-ERROR.
rptChemin = SYSPGM.pgmchemin + SYSPGM.pgmnom.
END.
END.
FIND FIRST SYSENV WHERE SYSENV.envcod = "CRYSTAL-REPORT":U NO-LOCK NO-ERROR. /* Paramètre de connection */
ASSIGN /* Récupération des valeurs de la SYSENV */
cSrvBas = ENTRY(1,SYSENV.envtxt,"|":U)
cUseBas = ENTRY(2,SYSENV.envtxt,"|":U)
cPwdBas = ENTRY(3,SYSENV.envtxt,"|":U).
IF NUM-ENTRIES(SYSENV.envtxt, "|":U) = 6 THEN ASSIGN /* Base spé */
cSrvSpe = ENTRY(4,SYSENV.envtxt,"|":U)
cUseSpe = ENTRY(5,SYSENV.envtxt,"|":U)
cPwdSpe = ENTRY(6,SYSENV.envtxt,"|":U).
/* Création de l'application dans le com-handle */
CREATE "CrystalRunTime.Application" crAppn NO-ERROR.
/* Attribution du rapport à exploiter */
crReport = crAppn:OpenReport(rptChemin) NO-ERROR.
/* Connexion Setup for the report */
DO cmpt = 1 TO crReport:DATABASE:tables:COUNT:
IF SUBSTRING(crReport:DATABASE:tables(cmpt):NAME, 1, 1) = "S":U THEN /* Si table lié à silv-exp */
crReport:DATABASE:Tables(cmpt):ConnectionProperties("Password":U) = cPwdBas.
ELSE ASSIGN
crReport:DATABASE:Tables(cmpt):ConnectionProperties("Password":U) = cPwdSpe .
END.
crReport:DiscardSavedData.
crParam = crReport:ParameterFields.
DO cmpt = 1 TO NUM-ENTRIES(rptNumenr):
crParamFld = crParam:ITEM(cmpt).
NO-RETURN-VALUE crParamFld:AddCurrentValue(ENTRY(cmpt,rptNumenr)) .
END.
/*crReport:ParameterFields:GetItemByName("iddoc":U):AddCurrentValue(ENTRY(1,rptNumenr)) . /* On donne le numéro de doc a récupérer */*/
IF NUM-ENTRIES(rptNumenr) > 1 THEN /* Si présence de paramètre supplémentaire, on les ajoutes */
DO cmpt = 3 TO NUM-ENTRIES(rptNumenr) :
crReport:ParameterFields:GetItemByName("param":U + STRING(cmpt - 2)):AddCurrentValue(ENTRY(cmpt,rptNumenr)) .
END.
DO i = 1 TO crReport:Sections:COUNT :
crSection = crReport:Sections:ITEM(i) .
DO j = 1 TO crSection:reportObjects:COUNT :
crObject = crSection:reportObjects:ITEM(j).
IF crObject:kind = 5 THEN DO:
crSubReport = crObject:OpenSubreport .
DO cmpt = 1 TO crSubReport:DATABASE:tables:COUNT:
IF SUBSTRING(crSubReport:DATABASE:tables(cmpt):NAME, 1, 1) = "S":U THEN /* Si table lié à silv-exp */
crSubReport:DATABASE:Tables(cmpt):ConnectionProperties("Password":U) = cPwdBas.
ELSE ASSIGN
crSubReport:DATABASE:Tables(cmpt):ConnectionProperties("Password":U) = cPwdSpe.
END.
crSubReport:DiscardSavedData.
crSubParam = crSubReport:ParameterFields.
DO cmpt = 1 TO NUM-ENTRIES(rptNumenr):
crParamFld = crSubParam:ITEM(cmpt).
IF NUM-ENTRIES(crParamFld:NAME,'.':U) = 1 THEN
NO-RETURN-VALUE crParamFld:AddCurrentValue(ENTRY(cmpt,rptNumenr)) .
END.
END.
END.
END.
ASSIGN
crExportOptions = crReport:ExportOptions
crExportOptions:DiskFileName = pdfChemin
crExportOptions:DestinationType = {&crEDTDiskFile}
crExportOptions:FormatType = {&crEFTPortableDocFormat}
crExportOptions:PDFExportAllPages = TRUE .
crReport:DisplayprogressDialog = FALSE.
crReport:EXPORT(FALSE) .
IF VALID-HANDLE(crSubReport) THEN RELEASE OBJECT crSubReport .
IF VALID-HANDLE(crObject) THEN RELEASE OBJECT crObject .
IF VALID-HANDLE(crParamFld) THEN RELEASE OBJECT crParamFld .
IF VALID-HANDLE(crSection) THEN RELEASE OBJECT crSection .
IF VALID-HANDLE(crSubParam) THEN RELEASE OBJECT crSubParam .
IF VALID-HANDLE(crParam) THEN RELEASE OBJECT crParam .
IF VALID-HANDLE(crExportOptions) THEN RELEASE OBJECT crExportOptions.
/*IF VALID-HANDLE(crReport) THEN */ RELEASE OBJECT crReport.
IF VALID-HANDLE(crAppn) THEN RELEASE OBJECT crAppn.
ASSIGN
crExportOptions = ?
crReport = ?
crAppn = ? .
IF visualisation THEN
RUN utils/wviewdoc.w(pdfChemin,'Aperçu PDF') .
As you can see in it I also release the crReport object.
if you have any advice or doc I can look at I would gladly take them
Best Regards,