IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AS/400 Discussion :

Export d'une table DB2 en un fichier texte


Sujet :

AS/400

  1. #1
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

    Informations professionnelles :
    Activité : Freelancer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Points : 2 914
    Points
    2 914
    Par défaut Export d'une table DB2 en un fichier texte
    Bonjour,
    Est ce qu'il y a moyen pour exporter une table DB2 (qui contient deux zones) en un fichier texte ?
    Merci d'avance.

  2. #2
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Bonjour.

    Si ton fichier BD ne contient pas de zones numériques non étendues, crée ton fichier texte par CRTPF et SANS DDS en lui indiquant la longueur totale de l'enregistrement, puis fais un CPYF avec l'option *NOCHK.

    Edit : On peut connaître ton besoin (pourquoi faire) ?

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Citation Envoyé par JauB Voir le message
    Bonjour,
    Est ce qu'il y a moyen pour exporter une table DB2 (qui contient deux zones) en un fichier texte ?
    Merci d'avance.
    Utiles la commande CPYTOIMPF exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CPYTOIMPF FROMFILE(EMPLOYEE) TOSTMF('/home/employee.txt') 
    STMFCCSID(*PCASCII) RCDDLM(*CRLF)

  4. #4
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

    Informations professionnelles :
    Activité : Freelancer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Points : 2 914
    Points
    2 914
    Par défaut
    Ce que je cherche à faire : Exécuter un programme COBOL qui fait des traitements et alimente une table temporaire DB2 (qui contient deux champs). Après je veux extraire ce fichier temporaire dans un fichier texte que je dois transférer par la suite via FTP sur un serveur Windows.
    Alors ?

    Peux-tu m'expliquer s'il te plaît le fonctionnement de la commande citée ? (Tu peux m'expliquer l'exemple).

    Citation Envoyé par K2R400 Voir le message
    Utiles la commande CPYTOIMPF exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CPYTOIMPF FROMFILE(EMPLOYEE) TOSTMF('/home/employee.txt') 
    STMFCCSID(*PCASCII) RCDDLM(*CRLF)

  5. #5
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Citation Envoyé par JauB Voir le message
    Ce que je cherche à faire : Exécuter un programme COBOL qui fait des traitements et alimente une table temporaire DB2 (qui contient deux champs). Après je veux extraire ce fichier temporaire dans un fichier texte que je dois transférer par la suite via FTP sur un serveur Windows.
    Tu peux directement dans le programme Cobol créer ton fichier temporaire comme un fichier texte puis le ftper directement.

  6. #6
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

    Informations professionnelles :
    Activité : Freelancer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Points : 2 914
    Points
    2 914
    Par défaut
    Veux-tu bien me montrer comment procéder dans ce cas ? (Un exemple si t'en as )
    Citation Envoyé par Hédhili Jaïdane Voir le message
    Tu peux directement dans le programme Cobol créer ton fichier temporaire comme un fichier texte puis le ftper directement.

  7. #7
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

    Informations professionnelles :
    Activité : Freelancer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Points : 2 914
    Points
    2 914
    Par défaut
    A quoi correspond le '/home/employee.txt' ?
    le home c'est un fichier physique ? bibliothèque ? ...
    Citation Envoyé par K2R400 Voir le message
    Utiles la commande CPYTOIMPF exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CPYTOIMPF FROMFILE(EMPLOYEE) TOSTMF('/home/employee.txt') 
    STMFCCSID(*PCASCII) RCDDLM(*CRLF)

  8. #8
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    - Si c'est uniquement pour ftper ton fichier, tu peux le faire sans rien faire d'autre à condition qu'il ne contienne pas des champs numériques non étendues (genre condensé, virgule flottante (et encore), binaire) .

    - Maintenant en ce qui concerne les fichiers texte (plat) en Cobol, il suffit de les déclarer sans clé (donc organisation séquentielle) et de mettre que l'alphanum ou de l'étendu. Ils peuvent être database et déclarées avec description externe, ça gène pas.

    - Pour le FTP, tu peux le faire sur les fichiers DB sans aucun problème, toujours à condition que les champs numériques sont en décimal étendu.

    Quels exemples tu cherches, FTP ou Cobol ?

  9. #9
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

    Informations professionnelles :
    Activité : Freelancer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Points : 2 914
    Points
    2 914
    Par défaut
    Merci pour ta réponse,
    Si tu as un exemple d'utilistion d'un fichier plat tu me le donnes.
    Sinon ma question principale était : un bout de code pour faire un transfert FTP d'un fichier texte à partir d'un PGM COBOL.
    Citation Envoyé par Hédhili Jaïdane Voir le message
    - Si c'est uniquement pour ftper ton fichier, tu peux le faire sans rien faire d'autre à condition qu'il ne contienne pas des champs numériques non étendues (genre condensé, virgule flottante (et encore), binaire) .

    - Maintenant en ce qui concerne les fichiers texte (plat) en Cobol, il suffit de les déclarer sans clé (donc organisation séquentielle) et de mettre que l'alphanum ou de l'étendu. Ils peuvent être database et déclarées avec description externe, ça gène pas.

    - Pour le FTP, tu peux le faire sur les fichiers DB sans aucun problème, toujours à condition que les champs numériques sont en décimal étendu.

    Quels exemples tu cherches, FTP ou Cobol ?

  10. #10
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

    Informations professionnelles :
    Activité : Freelancer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Points : 2 914
    Points
    2 914
    Par défaut
    Re,
    Une qutre question dans le même contexte : Est ce qu'il y a moyen pour déposer le fichier résultant de la commande CPYTOIMPF directement dans un répertoire Windows ?
    ça m'évitera de travailler avec FTP

  11. #11
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Citation Envoyé par JauB Voir le message
    .... un bout de code pour faire un transfert FTP d'un fichier texte à partir d'un PGM COBOL.
    Ce n'est pas ce que je disais. Le FTP se fera par un programme CL à partir de l'AS/400 ou depuis le PC sous console ou par un .bat.

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Citation Envoyé par JauB Voir le message
    Re,
    Une qutre question dans le même contexte : Est ce qu'il y a moyen pour déposer le fichier résultant de la commande CPYTOIMPF directement dans un répertoire Windows ?
    ça m'évitera de travailler avec FTP
    Oui tu peux éventuellement le faire.
    Dans l'IFs (l'arborescence de l'ibm i), il y a un répertoire nommé QNTC.
    - Si ton user/password est le même entre l'Ibm i et le Serveur (ou PC) windaube.
    - Si ton IBM est dans le même domaine que le serveur Win
    - Si ton serveur partage des répertoires (dans ton cas en écriture)

    Dans /QNTC tu créés un répertoire du nom de ton serveur Windows ex :
    CRTDIR '/QNTC/MYSEERVER'

    Avec un WRKLNK '/QNTC/MYSERVER/*' regarge si tu vois bien les répertoires partages. Ainsi un CPYTOIMPF vers ce répertoire enverra directement sur Windows.

    Attention, après chaque IPL, les répertoires dans QNTC sont supprimés. Il faut donc les recréér à chaque fois. A mettre dans le QSTRUP .

  13. #13
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

    Informations professionnelles :
    Activité : Freelancer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Points : 2 914
    Points
    2 914
    Par défaut
    Comment accéder à l'arborescence de l'ibm ?
    Est ce que la condition ' user/password est le même entre l'Ibm i et le Serveur (ou PC) windaube. ' est requise ? cela me posera problème vu qu'il y aura beaucoup d'utilisateurs qui seront connectés et donc je devrais créer à chque utilisateur AS400 un compte identique sur le serveur Windows !!
    Hein ?
    Citation Envoyé par K2R400 Voir le message
    Oui tu peux éventuellement le faire.
    Dans l'IFs (l'arborescence de l'ibm i), il y a un répertoire nommé QNTC.
    - Si ton user/password est le même entre l'Ibm i et le Serveur (ou PC) windaube.
    - Si ton IBM est dans le même domaine que le serveur Win
    - Si ton serveur partage des répertoires (dans ton cas en écriture)

    Dans /QNTC tu créés un répertoire du nom de ton serveur Windows ex :
    CRTDIR '/QNTC/MYSEERVER'

    Avec un WRKLNK '/QNTC/MYSERVER/*' regarge si tu vois bien les répertoires partages. Ainsi un CPYTOIMPF vers ce répertoire enverra directement sur Windows.

    Attention, après chaque IPL, les répertoires dans QNTC sont supprimés. Il faut donc les recréér à chaque fois. A mettre dans le QSTRUP .

  14. #14
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Citation Envoyé par JauB Voir le message
    Comment accéder à l'arborescence de l'ibm ?
    Regarde mon post précédent, utilises la commande :
    WRKLNK '/*'
    Tu peux aussi utiliser iSeries Navigator.
    Autre façon, les répertoires de l'AS sont partagés. Sous Windows, Démarrer, Executer, puis //monserveur


    Est ce que la condition ' user/password est le même entre l'Ibm i et le Serveur (ou PC) windaube. ' est requise ? cela me posera problème vu qu'il y aura beaucoup d'utilisateurs qui seront connectés et donc je devrais créer à chque utilisateur AS400 un compte identique sur le serveur Windows !!
    Hein ?
    On peut le faire avec du SSO (kerberos + EIM), mais la solution la plus simple est d'intégrer dans ton CLP qui va faire le CPYTOIMPF un zap d'utilisateur avec l'Api QSYGETPH. L'objectif : on se connecte au serveur Windows toujours avec le même profil dans le CLP. C'est assez simple à faire, je te montrerai comment faire en temps voulu.
    Mais avant tout, essaye ce que je t'ai demandé, à savoir te ballader dans QNTC avec la commande WRKLNK après avoir fait un MKDIR du nom de ton serveur Windaube.

  15. #15
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Avec le programme ci-dessous que tu modifies.

    &PRF : Contient le profil possédant le même password entre Windows & l'IBM i (USERWIN dans mon exemple doit exister dans l'IBM i et dans le serveur Windows avec le même mot de passe. Les deux serveurs soivent être dans le même domaine).

    &WINSERVER : Contient le nom du serveur Windows (un ping du nom de ce serveur doit répondre depuis l'IBM i. ex : PING 'WINSERV' depuis une ligne de commande de l'IBM i doit répondre dans mon exemple.

    &PARTAGE : Contient le nom du partage Windows accessible en ecriture (Il s'appelle SHARE1 dans mon exemple)

    &FICHIER, &BIBLIO : Bibliothèque & Nom du fichier à copier sur le serveur Windows.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
                 DCL        VAR(&PRF) TYPE(*CHAR) LEN(10) VALUE('USERWIN')
                 DCL        VAR(&WINSERVER) TYPE(*CHAR) LEN(10) +
                              VALUE('WINSERV')
                 DCL        VAR(&PARTAGE) TYPE(*CHAR) LEN(10) +
                              VALUE('SHARE1')
                 DCL        VAR(&FICHIER) TYPE(*CHAR) LEN(10) +
                              VALUE('EMPLOYEE')
                 DCL        VAR(&BIBLIO ) TYPE(*CHAR) LEN(10) +
                              VALUE('*LIBL')
    
                 DCL        VAR(&WLIB) TYPE(*CHAR) LEN(512)
                 DCL        VAR(&PWD) TYPE(*CHAR) LEN(10) +
                              VALUE('*NOPWD    ')
                 DCL        VAR(&CURCOD) TYPE(*CHAR) LEN(12)
                 DCL        VAR(&PRFCOD) TYPE(*CHAR) LEN(12)
                 /* VARIABLES UTILISEES PAR LA GESTION DE MESSAGES */
                 DCL        &ERRORSW *LGL                     /* SWITCH  */
                 DCL        &MSGID *CHAR LEN(7)               /* ID MSG  */
                 DCL        &MSGDTA *CHAR LEN(100)            /* DATA    */
                 DCL        &MSGF *CHAR LEN(10)               /* FICHIER */
                 DCL        &MSGFLIB *CHAR LEN(10)            /* BIBLI   */
     /* GESTION DES ERREURS                            */
                 MONMSG     MSGID(CPF0000) EXEC(GOTO ERREUR)
     /* CREATION DU REPERTOIRE DANS QNTC               */
                 CHGVAR     VAR(&WLIB) VALUE('/QNTC/' *TCAT &WINSERVER)
                 MKDIR      DIR(&WLIB)
                 MONMSG     MSGID(CPF0000)
     /* handle DU  PROFIL ACTUEL */
                 CALL QSYGETPH  PARM('*CURRENT' ' ' &CURCOD)
     /* handle du futur Profil        */
                 CALL QSYGETPH  PARM(&PRF &PWD &PRFCOD)
     /* Changement de profil          */
                 CALL QWTSETP  PARM(&PRFCOD)
     /* Copie du fichier dans l'IFS    */
                 CHGVAR     VAR(&WLIB) VALUE(&WLIB *TCAT '/' *TCAT +
                              &PARTAGE *TCAT '/' *TCAT &FICHIER *TCAT +
                              '.csv')
                 CPYTOIMPF  FROMFILE(&BIBLIO/&FICHIER) TOSTMF(&WLIB) +
                              STMFCCSID(*PCASCII) RCDDLM(*CRLF) FLDDLM(';')
     /* retour au profil d'origine */
                 CALL QWTSETP  PARM(&CURCOD)
    
    /* ANNULATION DES VALIDATIONS DE PROFIL */
                 CALL QSYRLSPH  PARM(&PRFCOD)
                 CALL QSYRLSPH  PARM(&CURCOD)
    
                 RETURN
    
                  /*----------------------------------------*/
    ERREUR:       /*        GESTION DES ERREURS             */
                  /*----------------------------------------*/
    
                 IF         &ERRORSW SNDPGMMSG MSGID(CPF9999) +
                              MSGF(QCPFMSG) MSGTYPE(*ESCAPE) /* 2EME FOIS*/
                                                             /* ARRET PGM*/
                 CHGVAR     &ERRORSW '1' /* MISE EN PLACE DU SWTICH     */
    
     /* RENVOI DES MESSAGES DE TYPE *DIAG SI FIN ANORMALE */
     DIAGMSG:    RCVMSG     MSGTYPE(*DIAG) MSGDTA(&MSGDTA) MSGID(&MSGID) +
                              MSGF(&MSGF) MSGFLIB(&MSGFLIB)
                 IF         (&MSGID *EQ '       ') GOTO EXCPMSG
                 SNDPGMMSG  MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +
                              MSGDTA(&MSGDTA) MSGTYPE(*DIAG)
                 GOTO       DIAGMSG /* BOUCLE SUR MESSAGES *DIAG      */
    
     /* RENVOI DU MESSAGE D'ERREUR                        */
     EXCPMSG:    RCVMSG     MSGTYPE(*EXCP) MSGDTA(&MSGDTA) MSGID(&MSGID) +
                              MSGF(&MSGF) MSGFLIB(&MSGFLIB)
                 SNDPGMMSG  MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +
                              MSGDTA(&MSGDTA) MSGTYPE(*ESCAPE)
                              ENDPGM
    - Note bien que ce programme ne contient aucun mot de passe, pas necessaire.
    - Tu compiles ce programme par exemple sous le nom CPYIFS.

    - Tu fais un CHGOBJOWN pour changer de propriétaire et tu lui attribues un propriétaire possédant le droit *ALLOBJ.
    ex : CHGOBJOWN OBJ(*LIBL/CPYIFS) OBJTYPE(*PGM) NEWOWN(QSECOFR)

    - Tu fais un CHGPGM pour le mettre en *OWNER.
    ex :CHGPGM PGM(*USRLIBL/CPYIFS) USRPRF(*OWNER)

    Ainsi, n'importe quel utilisateur pourra copier le fichier dans le serveur Windows avec un CALL CPYIFS. Tu peux même imaginer maintenant recevoir le nom du fichier en paramètre.

  16. #16
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

    Informations professionnelles :
    Activité : Freelancer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Points : 2 914
    Points
    2 914
    Par défaut
    Est ce que avec ce code je n'aurai pas à créer un compte identique sur windows que sur AS400 ?
    Cette condition de même compte/mot de passe me gène et inapliquable dans notre contexte vu le nombre énorme qui auront à lancer les programmes d'export des fichiers !
    Citation Envoyé par K2R400 Voir le message
    Avec le programme ci-dessous que tu modifies.

    &PRF : Contient le profil possédant le même password entre Windows & l'IBM i (USERWIN dans mon exemple doit exister dans l'IBM i et dans le serveur Windows avec le même mot de passe. Les deux serveurs soivent être dans le même domaine).

    &WINSERVER : Contient le nom du serveur Windows (un ping du nom de ce serveur doit répondre depuis l'IBM i. ex : PING 'WINSERV' depuis une ligne de commande de l'IBM i doit répondre dans mon exemple.

    &PARTAGE : Contient le nom du partage Windows accessible en ecriture (Il s'appelle SHARE1 dans mon exemple)

    &FICHIER, &BIBLIO : Bibliothèque & Nom du fichier à copier sur le serveur Windows.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
                 DCL        VAR(&PRF) TYPE(*CHAR) LEN(10) VALUE('USERWIN')
                 DCL        VAR(&WINSERVER) TYPE(*CHAR) LEN(10) +
                              VALUE('WINSERV')
                 DCL        VAR(&PARTAGE) TYPE(*CHAR) LEN(10) +
                              VALUE('SHARE1')
                 DCL        VAR(&FICHIER) TYPE(*CHAR) LEN(10) +
                              VALUE('EMPLOYEE')
                 DCL        VAR(&BIBLIO ) TYPE(*CHAR) LEN(10) +
                              VALUE('*LIBL')
     
                 DCL        VAR(&WLIB) TYPE(*CHAR) LEN(512)
                 DCL        VAR(&PWD) TYPE(*CHAR) LEN(10) +
                              VALUE('*NOPWD    ')
                 DCL        VAR(&CURCOD) TYPE(*CHAR) LEN(12)
                 DCL        VAR(&PRFCOD) TYPE(*CHAR) LEN(12)
                 /* VARIABLES UTILISEES PAR LA GESTION DE MESSAGES */
                 DCL        &ERRORSW *LGL                     /* SWITCH  */
                 DCL        &MSGID *CHAR LEN(7)               /* ID MSG  */
                 DCL        &MSGDTA *CHAR LEN(100)            /* DATA    */
                 DCL        &MSGF *CHAR LEN(10)               /* FICHIER */
                 DCL        &MSGFLIB *CHAR LEN(10)            /* BIBLI   */
     /* GESTION DES ERREURS                            */
                 MONMSG     MSGID(CPF0000) EXEC(GOTO ERREUR)
     /* CREATION DU REPERTOIRE DANS QNTC               */
                 CHGVAR     VAR(&WLIB) VALUE('/QNTC/' *TCAT &WINSERVER)
                 MKDIR      DIR(&WLIB)
                 MONMSG     MSGID(CPF0000)
     /* handle DU  PROFIL ACTUEL */
                 CALL QSYGETPH  PARM('*CURRENT' ' ' &CURCOD)
     /* handle du futur Profil        */
                 CALL QSYGETPH  PARM(&PRF &PWD &PRFCOD)
     /* Changement de profil          */
                 CALL QWTSETP  PARM(&PRFCOD)
     /* Copie du fichier dans l'IFS    */
                 CHGVAR     VAR(&WLIB) VALUE(&WLIB *TCAT '/' *TCAT +
                              &PARTAGE *TCAT '/' *TCAT &FICHIER *TCAT +
                              '.csv')
                 CPYTOIMPF  FROMFILE(&BIBLIO/&FICHIER) TOSTMF(&WLIB) +
                              STMFCCSID(*PCASCII) RCDDLM(*CRLF) FLDDLM(';')
     /* retour au profil d'origine */
                 CALL QWTSETP  PARM(&CURCOD)
     
    /* ANNULATION DES VALIDATIONS DE PROFIL */
                 CALL QSYRLSPH  PARM(&PRFCOD)
                 CALL QSYRLSPH  PARM(&CURCOD)
     
                 RETURN
     
                  /*----------------------------------------*/
    ERREUR:       /*        GESTION DES ERREURS             */
                  /*----------------------------------------*/
     
                 IF         &ERRORSW SNDPGMMSG MSGID(CPF9999) +
                              MSGF(QCPFMSG) MSGTYPE(*ESCAPE) /* 2EME FOIS*/
                                                             /* ARRET PGM*/
                 CHGVAR     &ERRORSW '1' /* MISE EN PLACE DU SWTICH     */
     
     /* RENVOI DES MESSAGES DE TYPE *DIAG SI FIN ANORMALE */
     DIAGMSG:    RCVMSG     MSGTYPE(*DIAG) MSGDTA(&MSGDTA) MSGID(&MSGID) +
                              MSGF(&MSGF) MSGFLIB(&MSGFLIB)
                 IF         (&MSGID *EQ '       ') GOTO EXCPMSG
                 SNDPGMMSG  MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +
                              MSGDTA(&MSGDTA) MSGTYPE(*DIAG)
                 GOTO       DIAGMSG /* BOUCLE SUR MESSAGES *DIAG      */
     
     /* RENVOI DU MESSAGE D'ERREUR                        */
     EXCPMSG:    RCVMSG     MSGTYPE(*EXCP) MSGDTA(&MSGDTA) MSGID(&MSGID) +
                              MSGF(&MSGF) MSGFLIB(&MSGFLIB)
                 SNDPGMMSG  MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) +
                              MSGDTA(&MSGDTA) MSGTYPE(*ESCAPE)
                              ENDPGM
    - Note bien que ce programme ne contient aucun mot de passe, pas necessaire.
    - Tu compiles ce programme par exemple sous le nom CPYIFS.

    - Tu fais un CHGOBJOWN pour changer de propriétaire et tu lui attribues un propriétaire possédant le droit *ALLOBJ.
    ex : CHGOBJOWN OBJ(*LIBL/CPYIFS) OBJTYPE(*PGM) NEWOWN(QSECOFR)

    - Tu fais un CHGPGM pour le mettre en *OWNER.
    ex :CHGPGM PGM(*USRLIBL/CPYIFS) USRPRF(*OWNER)

    Ainsi, n'importe quel utilisateur pourra copier le fichier dans le serveur Windows avec un CALL CPYIFS. Tu peux même imaginer maintenant recevoir le nom du fichier en paramètre.

  17. #17
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

    Informations professionnelles :
    Activité : Freelancer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Points : 2 914
    Points
    2 914
    Par défaut
    Pourquoi la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CPYTOIMPF FROMFILE(EMPLOYEE) TOSTMF('/home/employee.txt') 
    STMFCCSID(*PCASCII) RCDDLM(*CRLF)
    ne marche pas si je mets MABIB à la place de home alors qu'elle marche si je mets www à la place de home ??
    Pourtant lorsque je fais \\MonServeur j'ai les deux dossiers partagés, à savoir : www et MABIB !!
    MABIB est une bibliothèque sous l'AS400 bien sûr.

  18. #18
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par JauB Voir le message
    Pourquoi la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CPYTOIMPF FROMFILE(EMPLOYEE) TOSTMF('/home/employee.txt') 
    STMFCCSID(*PCASCII) RCDDLM(*CRLF)
    ne marche pas si je mets MABIB à la place de home alors qu'elle marche si je mets www à la place de home ??
    Pourtant lorsque je fais \\MonServeur j'ai les deux dossiers partagés, à savoir : www et MABIB !!
    MABIB est une bibliothèque sous l'AS400 bien sûr.
    Tout simplement car cela n'est pas compatible.

    Je m'explique. La commande CPYTOIMPF permet de transférer des données d'une table/vue DB2 vers un stream file situé dans la partie UDFS de l'IFS.

    Or les tables/vues sont dans un système de fichier codé en EBCDIC contrairement aux stream files qui sont dans un système de fichier ASCII.

    La commande CPYTOIMPF ne peut donc pas copier des données d'une bibliothèque vers une autre bibliothèque. Dans ce cas on utiliserait la commande CPYF, mais ce n'est pas ce que tu souhaites.
    La cible doit impérativement être dans l'UDFS, et comme les bibliothèques ne sont pas dans l'UDFS (elles sont dans le système de fichier /QSYS de l'IFS), cela ne peut donc pas marcher même si tu as un partage. Le partage n'a rien à voir avec la commande CPYTOIMPF, le partage permet juste à un poste client (Windows ou Linux) de voir les répertoires.
    Tu peux lancer la commande CPYTOIMPF sans avoir de partage, ce n'est pas lié.

  19. #19
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Citation Envoyé par JauB Voir le message
    Est ce que avec ce code je n'aurai pas à créer un compte identique sur windows que sur AS400 ?
    Cette condition de même compte/mot de passe me gène et inapliquable dans notre contexte vu le nombre énorme qui auront à lancer les programmes d'export des fichiers !
    Pas, besoin, il suffira de créer seulement un utilisateur comme je l'ai expliqué dans mon post précédent.


    Citation Envoyé par JauB Voir le message
    ne marche pas si je mets MABIB à la place de home alors qu'elle marche si je mets www à la place de home ??
    Pourtant lorsque je fais \\MonServeur j'ai les deux dossiers partagés, à savoir : www et MABIB !!
    MABIB est une bibliothèque sous l'AS400 bien sûr.
    La commande CPYTOIMPF permet de copier une table DB2 en ascii (ou autre) dans une arborescence de type Windows/Unix.
    Donc soit directement dans un serveur Windows, Unix, Linux, soit dans l'arborescence d'un IBM i.

  20. #20
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

    Informations professionnelles :
    Activité : Freelancer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Points : 2 914
    Points
    2 914
    Par défaut
    Je comprends maintenant
    Beh dans ce cas est ce que je pourrais créer un répertoire (dans UDFS de l'IFS comme tu le dis : que je peux nomer : SHAREDFILES : si oui comment le crée t-on ? ) et y copier mes fichiers via la commande CPYTOIMPF et ensuite créer un CL qui transfère les fichiers déposés au niveau de SHAREDFILES vers un PC (Windows) ?

    Citation Envoyé par Fabrice_44 Voir le message
    Tout simplement car cela n'est pas compatible.

    Je m'explique. La commande CPYTOIMPF permet de transférer des données d'une table/vue DB2 vers un stream file situé dans la partie UDFS de l'IFS.

    Or les tables/vues sont dans un système de fichier codé en EBCDIC contrairement aux stream files qui sont dans un système de fichier ASCII.

    La commande CPYTOIMPF ne peut donc pas copier des données d'une bibliothèque vers une autre bibliothèque. Dans ce cas on utiliserait la commande CPYF, mais ce n'est pas ce que tu souhaites.
    La cible doit impérativement être dans l'UDFS, et comme les bibliothèques ne sont pas dans l'UDFS (elles sont dans le système de fichier /QSYS de l'IFS), cela ne peut donc pas marcher même si tu as un partage. Le partage n'a rien à voir avec la commande CPYTOIMPF, le partage permet juste à un poste client (Windows ou Linux) de voir les répertoires.
    Tu peux lancer la commande CPYTOIMPF sans avoir de partage, ce n'est pas lié.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. charger une table DB2 dans un fichier
    Par a_karim_fr dans le forum DB2
    Réponses: 19
    Dernier message: 24/12/2014, 12h26
  2. Réponses: 2
    Dernier message: 12/07/2010, 17h31
  3. Exporter une table Access vers plusieurs fichiers textes
    Par Carlv1428 dans le forum VBA Access
    Réponses: 1
    Dernier message: 17/08/2008, 01h12
  4. création d'une table à partir d'un fichier texte
    Par romain.barraud dans le forum Installation
    Réponses: 5
    Dernier message: 05/04/2007, 19h40
  5. Export d'une base MySQL vers un fichier texte UTF-8
    Par zian974 dans le forum Outils
    Réponses: 2
    Dernier message: 28/08/2006, 21h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo