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 :

Modification d un membre QFTPSRC


Sujet :

AS/400

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Exploitant
    Inscrit en
    Avril 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Exploitant

    Informations forums :
    Inscription : Avril 2012
    Messages : 16
    Points : 5
    Points
    5
    Par défaut Modification d un membre QFTPSRC
    Bonjour à tous,

    je viens vers vous car je n'arrive pas a trouver la bonne syntaxe, j ai beau tourner et retourner rien y fait.

    Mon souci est que j'aimerai automatiser mon script ftp, je m'explique :

    Chaque jour j ai un fichier que je dois envoyer sur un serveur via ftp le problème et que ce nom change chaque jour, donc j'ai fait mon cl (qui fonctionne tres bien mais avec un nom de fichier qui ne change pas) le petit problème et que je me suis appercu qu'avec le cl on ne peut pas écrire (quoique...) dans un fichier donc je me suis tourné vers le RPG....

    J'avoue que c'est un langage bien a part, meme en lisant les fofo,tuto (pour le peu qui en ai) et redbook (tss.. en anglais mais ca passe quand meme ou presque ) je nage pas mal.
    Donc j'ai de la chance j'ai un as400 a ma disposition donc je fais mumuse quand j ai un peu de temps, mais là je sèche.

    J'ai parcouru plusieur forum sur ce sujet et j ai a ma disposition 3 options :

    * QSHELL : (avec le CL)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     CHGVAR     VAR(&PUT) VALUE('PRINT "PUT TOTOMAN" >> +     
                  /QSYS.LIB/TOTO.LIB/QFTPSRC.FILE/SCFTP.MBR')                                        
     QSH        CMD(&PUT)
    Si je ne me trompe pas il ajoute la ligne PUT TOTOMAN au membre SCFTP

    J ai pas testé car j ai pas bien approfondi le QSH

    * en RPG, j'avoue que je n ai pas grand chose a vous montrer, j'arrive à peine a déclarer mon fichier pour modification .../ et encore il ne le trouve pas


    * SQLRPG : j' ai voulu m'orienter vers ca.. donc va pour le SQL donc me voila reparti

    donc je déclare mon fichier SCFTP en modification et je lance ma commande SQL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    FSCFTP   UF  E           K        DISK 
    C/EXEC SQL                             
    C+  DECLARE CUR1 CURSOR FOR            
    C+  UPDATE SCFTP                       
    C+     SET SRCDTA = CMDFTP             
    C+   WHERE SRCSEQ = '5,00'             
    C/END-EXEC                             
    C/EXEC SQL                             
    C+ OPEN CUR1                           
    C/END-EXEC
    Et la il me dit "Elément syntaxique SCFTP n'est pas correct. Eléments possibles : <FIN-INSTRUCTION>."

    J'en déduis que je n'arrive toujours pas à déclarer mon fichier...
    Quelqu'un aurais une suggestion ? ou alors je suis carrément a coté de la plaque..

    Mon fichier SCFTP: TOTO/QFTPSRC MBR(SCFTP)

    J ai une dernière question lors de la déclaration d'un fichier comment le programme sait que c est un membre appartenant au fichier QFTPSRC qui lui meme est dans la bib TOTO, et s'il y avait un autre de meme nom dans une autre bib, faut il qu il soit unique ? (dans mes bib)

    ps : via WRKQRY voila mon script SCFTP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
              SRCSEQ    SRCDAT   SRCDTA                         
     000001     1,00   110.203   user mdp              
     000002     2,00   110.203   ASCII                          
     000003     3,00   110.203   SENDPASV 0                     
     000004     4,00   110.203   LOCSITE TRIM 0                 
     000005     5,00   110.418   PUT BIB/FICHIER   
     000006     6,00   110.203   QUIT

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Février 2009
    Messages : 92
    Points : 116
    Points
    116
    Par défaut
    Je ne suis pas sur d'avoir tout compris mais tu veux modifier l'enregistrement 5 de ton fichier SCFTP pour remplacer ton nom de fichier ?

    Avec le SQL dans un RPG (RPGSQLE) avec ton nom de nouveau fichier à transférer en paramêtre:
    C PARM CMDFTP
    C/EXEC SQL
    C+ UPDATE SCFTP
    C+ SET SRCDTA = :CMDFTP
    C+ WHERE SRCSEQ = '5,00'
    C/END-EXEC

    La variable CMDFTP devra contenir la valeur 'PUT BIB/FICHIERNEW' , fichiernew étant le nom de ton nouveau fichier (je ne sais pas comment tu le récupères) .

    Pour travailler sur le membre SCFTP du fichier QFTPSRC de la bib TOTO , il faut avant d'éxécuter le SQLRPG un OVRDBF FILE(SCFTP) TOFILE(TOTO/QFTPSRC) MBR(SCFTP)

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Exploitant
    Inscrit en
    Avril 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Exploitant

    Informations forums :
    Inscription : Avril 2012
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Merci Simka1000 pour cette réponse aussi rapide,

    La variable CMDFTP devra contenir la valeur 'PUT BIB/FICHIERNEW' , fichiernew étant le nom de ton nouveau fichier (je ne sais pas comment tu le récupères) .
    Je récupère le nom via un cl qui entre autre concatène :

    "PUT BIB/" + le nom + date dans la variable CMDFTP.

    De là je passe en paramètre la variable CMDFTP au programme RPGSQLE.

    il faut avant d'éxécuter le SQLRPG un OVRDBF FILE(SCFTP) TOFILE(TOTO/QFTPSRC) MBR(SCFTP)
    Je suppose que c est dans mon CL qui va appeler le RPGSQLE non ?

    Sinon j'y vais de suite essayer ta solution.

    Merci encore.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Février 2009
    Messages : 92
    Points : 116
    Points
    116
    Par défaut
    Oui tout à fait dans le CL ou tu prépares ta variable
    tu met l'OVRDBF avant le CALL RPGSQL PARM (&CMDFTP)

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Exploitant
    Inscrit en
    Avril 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Exploitant

    Informations forums :
    Inscription : Avril 2012
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Merci encore

  6. #6
    Membre actif
    Homme Profil pro
    Architecte technique & logiciel IBM i
    Inscrit en
    Septembre 2010
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique & logiciel IBM i
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2010
    Messages : 177
    Points : 291
    Points
    291
    Par défaut
    On peut appeler une API qui permet d'exécuter des instructions SQL directement depuis un CL : QZDFMDB2.

    Exemple d'un code d'un intérêt majeur :

    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
    PGM
    
    /* Travail */
    DCL        VAR(&CMD) TYPE(*CHAR) LEN(1024)
    DCL        VAR(&QUOTE) TYPE(*CHAR) LEN(1) VALUE('''')
    DCL        VAR(&DROP) TYPE(*LGL) VALUE('1')
    
    /*============================================================================*/
    
    CHKOBJ     OBJ(BAS_TB/MATABLE) OBJTYPE(*FILE)
    MONMSG     MSGID(CPF9801) EXEC(CHGVAR VAR(&DROP) VALUE('0'))
    
    IF         COND(&DROP) THEN(DO)
       CHGVAR     VAR(&CMD) VALUE('drop table bas_tb.matable')
       CALL       PGM(QZDFMDB2) PARM(&CMD)
    ENDDO
    
    CHGVAR     VAR(&CMD) VALUE('create table bas_tb.matable (id char (1))')
    CALL       PGM(QZDFMDB2) PARM(&CMD)
    
    CHGVAR     VAR(&CMD) VALUE('insert into bas_tb.matable (id) values(' *TCAT +
                 &QUOTE *TCAT '1' *TCAT &QUOTE *TCAT ')')
    CALL       PGM(QZDFMDB2) PARM(&CMD)
    
    CHGVAR     VAR(&CMD) VALUE('insert into bas_tb.matable (id) values(''2'')')
    CALL       PGM(QZDFMDB2) PARM(&CMD)
    
    CHGVAR     VAR(&CMD) VALUE('delete from bas_tb.matable')
    CALL       PGM(QZDFMDB2) PARM(&CMD)
    
    RETURN
    
    ENDPGM:

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Exploitant
    Inscrit en
    Avril 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Exploitant

    Informations forums :
    Inscription : Avril 2012
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    bonjour à tous,

    je reviens vers vous et oui j ai cloturé trop vite

    j ai un petit souci avec la déclaration de ma variable passée en paramètre..

    Ci dessous mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    0001.00 C     *ENTRY        PLIST                                               
    0002.00 C                   PARM                    CMDFTP                      
    0003.00 C/EXEC SQL                                                              
    0004.00 C+ UPDATE TOTO/QFTPSRC CSFTP SET SRCDTA = :CMDFTP WHERE SRCSEQ = 5,00   
    0005.00 C/END-EXEC
    et quand je veux compiler hop erreur..

    donc je vais voir mon petit qsysprt et il me dit :

    ID-MSG GRAV ENREG TEXTE
    SQL0312 30 4 Position 49 Variable CMDFTP non définie ou non utilisable.
    Je ne vois pas bien d'ou vient mon erreur, est ce que je déclare mal CMDFTP ou manque t il quelquechose ?

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Exploitant
    Inscrit en
    Avril 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Exploitant

    Informations forums :
    Inscription : Avril 2012
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Merci pour le CL PWRDWNSYS, je vais regarder ca un peu plus tard, pour l'instant je m'énerve tout seul comme un grand sur ce petit pgm

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Février 2009
    Messages : 92
    Points : 116
    Points
    116
    Par défaut
    Défini la taille de ta zone CMDFTP dans la ligne PARM !

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Exploitant
    Inscrit en
    Avril 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Exploitant

    Informations forums :
    Inscription : Avril 2012
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    merci simka1000, mais a nouveau j'ai un message mais cette fois :

    ID-MSG GRAV ENREG TEXTE
    SQL1110 10 CCSID du fichier source est 65535 mais QSQLTEMP1 déjà
    créé avec CCSID 297.
    donc google est mon ami et je trouve :

    SQL1110NA supplied data area was invalid and could not be used.
    Explanation:
    The data area is not initialized correctly.

    The command cannot be processed.

    User response:
    Ensure that the user-supplied input SQLDA or output SQLDA fields are initialized correctly.
    Retour à la case départ

    Pourtant, j'ai bien modifié le pgm :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    0001.00 C     *ENTRY        PLIST                                             
    0002.00 C                   PARM                    CMDFTP           30       
    0003.00 C/EXEC SQL                                                            
    0004.00 C+ UPDATE TOTO/QFTPSRC SCFTP SET SRCDTA = :CMDFTP WHERE SRCSEQ = 5,00 
    0005.00 C/END-EXEC

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Février 2009
    Messages : 92
    Points : 116
    Points
    116
    Par défaut
    Probleme de CCSID différent , tu peux essayer ça (mais fait une copie de ton fichier QFTPSRC) j'ai pas testé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    0001.00 C     *ENTRY        PLIST                                             
    0002.00 C                   PARM                    CMDFTP           30       
    0003.00 C/EXEC SQL                                                            
    0004.00 C+ UPDATE TOTO/QFTPSRC SCFTP SET SRCDTA = CAST(:CMDFTP as CHAR(30) CCSID 65535) WHERE SRCSEQ = 5,00 
    0005.00 C/END-EXEC

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Exploitant
    Inscrit en
    Avril 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Exploitant

    Informations forums :
    Inscription : Avril 2012
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Dois je supprimer QTEMP/QSQLTEMP1 afin qu il le recré ?

    hop, j avais pas vu ta réponse, je vais faire un pti sav ce soir avant de tester.

    Merci encore.

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Février 2009
    Messages : 92
    Points : 116
    Points
    116
    Par défaut
    Non par définition le QTEMP/QSQLTEMP1 est un fichier temporaire créé à la pré-compilation SQL de ton SQLRPG

    fais juste une copie de ton membre contenant tes instructions FTP sous un autre nom..Si il y a un problème après le test , tu n'as plus qu'à le renommer sous son nom original (après avoir supprimé le fichier altéré par le test)

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Exploitant
    Inscrit en
    Avril 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Exploitant

    Informations forums :
    Inscription : Avril 2012
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Me revoila, désolé mais vacance oblige

    donc je me suis un peu planté dans le source donc je l'ai refait et voila ce que cela donne :

    le CL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    **************  Début des données  ************************************ 
                 PGM                                                        
                 DCL        VAR(&CMDFTP) TYPE(*CHAR) LEN(30)                
                 CHGVAR     VAR(&CMDFTP) VALUE('PUT  MABIB/MONFIC')      
                 OVRDBF     FILE(QFTPSRC) TOFILE(TOTO/QFTPSRC) MBR(SCFTP)   
                 CALL       PGM(TESTSQLRPG) PARM(&CMDFTP)                   
                 ENDPGM                                                     
    ***************  Fin des données  *************************************
    et le QSQLRPG :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    **************  Début des données  ************************************
    C     *ENTRY        PLIST                                              
    C                   PARM                    CMDFTP           30        
    C/EXEC SQL                                                             
    C+ UPDATE TOTO/QFTPSRC SET SRCDTA = :CMDFTP WHERE SRCSEQ = 5,00        
    C/END-EXEC                                                             
    ***************  Fin des données  *************************************
    j'obtiens un erreur de gravité 40 :

    ID msg Gr Numéro Séq Texte message
    RNF7023 40 0 Le compilateur ne peut déterminer comment le programme
    s'arrête.

    quelqu'un a une idée ? car je tourne en rond

  15. #15
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2008
    Messages
    940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 940
    Points : 1 409
    Points
    1 409
    Par défaut
    Il suffit de rajouter un bon vieux SETON de l'indicateur LR à la fin de ton programme.

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Exploitant
    Inscrit en
    Avril 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Exploitant

    Informations forums :
    Inscription : Avril 2012
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    Merci bien pour la réponse,

    donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    **************  Début des données  ************************************
    C     *ENTRY        PLIST                                              
    C                   PARM                    CMDFTP           30        
    C/EXEC SQL                                                             
    C+ UPDATE TOTO/QFTPSRC SET SRCDTA = :CMDFTP WHERE SRCSEQ = 5,00        
    C/END-EXEC                                                             
    C                   SETON                                        LR    
    ***************  Fin des données  *************************************
    C est cool je compile par contre ca ne fait rien

    quand je fais un WRKJOB j ai 2 erreurs, une de 50 et une de 30

    50 : Membre SCFTP non journalisé dans *N.
    30 : Table QFTPSRC de TOTO incorrecte pour cette opération.

    Apres il me fait un beau RETURN et m'envoie boulet.

    Est ce que c est possible ce que je fais ou je perds mon temps et le votre ?

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Février 2009
    Messages : 92
    Points : 116
    Points
    116
    Par défaut
    Oui c'est possible

    Rajoute ça avant les instructions SQL déjà présentes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    C/EXEC SQL         
    C+ SET OPTION      
    C+ COMMIT = *NONE  
    C/END-EXEC

  18. #18
    Membre éprouvé
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Octobre 2006
    Messages
    684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 684
    Points : 985
    Points
    985
    Par défaut
    Bonjour,

    Personnellement je trouve que çà fait usine à gaz pour transférer un simple fichier... Même avec un nom qui change.
    Si sa taille n'est pas trop importante, une méthode simple consisterait à copier le fichier dans QTEMP sous un nom fixe. Et c'est ce fichier qui serait transférer par ta procédure. Sans avoir à retoucher quoi que ce soit dans le source, ce que je trouve un peu dangereux.

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations forums :
    Inscription : Février 2009
    Messages : 92
    Points : 116
    Points
    116
    Par défaut
    Evidemment , mais je suis parti du principe que le nom du fichier après le transfert devait être celui d'origine...Si ça n'a pas d'importance , il faut effectivement suivre les(très) bon conseil de m4k-Hurrican

  20. #20
    Futur Membre du Club
    Homme Profil pro
    Exploitant
    Inscrit en
    Avril 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Exploitant

    Informations forums :
    Inscription : Avril 2012
    Messages : 16
    Points : 5
    Points
    5
    Par défaut
    haaaaaa coool

    Magnifique, merci pour votre patience

    Ca fonctionne !!!

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

Discussions similaires

  1. [PHP 5.3] Modification d'un espace membre
    Par yann18 dans le forum Langage
    Réponses: 1
    Dernier message: 17/06/2010, 13h05
  2. copie d'un pds avec modification des noms des membres
    Par naimespseudo dans le forum z/OS
    Réponses: 17
    Dernier message: 23/08/2009, 00h09
  3. [VB6] Modification d'un membre d'une collection ?
    Par nestor dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 07/07/2006, 09h24
  4. [MySQL] Modification des données d'une base par les membres
    Par pod1978 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 22/03/2006, 18h25

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