Discussione:
Vie di accesso aperte
(troppo vecchio per rispondere)
m@ssimo
2006-03-29 17:45:25 UTC
Permalink
Ho questo problema:
faccio la CALL di PGM1
che a sua volta fa una CALL a PGM2 dove vengono utilizzati alcuni file,
poi chiudo PGM2 con *InLR = *On e RETURN.
Se a questo punto faccio la visualizzazione dei file aperti (R Sist + 3 +
opz 14) trovo sempre i file utilizzati da PGM2.

Come posso risolvere questo problema?
Steve
2006-03-30 06:43:12 UTC
Permalink
Le ho capito bene il PGM2 terina on questo modo:
.....
EVAL *INLR=*ON
RETURN

Se è cosi attenzione che il "ciclo" non si chiude, ovvero in pgm non sente
LR.
Elimina RETURN e fai chiudere il ciclo in modo naturale.
Steve
Post by ***@ssimo
faccio la CALL di PGM1
che a sua volta fa una CALL a PGM2 dove vengono utilizzati alcuni file,
poi chiudo PGM2 con *InLR = *On e RETURN.
Se a questo punto faccio la visualizzazione dei file aperti (R Sist + 3 +
opz 14) trovo sempre i file utilizzati da PGM2.
Come posso risolvere questo problema?
m@ssimo
2006-03-30 08:04:53 UTC
Permalink
ma esiste un comando per far chiudere le vie dei dati aperte.
Post by Steve
.....
EVAL *INLR=*ON
RETURN
Se è cosi attenzione che il "ciclo" non si chiude, ovvero in pgm non sente
LR.
Elimina RETURN e fai chiudere il ciclo in modo naturale.
Steve
Post by ***@ssimo
faccio la CALL di PGM1
che a sua volta fa una CALL a PGM2 dove vengono utilizzati alcuni file,
poi chiudo PGM2 con *InLR = *On e RETURN.
Se a questo punto faccio la visualizzazione dei file aperti (R Sist + 3 +
opz 14) trovo sempre i file utilizzati da PGM2.
Come posso risolvere questo problema?
Damiano Anderlini
2006-03-30 08:08:59 UTC
Permalink
Scusa, è rpg o rpgile??

Se è rpgile bisogna tener con to di quale actgrp usa pgm2
m@ssimo
2006-03-30 08:42:07 UTC
Permalink
è rpgile e i programmi sono compilati con ActGrp(*CALLER)


"Damiano Anderlini" <***@gmail.com> ha scritto nel messaggio news:***@u72g2000cwu.googlegroups.com...
Scusa, è rpg o rpgile??

Se è rpgile bisogna tener con to di quale actgrp usa pgm2
m@ssimo
2006-03-30 09:52:21 UTC
Permalink
ho risolto mettendo ActGrp(*NEW) sul primo programma.
Post by ***@ssimo
è rpgile e i programmi sono compilati con ActGrp(*CALLER)
Scusa, è rpg o rpgile??
Se è rpgile bisogna tener con to di quale actgrp usa pgm2
Dr. Ugo Gagliardelli
2006-03-30 10:23:30 UTC
Permalink
Post by ***@ssimo
ho risolto mettendo ActGrp(*NEW) sul primo programma.
No è una gran bella soluzione, cosi' facendo tutte le volte che lanci il
programma viene creato un actgrp nuovo, e in quello vecchio il file rimane
aperto. Sospetto che il tuo file rimanga aperto per colpa di un ovrdbf
sbagliato. Guarda le sostituzioni attive nel job, per default l'ovrdbf dice
OVRDBF OVRSCOPE(*ACTGRPDFN) mentre a te servirebbe OVRDBF OVRSCOPE(*CALLLVL)
inoltre se il tuo file e' SHARE(*YES) dovresti anche aggiungere SHARE(*NO)
nell'ovrdbf. Il sistema piu' sicuro e' comunque quello di non usare l'open
implicita quindi utilizzare la keyword USROPN nella dichiarazione del file ed
aprire e chiudere il file a programma eventualmente testandone l'apertura, p.e.:
F file USROPN
...
D wasalreadyopen N
...
C if Not %open(file)
C open file
C eval wasalreadyopen = *on
C endif
...
C if Not wasalreadyopen
C close file
C endif
...

In modo da rispettare cio' che hanno fatto i programmi precedenti di quel file
--
Dr.Ugo Gagliardelli,Modena,ItalyCertifiedUindoscrasherAñejoAlcoolInside
Spaccamaroni andate a cagare/Spammers not welcome/Spammers vão à merda
Spamers iros a la mierda/Spamers allez vous faire foutre
Spammers loop schijten/Spammers macht Euch vom Acker
m@ssimo
2006-03-30 12:36:02 UTC
Permalink
non ci sono OVRDBF, ma uso l'open implicita dei file e praticamente l'ho
usata su quasi tutti i miei programmi.
Comunque il programma che ho compilato con ActGrp(*NEW) è il programma di
menù della mia applicazione
e di conseguenza sarà richiamato solo quando l'utente deve cambiare ditta e
di conseguenza verrà modificata la
lista delle librerie.
Post by Dr. Ugo Gagliardelli
Post by ***@ssimo
ho risolto mettendo ActGrp(*NEW) sul primo programma.
No è una gran bella soluzione, cosi' facendo tutte le volte che lanci il
programma viene creato un actgrp nuovo, e in quello vecchio il file rimane
aperto. Sospetto che il tuo file rimanga aperto per colpa di un ovrdbf
sbagliato. Guarda le sostituzioni attive nel job, per default l'ovrdbf dice
OVRDBF OVRSCOPE(*ACTGRPDFN) mentre a te servirebbe OVRDBF
OVRSCOPE(*CALLLVL)
inoltre se il tuo file e' SHARE(*YES) dovresti anche aggiungere SHARE(*NO)
nell'ovrdbf. Il sistema piu' sicuro e' comunque quello di non usare
l'open
implicita quindi utilizzare la keyword USROPN nella dichiarazione del file ed
F file USROPN
...
D wasalreadyopen N
...
C if Not %open(file)
C open file
C eval wasalreadyopen = *on
C endif
...
C if Not wasalreadyopen
C close file
C endif
...
In modo da rispettare cio' che hanno fatto i programmi precedenti di quel file
--
Dr.Ugo Gagliardelli,Modena,ItalyCertifiedUindoscrasherAñejoAlcoolInside
Spaccamaroni andate a cagare/Spammers not welcome/Spammers vão à merda
Spamers iros a la mierda/Spamers allez vous faire foutre
Spammers loop schijten/Spammers macht Euch vom Acker
Obelix
2006-03-31 07:42:39 UTC
Permalink
Post by ***@ssimo
Se a questo punto faccio la visualizzazione dei file aperti (R Sist + 3 +
opz 14) trovo sempre i file utilizzati da PGM2.
Banalmente, direi che non lo fai, o che PGM2 richiama qualcosa' altro
che tiene aperti quei file (trigger, magari ?).

Ci puo scommettere la tu' parte di paradiso, perche' avro' almeno 2000
pgm fatti cosi'...
Post by ***@ssimo
ma esiste un comando per far chiudere le vie dei dati aperte.
Se sei nel gruppo di attivazione standard e non usi un CLLE,
RCLRSC(*CALLER)

Altrimento, una banale Close() nel programma will do the magic.
m@ssimo
2006-03-31 13:41:44 UTC
Permalink
no ti assicuro che anche tutti i miei pgm eccetto alcune procedure usano:
*InLR = *On;

RETURN;
Post by Obelix
Post by ***@ssimo
Se a questo punto faccio la visualizzazione dei file aperti (R Sist + 3 +
opz 14) trovo sempre i file utilizzati da PGM2.
Banalmente, direi che non lo fai, o che PGM2 richiama qualcosa' altro
che tiene aperti quei file (trigger, magari ?).
Ci puo scommettere la tu' parte di paradiso, perche' avro' almeno 2000
pgm fatti cosi'...
Post by ***@ssimo
ma esiste un comando per far chiudere le vie dei dati aperte.
Se sei nel gruppo di attivazione standard e non usi un CLLE,
RCLRSC(*CALLER)
Altrimento, una banale Close() nel programma will do the magic.
Obelix
2006-04-10 16:36:23 UTC
Permalink
Post by ***@ssimo
*InLR = *On;
Il che non serve ad una mazza, se usi i trigger (i file vengono
chiusi, i trigger *NO*).

Loading...