Regénérer un *QRYDFN sans rentrer dans le gestionnaire Query
Citation de tomdarbon le 13 novembre 2018, 15 h 59 minBonjour,
Suite à modif de la structure de nombreux fichiers, je dois regénérer de nombreuses analyses Query (objets de type *QRYDFN) lisant ces fichiers, sous peine de plantage.
Y a-t-il une commande permettant de regénérer (recompiler) un Query, pour pouvoir facilement regénérer mes Query en masse, ou suis-je obligé d'ouvrir chaque Query via STRQRY pour celà ?
Je précise que je suis en V7R1.
D'avance merci.
Tom
Bonjour,
Suite à modif de la structure de nombreux fichiers, je dois regénérer de nombreuses analyses Query (objets de type *QRYDFN) lisant ces fichiers, sous peine de plantage.
Y a-t-il une commande permettant de regénérer (recompiler) un Query, pour pouvoir facilement regénérer mes Query en masse, ou suis-je obligé d'ouvrir chaque Query via STRQRY pour celà ?
Je précise que je suis en V7R1.
D'avance merci.
Tom
Citation de ctalhouet le 14 novembre 2018, 6 h 00 minBonjour
Voici peut etre une piste
ca recupere dans un fichier tous les qry
je lis ensuite ce fichier par un rcvf et j'en extrait un source
extrait de quelques lignes de mon CL
/* GENERATION D'UN FICHIER LISTANT TOUS LES QUERYS */
DLTF FILE(BER400/LSTQRY)
MONMSG MSGID(CPF2105)
DSPOBJD OBJ(*ALL/*ALL) OBJTYPE(*QRYDFN) +
OUTPUT(*OUTFILE) OUTFILE(BER400/LSTQRY)
/* CREATION D'UN FICHIER DE SOURCES POUR RECEVOIR LES */
/* REQUTES EXTRAITES *
DLTF FILE(BER400/QQRYSRC)
MONMSG MSGID(CPF2105)
CRTSRCPF FILE(BER400/QQRYSRC)
/* INITIALISATIONS ET LECTURE INITIALE DU FICHIER *
/* LISTANT LES QUERYS */
OVRDBF FILE(QADSPOBJ) TOFILE(BER400/LSTQRY)
CHGVAR VAR(&EOF) VALUE('0')
RCVF OPNID(DSPOBJ)
MONMSG MSGID(CPF0864) EXEC(CHGVAR VAR(&EOF) +
VALUE('1'))
/* BOUCLE DE LECTURE DU FICHIER LISTANT LES QUERYS
DOWHILE COND(*NOT &EOF)
* RCUPRATION DU SOURCE SQL DANS TEMP/QQRYSRC ; LE NOM */RTVQMQRY QMQRY(&DSPOBJ_ODLBNM/&DSPOBJ_ODOBNM) +
SRCFILE(BER400/QQRYSRC) +
SRCMBR(&DSPOBJ_ODOBNM) ALWQRYDFN(*ONLY)
MONMSG MSGID(QWM2701)
/* LECTURE SUIVANTE DU FICHIER LISTANT LES QUERYS */
RCVF OPNID(DSPOBJ)
MONMSG MSGID(CPF0864) EXEC(CHGVAR VAR(&EOF) +
VALUE('1'))
ENDDO
/* SUPPRESSION DE SUBSTITUTION DE FICHIER */
DLTOVR FILE(QADSPOBJ)
ENDPGMDSPOBJD OBJ(*ALL/*ALL) OBJTYPE(*QRYDFN) OUTPUT(*OUTFILE) OUTFILE(BER400/LSTQRY)
RCVF OPNID(DSPOBJ)
RTVQMQRY QMQRY(&DSPOBJ_ODLBNM/&DSPOBJ_ODOBNM) SRCFILE(BER400/QQRYSRC) SRCMBR(&DSPOBJ_ODOBNM) ALWQRYDFN(*ONLY)
J'obtiens un fichier source avec autant de sources que de qry et dans chaque on a les fichiers en clair
exemple de 'source qry ' recupéré
H QM4 05 Q 01 E V W E R 01 03 16/15/12 05:00
V 1001 050 liste des clients avec remise (-> AM Guimard)
V 5001 004 *HEX
SELECT
ALL NUMCLI, NOMCLI, NOTAR4
FROM QS36F/CLIENT T01
WHERE CAT = 6
AND TAUREM > 0
ORDER BY NOTAR4 ASCensuite dans pdm 25 f13 et je retrouve tous les qry qui utilisent tel fichier ....
Moi je fais comme ca quand je modifie un fichier , car on a des QRY lancés en Auto dans des Cl (la nuit!)
Bonjour
Voici peut etre une piste
ca recupere dans un fichier tous les qry
je lis ensuite ce fichier par un rcvf et j'en extrait un source
extrait de quelques lignes de mon CL
/* GENERATION D'UN FICHIER LISTANT TOUS LES QUERYS */
DLTF FILE(BER400/LSTQRY)
MONMSG MSGID(CPF2105)
DSPOBJD OBJ(*ALL/*ALL) OBJTYPE(*QRYDFN) +
OUTPUT(*OUTFILE) OUTFILE(BER400/LSTQRY)
/* CREATION D'UN FICHIER DE SOURCES POUR RECEVOIR LES */
/* REQUTES EXTRAITES *
DLTF FILE(BER400/QQRYSRC)
MONMSG MSGID(CPF2105)
CRTSRCPF FILE(BER400/QQRYSRC)
/* INITIALISATIONS ET LECTURE INITIALE DU FICHIER *
/* LISTANT LES QUERYS */
OVRDBF FILE(QADSPOBJ) TOFILE(BER400/LSTQRY)
CHGVAR VAR(&EOF) VALUE('0')
RCVF OPNID(DSPOBJ)
MONMSG MSGID(CPF0864) EXEC(CHGVAR VAR(&EOF) +
VALUE('1'))
/* BOUCLE DE LECTURE DU FICHIER LISTANT LES QUERYS
DOWHILE COND(*NOT &EOF)
* RCUPRATION DU SOURCE SQL DANS TEMP/QQRYSRC ; LE NOM */
RTVQMQRY QMQRY(&DSPOBJ_ODLBNM/&DSPOBJ_ODOBNM) +
SRCFILE(BER400/QQRYSRC) +
SRCMBR(&DSPOBJ_ODOBNM) ALWQRYDFN(*ONLY)
MONMSG MSGID(QWM2701)
/* LECTURE SUIVANTE DU FICHIER LISTANT LES QUERYS */
RCVF OPNID(DSPOBJ)
MONMSG MSGID(CPF0864) EXEC(CHGVAR VAR(&EOF) +
VALUE('1'))
ENDDO
/* SUPPRESSION DE SUBSTITUTION DE FICHIER */
DLTOVR FILE(QADSPOBJ)
ENDPGM
DSPOBJD OBJ(*ALL/*ALL) OBJTYPE(*QRYDFN) OUTPUT(*OUTFILE) OUTFILE(BER400/LSTQRY)
RCVF OPNID(DSPOBJ)
RTVQMQRY QMQRY(&DSPOBJ_ODLBNM/&DSPOBJ_ODOBNM) SRCFILE(BER400/QQRYSRC) SRCMBR(&DSPOBJ_ODOBNM) ALWQRYDFN(*ONLY)
J'obtiens un fichier source avec autant de sources que de qry et dans chaque on a les fichiers en clair
exemple de 'source qry ' recupéré
H QM4 05 Q 01 E V W E R 01 03 16/15/12 05:00
V 1001 050 liste des clients avec remise (-> AM Guimard)
V 5001 004 *HEX
SELECT
ALL NUMCLI, NOMCLI, NOTAR4
FROM QS36F/CLIENT T01
WHERE CAT = 6
AND TAUREM > 0
ORDER BY NOTAR4 ASC
ensuite dans pdm 25 f13 et je retrouve tous les qry qui utilisent tel fichier ....
Moi je fais comme ca quand je modifie un fichier , car on a des QRY lancés en Auto dans des Cl (la nuit!)
Citation de remit le 14 novembre 2018, 11 h 34 minOui, j'avais déposé le même genre de source dans ce sujet ; mais cela permet seulement de repérer les fichiers utilisés, pas de regénérer les Querys.
Oui, j'avais déposé le même genre de source dans ce sujet ; mais cela permet seulement de repérer les fichiers utilisés, pas de regénérer les Querys.
Citation de tomdarbon le 15 novembre 2018, 16 h 15 minMerci ctalhouet et Remit.
Finalement je n'avais "que" une cinquantaine de querys, je les ai donc regénérés chacun manuellement via WRKQRY, çà m'a pris 15 minutes. C'est juste un peu répétitif et rébarbatif.
L'idéal serait, comme je l'ai lu ici sur un autre poste, de prendre le temps à l'occasion de les convertir en requete SQL.
Il faudra alors tout de même retourner dans les programmes appelant ces Query pour changer le "RUNQRY" par un RUNSQLSTM et les recompiler.
Cà faciliera ensuite nettement la maintenance : si les noms de fichiers utilisés et leurs zones utilisées n'ont pas changé, rien à faire ; pas de compil...
Merci à vous.
Merci ctalhouet et Remit.
Finalement je n'avais "que" une cinquantaine de querys, je les ai donc regénérés chacun manuellement via WRKQRY, çà m'a pris 15 minutes. C'est juste un peu répétitif et rébarbatif.
L'idéal serait, comme je l'ai lu ici sur un autre poste, de prendre le temps à l'occasion de les convertir en requete SQL.
Il faudra alors tout de même retourner dans les programmes appelant ces Query pour changer le "RUNQRY" par un RUNSQLSTM et les recompiler.
Cà faciliera ensuite nettement la maintenance : si les noms de fichiers utilisés et leurs zones utilisées n'ont pas changé, rien à faire ; pas de compil...
Merci à vous.