Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > AS/400
AS/400 Le Forum d'entraide sur IBM AS/400 - iSeries. RPG.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 08/01/2010, 10h41   #1
Nouveau Membre du Club
 
Femme Françoise SPIECART
Responsable de service informatique
Inscription : décembre 2007
Messages : 35
Détails du profil
Informations personnelles :
Nom : Femme Françoise SPIECART

Informations professionnelles :
Activité : Responsable de service informatique
Secteur : Industrie

Informations forums :
Inscription : décembre 2007
Messages : 35
Points : 27
Points : 27
Par défaut Paramètrage de fichiers logiques

Bonjour,

Nous créons des fichiers temporaires physiques suffixés avec un n° récupéré dans une dataarea
Ex : Nom du fichier physique : M708(n°de l'option menu)+1234 (n°dataarea)
Ce fichier est crée avec les DDS d'un fichier qui s'appelle M708000A
Ce fichier physique a 1 fichier logique : M7080AL1
Nous bloquons sur la création de ce logique sur le fichier physique paramètré
Avez-vous une solution !!!
Merci
FSPIECART
fspiecart est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2010, 11h57   #2
Membre Expert
 
Patrick
Inscription : mai 2008
Messages : 816
Détails du profil
Informations personnelles :
Nom : Patrick
Âge : 41
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mai 2008
Messages : 816
Points : 1 035
Points : 1 035
Utilise un CREATE INDEX plutôt que des DDS
K2R400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2010, 13h26   #3
Membre Expert
 
Avatar de Hédhili Jaïdane
 
Homme Hédhili Jaïdane
Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol
Inscription : juin 2007
Messages : 1 601
Détails du profil
Informations personnelles :
Nom : Homme Hédhili Jaïdane
Localisation : Tunisie

Informations professionnelles :
Activité : Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol

Informations forums :
Inscription : juin 2007
Messages : 1 601
Points : 2 066
Points : 2 066
Envoyer un message via Skype™ à Hédhili Jaïdane
Citation:
Envoyé par fspiecart Voir le message
Bonjour,

Nous créons des fichiers temporaires physiques suffixés avec un n° récupéré dans une dataarea
Ex : Nom du fichier physique : M708(n°de l'option menu)+1234 (n°dataarea)
Ce fichier est crée avec les DDS d'un fichier qui s'appelle M708000A
Ce fichier physique a 1 fichier logique : M7080AL1
Nous bloquons sur la création de ce logique sur le fichier physique paramètré
Avez-vous une solution !!!
Merci
FSPIECART
Bonjour.

S'il faut passer par les DDS, un petit programme Cobol ou RPG qui récupère en paramètres les noms du fichier physique, du membre et de la bibliothèque pour modifier la ligne dans le membre source DDS. Le CL enchaîne par la compilation des DDS pour créer le logique et le tour est joué. Cette solution est fonctionnelle dans tous mes logiciels où la création des fichiers physiques et logiques est dynamique dans des environnements multi-sociétés.
__________________

Hédhili Jaïdane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2010, 13h40   #4
Candidat au titre de Membre du Club
 
Inscription : octobre 2009
Messages : 24
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 24
Points : 11
Points : 11
Bonjour,

Citation:
Envoyé par Hédhili Jaïdane Voir le message
pour modifier la ligne dans le membre source DDS.
je comprends bien le reste de la réponse, par contre, ne vois pas comment modifier un source dds à partir d'un cl.
Avez vous un exemple?

Merci
L6N2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2010, 13h58   #5
Membre Expert
 
Inscription : novembre 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 1 298
Points : 1 355
Points : 1 355
Oui, d'accord avec K2R400, utilisez SQL dynamique pour faire des CREATE TABLE et CREATE INDEX dans un programme RPG ou COBOL avec SQL intégré (type de source SQLRPGLE ou SQLCBLLE). C'est bien plus moderne, bien plus facile à faire (c'est même du gâteau) et autrement plus souple que de faire çà avec les DDS.
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2010, 14h02   #6
Membre Expert
 
Patrick
Inscription : mai 2008
Messages : 816
Détails du profil
Informations personnelles :
Nom : Patrick
Âge : 41
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mai 2008
Messages : 816
Points : 1 035
Points : 1 035
Dans le CLP on peut appeler le shell unix qui peut lancer des ordres SQL.
ex :

QSH CMD('db2 "CREATE ALIAS MABIB.LADDS FOR MABIB.QDDSSRC (CLIENTL1)"')

Dans cet exemple il crée un alias nommé LADDS dans MABIB (ou fichier DDMF comme tu veux) qui pointe vers un membre.
Puis il suffit de lancer par le même biais un UPDATE SQL sur l'alias créé.

M'enfin il est tellement plus simple de créer un INDEX (c'est un fichier logique), celà évite les DDS et c'est beaucoup plus performant.
Maintenant qui veut reste à l'ancien temps.
K2R400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2010, 14h19   #7
Membre Expert
 
Patrick
Inscription : mai 2008
Messages : 816
Détails du profil
Informations personnelles :
Nom : Patrick
Âge : 41
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mai 2008
Messages : 816
Points : 1 035
Points : 1 035
Autre façon en CLP, toujours par QSH

Code :
1
2
3
sed -e 's/PFILE(FIC1)/PFILE(FIC2)/'
  /qsys.lib/mabib.lib/qddssrc.file/clientL1.mbr
> /qsys.lib/mabib.lib/qddssrc.file/clientL2.mbr
Dans cet exemple, la DDS CLIENTL1 est copiée en CLIENTL2 et le mot clé PFILE(FIC1) est remplacé par PFILE(FIC2)
K2R400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2010, 14h20   #8
Membre Expert
 
Avatar de Hédhili Jaïdane
 
Homme Hédhili Jaïdane
Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol
Inscription : juin 2007
Messages : 1 601
Détails du profil
Informations personnelles :
Nom : Homme Hédhili Jaïdane
Localisation : Tunisie

Informations professionnelles :
Activité : Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol

Informations forums :
Inscription : juin 2007
Messages : 1 601
Points : 2 066
Points : 2 066
Envoyer un message via Skype™ à Hédhili Jaïdane
Citation:
Envoyé par L6N2000 Voir le message
Bonjour,



je comprends bien le reste de la réponse, par contre, ne vois pas comment modifier un source dds à partir d'un cl.
Avez vous un exemple?

Merci
Ce n'est pas le CL qui modifie le source DDS, mais plutôt le programme Cobol.
Le CL, ayant déterminé le nom du fichier physique sur lequel va se baser le logique à créer, appelle le programme Cobol pour modifier les DDS. Le CL enchaîne ensuite par le CRTLF.

Un exemple simple d'un programme Cobol qui fait ça, j'en ai de plus compliqué.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
0005   IDENTIFICATION DIVISION.
0002  ******************************************************************
0003  * modif. fich.phy. dans les dds d'un fich.logique                *
0004  ******************************************************************
0006   PROGRAM-ID. MODFLD.
0007   AUTHOR. H. JAIDANE.
0008   ENVIRONMENT DIVISION.
0009   CONFIGURATION SECTION.
0010   SOURCE-COMPUTER. IBM-AS400.
0011   OBJECT-COMPUTER. IBM-AS400.
0012   SPECIAL-NAMES.
0013       REQUESTOR IS MONTERMINAL.
0014   INPUT-OUTPUT SECTION.
0015   FILE-CONTROL.
0016       SELECT SRCMBR ASSIGN DISK-SRCMBR.
0023   DATA DIVISION.
0024   FILE SECTION.
0025   FD  SRCMBR LABEL RECORD STANDARD.
0026   01  DDS.
0026  *           PIC X(92).
           03 FILLER0  PIC X(12).
           03 FILLER1  PIC X(44).
           03 FONCT    PIC X(36).
0029   WORKING-STORAGE SECTION.
       LINKAGE SECTION.
       77  FICHIER     PIC X(10).
       77  BIBLIO      PIC X(10).
0070   PROCEDURE DIVISION USING BIBLIO FICHIER.
0071   DEBUT-UT.
0072       OPEN I-O SRCMBR.
0076   TRAITEMENT.
0077       READ SRCMBR AT END GO TO FIN.
           MOVE  SPACES TO FONCT.
0078       STRING "PFILE" "(" BIBLIO "/" FICHIER ")"
0078              DELIMITED BY SPACE INTO FONCT.
0078       REWRITE DDS.
0084   FIN.
0085       CLOSE SRCMBR.
0086       STOP RUN.
et le programme CL chargé d'appeler le programme Cobol en faisant l'override nécessaire.

Code :
1
2
3
4
5
6
7
8
9
10
 DEBUT:      PGM (&B &PF &SM)
 VARIABLES:  DCL &B  *CHAR 10     /* NOM BIBIOTHEQUE               */
             DCL &PF *CHAR 10     /* NOM FICHIER PHYSIQUE          */
             DCL &SM *CHAR 10     /* NOM MEMBRE SOURCE LF          */
 SUBST:      OVRDBF FILE(SRCMBR) TOFILE(QDDSSRC) MBR(&SM)
 APPEL:      CALL MODLFD PARM(&B &PF)
 FIN:
             DLTOVR *ALL
             ENDPGM
Dans ce cas précis, le programme CL est lui même appelé par le main programme CL applicatif qui lui transmet les paramètres nécessaires :
__________________

Hédhili Jaïdane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2010, 14h39   #9
Candidat au titre de Membre du Club
 
Inscription : octobre 2009
Messages : 24
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 24
Points : 11
Points : 11
Merci pour cette réponse très claire mais, malheureusement, je n'utilise pas le COBOL mais le RPG...
L6N2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2010, 14h42   #10
Candidat au titre de Membre du Club
 
Inscription : octobre 2009
Messages : 24
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 24
Points : 11
Points : 11
Citation:
Envoyé par Mercure Voir le message
Oui, d'accord avec K2R400, utilisez SQL dynamique pour faire des CREATE TABLE et CREATE INDEX dans un programme RPG ou COBOL avec SQL intégré (type de source SQLRPGLE ou SQLCBLLE). C'est bien plus moderne, bien plus facile à faire (c'est même du gâteau) et autrement plus souple que de faire çà avec les DDS.
Nous travaillons en RPG, auriez vous un exemple de create table et create index ?

Merci d'avance
L6N2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2010, 14h57   #11
Membre Expert
 
Avatar de Hédhili Jaïdane
 
Homme Hédhili Jaïdane
Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol
Inscription : juin 2007
Messages : 1 601
Détails du profil
Informations personnelles :
Nom : Homme Hédhili Jaïdane
Localisation : Tunisie

Informations professionnelles :
Activité : Consultant/Assistant/Formateur/Développeur Indépendant AS/400 Cobol

Informations forums :
Inscription : juin 2007
Messages : 1 601
Points : 2 066
Points : 2 066
Envoyer un message via Skype™ à Hédhili Jaïdane
Citation:
Envoyé par L6N2000 Voir le message
Merci pour cette réponse très claire mais, malheureusement, je n'utilise pas le COBOL mais le RPG...
Je ne vois pas pourquoi on ne pourrait pas le faire en RPG.
- Récupérer le nom du physiaque et la biblio
- lire le premier enregistrement
- construire le string PFILE(Biblio/fichierPhy)
- faire l'update.
__________________

Hédhili Jaïdane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2010, 15h08   #12
Membre Expert
 
Patrick
Inscription : mai 2008
Messages : 816
Détails du profil
Informations personnelles :
Nom : Patrick
Âge : 41
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mai 2008
Messages : 816
Points : 1 035
Points : 1 035
Voici un programme RPG qui créé l'index.


Code :
1
2
3
4
5
6
7
8
D Qry             s           1024    Varying                             
 //---------------------------------------------------------------        
 /free                                                                    
    Exec SQL Set Option Commit = *none;                                   
    Qry = 'Create Index MABIB/ARTL2 ON MABIB/ARTICLE (CODART ASC) rcdfmt monformat';   
   
    Exec SQL Execute immediate :Qry;                                      
     *inlr = *on;

Dernière modification par K2R400 ; 08/01/2010 à 17h40.
K2R400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2010, 10h46   #13
Candidat au titre de Membre du Club
 
Inscription : octobre 2009
Messages : 24
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 24
Points : 11
Points : 11
Bonjour,

Merci K2R400 pour ce sources. Pas très familière du free, j'aimerai connaitre la syntaxe pour écrire plusieurs zones clé ?
et comment écrire une instruction sur plusieurs lignes ?

d'avance merci,
L6N2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2010, 12h55   #14
Membre Expert
 
Patrick
Inscription : mai 2008
Messages : 816
Détails du profil
Informations personnelles :
Nom : Patrick
Âge : 41
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mai 2008
Messages : 816
Points : 1 035
Points : 1 035
Code :
1
2
3
4
5
6
7
8
9
10
11
D Qry             s           1024    Varying                             
 //---------------------------------------------------------------        
 /free                                                                    
    Exec SQL Set Option Commit = *none;                                   
    Qry = 'Create Index MABIB/ARTL2 ON MABIB/ARTICLE ';
    Qry = Qry + '(CLE1, CLE2, CLE3)';
 // autre façon d'ajouter dans un varchar
    Qry += 'rcdfmt monformat';   
   
    Exec SQL Execute immediate :Qry;                                      
     *inlr = *on;
ou encore :

Code :
1
2
3
4
5
6
7
8
9
10
D Qry             s           1024    Varying                             
 //---------------------------------------------------------------        
 /free                                                                    
    Exec SQL Set Option Commit = *none;                                   
    Qry = 'Create Index MABIB/ARTL2 ON MABIB/ARTICLE ' +
    '(CLE1, CLE2, CLE3)' +
    'rcdfmt monformat';   
   
    Exec SQL Execute immediate :Qry;                                      
     *inlr = *on;
K2R400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2010, 14h04   #15
Candidat au titre de Membre du Club
 
Inscription : octobre 2009
Messages : 24
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 24
Points : 11
Points : 11
Lorsque j'exécute ce programme, j'ai le message :

Elément syntaxique RCDFMT n'est pas correct. Eléments possibles :
PARTITIONED.

Pourquoi ? que puis-je faire pour qu'il fonctionne ?
L6N2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2010, 14h45   #16
Membre Expert
 
Patrick
Inscription : mai 2008
Messages : 816
Détails du profil
Informations personnelles :
Nom : Patrick
Âge : 41
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mai 2008
Messages : 816
Points : 1 035
Points : 1 035
En quelle version est-tu ?

Car RCDFMT pour désigner le nom du format du fichier est apparu en V5R4. Si tu as une version antérieure à la V5R4, dans ce cas tu ne peux pas donner un nom de format différent (enlever RCDFMT). Le format aura le même nom que l'index ce qui t'oblige à faire un rename de format dans ton rpg
K2R400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2010, 16h15   #17
Candidat au titre de Membre du Club
 
Inscription : octobre 2009
Messages : 24
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 24
Points : 11
Points : 11
Maintenant, nous aimerions passer le nom des fichiers physiques et logiques en paramètre.
Voilà notre source:


Code :
1
2
3
4
5
6
7
8
9
10
11
D Qry             s           1024    Varying                     
 //---------------------------------------------------------------
C     *ENTRY        PLIST                                         
C                   PARM                    NOMFIL1           8   
C                   PARM                    NOMFIL2           8   
 /free                                                            
  Exec SQL Set Option Commit = *none;                             
  Qry = 'Create Index NOMFIL2 ON NOMFIL1'+                        
  '(ORDNO,PAPIER)';                                               
  Exec SQL Execute immediate :Qry;                                
     *inlr = *on;
il cherche sur le disque le fichier NOMFIL1, comment lui dire que c'est notre paramètre ?

Merci d'avance pour votre aide.

Dernière modification par Hédhili Jaïdane ; 11/01/2010 à 16h42. Motif: Balise Code
L6N2000 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2010, 16h45   #18
Membre Expert
 
Patrick
Inscription : mai 2008
Messages : 816
Détails du profil
Informations personnelles :
Nom : Patrick
Âge : 41
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mai 2008
Messages : 816
Points : 1 035
Points : 1 035
Code :
1
2
3
4
5
6
7
8
9
10
11
12
D Qry             s           1024    Varying                     
 //---------------------------------------------------------------
C     *ENTRY        PLIST                                        
C                   PARM                    NOMFIL1           8  
C                   PARM                    NOMFIL2           8  
 /free 
    Exec SQL Set Option Commit = *none;                                   
    Qry = 'Create Index '  + %trim(NOMFIL2) + ' ON ' + %trim(NOMFIL1) +
     '(ORDNO, PAPIER)'; 
    Exec SQL Execute immediate :Qry;                                      
     *inlr = *on;
Tu manipules une chaine de caractères comme une autre, tu fais ce que tu veux. Tu n'es pas obligé de faire du /free non plus. Utilise EVAL avec des cartes C sinon
K2R400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2010, 15h20   #19
Invité de passage
 
Inscription : mars 2006
Messages : 4
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 4
Points : 4
Points : 4
Citation:
Envoyé par fspiecart Voir le message
Bonjour,

Nous créons des fichiers temporaires physiques suffixés avec un n° récupéré dans une dataarea
Ex : Nom du fichier physique : M708(n°de l'option menu)+1234 (n°dataarea)
Ce fichier est crée avec les DDS d'un fichier qui s'appelle M708000A
Ce fichier physique a 1 fichier logique : M7080AL1
Nous bloquons sur la création de ce logique sur le fichier physique paramètré
Avez-vous une solution !!!
Merci
FSPIECART
Une solution éprouvée et largement utilisée est :
  • Créer le physique et son logique dans QTEMP,
  • Renommer le physique et son logique toujours dans QTEMP,
  • Déplacer les 2 objets dans la bib destinataire.

Voilà
belha est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 17h03.


 
 
 
 
Partenaires

Hébergement Web