Bonjour,
Est ce qu'il y a moyen pour exporter une table DB2 (qui contient deux zones) en un fichier texte ?
Merci d'avance.
Bonjour,
Est ce qu'il y a moyen pour exporter une table DB2 (qui contient deux zones) en un fichier texte ?
Merci d'avance.
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) ?
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)
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).
- 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 ?
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 .
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 ?
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
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.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 ?
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.
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 :
- Note bien que ce programme ne contient aucun mot de passe, pas necessaire.
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
- 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.
Pourquoi la commande :ne marche pas si je mets MABIB à la place de home alors qu'elle marche si je mets www à la place de home ??
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 CPYTOIMPF FROMFILE(EMPLOYEE) TOSTMF('/home/employee.txt') STMFCCSID(*PCASCII) RCDDLM(*CRLF)
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é.
Pas, besoin, il suffira de créer seulement un utilisateur comme je l'ai expliqué dans mon post précédent.
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.
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) ?
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager