Question Disconnect Crystal Report Connexion

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:
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,
 

Cecil

19+ years progress programming and still learning.
Try this... Don't know if it will work.

Code:
DEFINE VARIABLE k AS INTEGER NO-UNDO.

DO k = 1 TO crReport:DATABASE:tables:COUNT:

    crReport:DATABASE:tables(k):Dispose() .
END.

crReport:Database:Dispose().
crReport:Close().
crReport:Dispose().
 
Try this... Don't know if it will work.

Code:
DEFINE VARIABLE k AS INTEGER NO-UNDO.

DO k = 1 TO crReport:DATABASE:tables:COUNT:

    crReport:DATABASE:tables(k):Dispose() .
END.

crReport:Database:Dispose().
crReport:Close().
crReport:Dispose().
I get an error on the Dispose(). Telling me that it's unknown .

Maybe I will have to change the way I connect things.

Thanks for your help .
 

Cecil

19+ years progress programming and still learning.
I get an error on the Dispose(). Telling me that it's unknown .

Maybe I will have to change the way I connect things.

Thanks for your help .
Yeah, I did not if it was going to work either.
I just founds some C# examples on stack overflow who have reported similar issue. just converted the C# code to ABL.
 
Yeah, I did not if it was going to work either.
I just founds some C# examples on stack overflow who have reported similar issue. just converted the C# code to ABL.
I did quite the same thing.
I assume that it work well from a C# app but not from ABL code.
But the way I connect things maybe the route of my issue. I have found an open source code of my ERP editor that explain things . So will try things.
 
Top