Hola,

 

Tal y como te decía en el mail anterior yo creo que el problema lo tienes en
los grupos de activación, a continuación te indico como lo probaría yo:

 

PGM001CL (Este CL lo compilaría en grupo de activación por defecto)

 

Podría ser algo como:

 

PGM                    

                       

CALL       PGM(PGM002) 

                       

RCLACTGRP  ACTGRP(FACTURAS)

                       

ENDPGM   

 

PGM002, Podría ser un RPGLE normal que llame al SQLRPGLE PGM003, tantas
veces como sea necesario. (Compilar como grupo de activación FACTURAS) 

 

PGM003, Sería el SQLRPGLE,  Compilar con CRTSQLRPGLI con *ENDACTGRP, sin
embargo no podemos indicarle el grupo de activación ó por lo menos yo no se
como hacerlo, así que entro al fichero QSQLTEMP1   *FILE       PF-SRC, que
se habrá creado en la QTEMP, compilo el fuente RPGLE que contiene con
CRTBNDRPG, ahora ya puedo indicarle que el grupo de activación es FACTURAS

 

Así tendré el PGM002 Y PGM003 en el mismo grupo de activación (FACTURAS), el
CL PGM001CL ejecuta el PGM002 y este a su vez llama al SQL PGM003, cada vez
que yo vuelva al PGM002, las vías seguirán abiertas para sucesivas llamadas,
sin embargo cuando finalice el PGM002, retornaré a la siguiente instrucción
del CL que en este caso sería RCLACTGRP ACTGRP(FACTURAS) lo que produciría
el cierre de las vías abiertas en el grupo de activación FACTURAS.

 

Un Saludo,

 

Angel. 

 

              

 

De: [email protected]
[mailto:[email protected]] En nombre de Javier Mora
Enviado el: lunes, 18 de enero de 2010 18:34
Para: forum.help400
Asunto: RE: Cerrar cursor explicitamente con CLOSE

 

Hola a todos de nuevo:

 

he realizado algunas pruebas para intentar comprender como funciona esto.
Estoy en V5R4, ejecutando siempre los programas bajo el grupo de activación
por defecto (*DFTACTGRP). El programa está compilado con
CLOSQLCSR(*ENDACTGRP), es decir, se cierran "implicitamente" los cursores al
finalar el grupo de activación.

 

Por "implicitamente" yo entiendo cuando cierra el sistema el cursor si yo no
lo indico "explicitamente" con un CLOSE. ¿Puedo estar equivocado?

 

La prueba consisten en llamar reiteradamente al mismo programa que abre los
cursores para ver como reacciona.

 

La primera vez (después de una IPL) que se ejecuta el programa finaliza y
quedan cerrados todos los cursores. Lo observo con DSPJOB y veo que no
quedan vías de acceso abiertas.

 

La segunda vez (sin cerrar el trabajo) deja abiertas las vías de acceso. si
cierro el trabajo y vuelvo a ejecutar el programa, siguen quedándose los
cursores abiertos.

 

Si recompilo el programa con los mismos parámetros la secuencia de pasos
anteriores vuelve a repetirse. La primera ejecución cierra vías y las
siguientes las deja abiertas.

 

No tengo muy claro como funciona SQL internamente pero llego a las
siguientes conclusiones:

 

- El programa cierra los cursores la primera vez que ejecuta el programa al
encontral el CLOSE.

- Si el programa se ejecuta varias veces el sistema lo recuerda y deja las
vías de acceso abiertas para las siguientes llamadas. Me imagino que así
mejora el rendimiento del equipo.

- No sé si influye en algo el grupo de activación por defecto, pero al
cerrar el trabajo el grupo se cierra.

- Al recompilar el programa parace como que el sistema reconstruye "algo",
no se el qué, pero actúa como si fuera la primera vez que se ejecutara el
programa. Igual que al realizar una IPL.

 

Si el programa lo compila con CLOSQLCSR(*ENDMOD) los cursores se cierran
siempre que finaliza el programa.

 

¿Alguien puede aclarar alguna cosa más sobre este tema? ¿Estoy equivocado en
algo? ¿Dónde puedo obtener información sobre el tema? He consultado el
manual sobre programación con SQL incrustado y no veo nada a este respecto.

 

Un saludo a t...@s.

 

Javier

 

  _____  

De: [email protected]
[mailto:[email protected]] En nombre de Angel Almeida
Enviado el: lunes, 04 de enero de 2010 12:01
Para: 'forum.help400'
Asunto: RE: Cerrar cursor explicitamente con CLOSE

Hola y feliz año,

 

No comentas si este programa es llamado desde otro ó lo ejecutas
directamente, si lo ejecutas directamente debería utilizar tal y como te ha
dicho Jaime *ENDMOD, si lo haces desde otro programa, tendrías que revisar
las llamadas y la forma de utilizar los grupos de activación, es posible que
no los estés utilizando adecuadamente 

 

Saludos,

 

Angel Almeida.

 

 

De: [email protected]
[mailto:[email protected]] En nombre de Javier Mora
Enviado el: lunes, 28 de diciembre de 2009 18:09
Para: forum.help400
Asunto: RE: Cerrar cursor explicitamente con CLOSE

 

He hecho algunas pruebas y observo que en unas ocasiones si cierra todos los
ficheros al hacer el CLOSE del cursor y en otras no, pero todavía no acabo
de entender lo que ocurre.

 

En mi caso el programa está compilado con COMMIT(*NONE) y
CLOSQLCSR(*ENDACTGRP)

 

  _____  

De: [email protected]
[mailto:[email protected]] En nombre de Jaime Villa
Torres
Enviado el: lunes, 28 de diciembre de 2009 16:39
Para: forum.help400
Asunto: Re: Cerrar cursor explicitamente con CLOSE

Por lo general la compilacin de un sqlrpgle la realizo, con los siguientes
valores

Control de compromiso  . . . . . COMMIT         *NONE

Cerrar cursor SQL  . . . . . . . CLOSQLCSR      *ENDMOD

 

Prueba como te va....

 

----- Original Message ----- 

From: Javier Mora <mailto:[email protected]>  

To: Forum <mailto:[email protected]>  AS/400 en castellano 

Sent: Monday, December 28, 2009 6:14 AM

Subject: Cerrar cursor explicitamente con CLOSE

 

Feliz Navidad para t...@s:

 

Tengo un programa que abre unos cuantos cursores y se cierran al terminar de
usarlos con CLOSE nombreCursor. Pensaba que con esto era necesario, pero
compruebo que los archivos utilizados para extraer la información siguen
abiertos en el trabajo. ¿Qué estoy haciendo mal? ¿Es necesario indicar algo
en la compilación? Por lo que leo, el parámetro CLOSQLCSR se reciere a un
cierre implícito y entiendo que si hago un CLOSE en el programa le hará caso
a éste.

 

Un saludo y gracias por vuestros comentarios.

 

Javier Mora García

 


  _____  


____________________________________________________
© Publicaciones Help400, S.L. - Todos los
derechos reservados http://www.help400.es
----------------------------------------------------
Para darte de baja visita la siguente URL:
http://listas.combios.es/mailman/listinfo/forum.help400

____________________________________________________
© Publicaciones Help400, S.L. - Todos los
derechos reservados http://www.help400.es
----------------------------------------------------
Para darte de baja visita la siguente URL:
http://listas.combios.es/mailman/listinfo/forum.help400

Responder a