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 :

Utilisation SQL dans un programme RPG


Sujet :

AS/400

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2008
    Messages : 148
    Points : 64
    Points
    64
    Par défaut Utilisation SQL dans un programme RPG
    Salut !
    Je dois réaliser une option dans le programme que nous utilisons dans ma société pour récupérer des données diverses.
    Je voudrai savoir si j'avais la possibilité avec un programme en RPG de ne réaliser que des requêtes SQL ? Je m'explique :
    J'aurais à ma disposition plusieurs fichiers de Base de données où il faut que je récupère grâce à des requêtes diverses données. Avec ces données récupérées, il faudrait que je les réinsère dans une autre Base de données toujours à l'aide d'une requête SQL.

    Est-ce consciencieux d'utiliser le RPG ? Un autre moyen de le faire existe-t-il ?

    Cordialement,
    R4ndy

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Salut,

    Tu peux le faire directement dans une procédure cataloguée SQL.
    Ci-dessous un exemple extrait du cours IBM :

    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
    CREATE PROCEDURE calc_sal_srv
    (IN srv_in INT,
    OUT delta_sal DEC(7, 2),
    OUT nb_emp INT)
    LANGUAGE SQL READS SQL DATA
    BEGIN
    DECLARE sal_emp DEC(7, 2);
    DECLARE fin_tab INT DEFAULT 0;
    DECLARE sal_moy DEC(7, 2);
    DECLARE diff_sal DEC(7, 2);
    DECLARE cnt INT DEFAULT 0;
    DECLARE tot_diff DEC(7, 2) DEFAULT 0;
    DECLARE C1 CURSOR FOR
    SELECT sal FROM tabempl WHERE srv = srv_in;
    DECLARE CONTINUE HANDLER FOR NOT FOUND
    SET fin_tab = 1;
    SELECT DEC(AVG(sal), 7, 2) INTO sal_moy
    FROM tabempl WHERE srv = srv_in;
    OPEN C1;
    FETCH C1 INTO sal_emp;
    WHILE fin_tab = 0 DO
    SET diff_sal = sal_moy - sal_emp;
    IF diff_sal > 0 THEN
    SET tot_diff = tot_diff + diff_sal;
    SET cnt = cnt + 1;
    END IF;
    FETCH C1 INTO sal_emp;
    END WHILE;
    CLOSE C1;
    SET delta_sal = tot_diff / cnt;
    SET nb_emp = cnt;
    END
    ou encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE PROCEDURE creatable
    LANGUAGE SQL MODIFIES SQL DATA
    BEGIN ATOMIC
    CREATE TABLE tabtrav
    (noempl DEC(3) NOT NULL,
    nomempl CHAR(12) NOT NULL,
    service CHAR(10) NOT NULL);
    INSERT INTO tabtrav
    SELECT mat, nom, nomsrv
    FROM tabserv, tabempl
    WHERE tabserv.srv = tabempl.srv;
    END
    Puis tu pourras appeler ta procédure dans un

    Exec SQL CALL maprocedure

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Citation Envoyé par R4ndy
    Est-ce consciencieux d'utiliser le RPG ?
    Tu veux dire raisonnable ?

    Tu peux effectivement insérer des instructions SQL dans un programme RPG III ou RPG IV.
    Tu récupères les infos nécessaires soit dans des variables déclarées dans le programme, soit par l'intermédiaire d'un "curseur" (buffer) SQL.
    Pour alimenter une table, tu passes des variables ou des constantes aux instructions UPDATE ou INSERT.
    • Toutes les variables indiquées dans les instructions SQL doivent être précédées par deux points ( : ).
    • Toutes les instructions SQL doivent être précédées par EXEC SQL et se terminer par END-EXEC en syntaxe colonnée ou un point-virgule en syntaxe libre (/free).
    • Ne JAMAIS employer de fichiers logiques en AUCUN CAS dans une instruction SQL, n'employer que des fichiers PHYSIQUES ou des TABLES SQL.
    • Le TYPE de MEMBRE SOURCE doit être SQLRPG si RPG III ou SQLRPGLE si RPG IV.
    • Toujours tester le code statut de SQL (SQLSTT) après chaque instruction et le préférer à SQLCOD because portabilité de l'application :

    Si SQLSTT = Zero --> OK, tout va bien
    Si SQLSTT = '02000' --> Fin de la sélection ou non trouvé
    Si SQLSTT autre --> Il y a un os. Voir la log.

    Exemples

    En colonné :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    C/EXEC SQL Select MaVar into :MaVar 
    C+            From MaTable
    C+            Where ...
    C/END-EXEC
    C              IF              SQLSTT <> *Zero  <-- ya un os
    ...
    C/EXEC SQL Update MaTable Set MaColonne1 = :MaVar1, MaColonne2 = :MaVar2, MaColonne3 = 'MaConstante', ...
    C/END-EXEC
    C              IF              SQLSTT <> *Zero  <-- ya un os
    En syntaxe libre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    /free 
        Exec sql Select MaVar into :MaVar From ...;
        if SQLSTT <> *Zero;    <-- ya un os
    ...
        EXEC SQL Update MaTable Set MaColonne1 = :MaVar1, MaColonne2 = :MaVar2, MaColonne3 = 'MaConstante', ...;
        if SQLSTT <> Zero;    <-- ya un os
    Citation Envoyé par R4ndy
    Un autre moyen de le faire existe-t-il ?
    K2R400 t'a montré un exemple de procédure stockée qui est ni plus ni moins qu'un programme écrit en langage SPL (SQL Procédural Language), mais compte tenu que dans le programme RPG, comme dans tout programme, tu as une logique d'enchaînement des résultats à respecter, l'utilisation de SQL dans le RPG (SQL embedded) est la solution à retenir.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2008
    Messages : 148
    Points : 64
    Points
    64
    Par défaut
    Bonjour,
    merci à vous 2 pour vos réponses, je vais cependant utiliser, en priorité celle de Mercure.
    Une autre question me vient à l'esprit, dois-je déclarer les variables utilisées dans SQL ?

    Si oui ça nous donnerait donc :

    - Déclaration PF_1, PF_2, ... (où je récupère mes données)

    - Déclaration PF_Sortie (où j'insérerai les données récupérées)

    - Déclaration Variables utilisées dans SQL

    - Programme avec SQL Embedded


    R4ndy

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Citation Envoyé par R4ndy
    ...dois-je déclarer les variables utilisées dans SQL ?
    Bien entendu !

    Citation Envoyé par R4ndy
    Si oui ça nous donnerait donc :

    - Déclaration PF_1, PF_2, ... (où je récupère mes données)

    - Déclaration PF_Sortie (où j'insérerai les données récupérées)

    - Déclaration Variables utilisées dans SQL

    - Programme avec SQL Embedded
    Non.
    1/ Tu ne déclares aucun fichier en spécification F.
    2/ Tu définis les variables en spécification D sauf SQLSTT qui est automatiquement défini.
    3/ Toutes les intructions d'E/S se font alors avec SQL intégré (embedded) dans ton programme RPG.

    Exemple d'un programme qui sélectionne certains enregistrements du fichier d'entrée et recopie les enreg. sélectionnés sur le fichier en sortie en utilisant un curseur.
    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
    D Mavar1               s               5a
    D MaVar2               s               5p 0
    ...
     /free
    
    Exec sql Declare C1 Cursor For Select col1, col2, ... From MonFichierEntree Where col1 = 'ABCDE' And col2 > :MonParam; Exec sql Open C1; if SQLSTT <> *ZERO And SQLSTT <> '02000'; // Il y a un os Exsr ErrorRoutine; endif; DoU SQLSTT = '02000'; // EOF ou fin de sélection Exec sql Fetch C1 Into :MaVar1, MaVar2, ... if SQLSTT = '02000'; leave; endif; Exec sql Insert into MonFichierSortie ( col1, col2, ... ) Values( :MaVar1, :MaVar2, ... ); if SQLSTT <> *ZERO'; // Il y a un nouvel os Exsr ErrorRoutine; endif; enddo; *inlr = '1';

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2008
    Messages : 148
    Points : 64
    Points
    64
    Par défaut
    Salut,
    Merci pour tes précisions Mercure

    J'ai un problème de compilation qui m'est apparu...je n'ai pas eu le temps de le copier pour pouvoir poster ici,donc je me dis que je posterai lundi.
    Lundi matin arrive, je relance ma compilation et...rien... la compilation ne se réalise pas...il soumet le travail a Qbatch mais après rien ne se passe, pas de message d'erreur rien en splf... Je me dis que mon programme est peut être mal écrit, alors je prend un autre source, j'essaye de le compiler, et le même problème fait surface... une idée ? pour ce problème inattendu ?

    R4ndy

    Edit : J'ai résolu le problème en redémarrant l'AS400.
    Donc voici l'erreur de compilation dont je parlais plus haut :
    *RNF0257 30 8 Type de spécification de procédure principale incorrect ou hors séquence.
    Voici le source correspondant :
    DVARIABLE s 30

    /FREE
    Exec sql Select COLONNE1 into :VARIABLE
    From FICHIER1/BIBLIO1
    Where COLONNEX = 'xxxxxx' ;

    IF SQLSTT=*Zero AND SQLSTT='02000';
    Exec sql Update FICHIER1/BIBLIO2 Set COLONNE2 = :VARIABLE;
    ENDIF;

    inlr= '1';
    */END-FREE

    C return
    Une idée ? mon code contient-il des erreurs ?

  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Citation Envoyé par R4ndy
    mon code contient-il des erreurs ?
    Probable. Regarde le n° de ligne que te signale le message d'erreur.

    Version de l'OS ?

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Août 2008
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 123
    Points : 146
    Points
    146
    Par défaut
    @ R4ndy : Peux tu nous redonner le code à l'aide de la balise [code] (l'icône avec un # ) au lieu de citation. Ceci afin que le colonage soit conservé. Cela a encore de nos jours une importance cruciale en RPG.
    Qu'elle est la version d'OS400 ?
    Le message RNF0257 me fait penser à une valeur invalide dans la "colonne" 6 (code spécif) d'une des lignes

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2008
    Messages : 148
    Points : 64
    Points
    64
    Par défaut
    Bonjour à tous,
    Merci de vos réponses, je voulais vous donner les éléments manquants que vous me demandez mais, quand je suis arriver ce matin au bureau... et je retrouve encore l'erreur que j'ai rencontré hier sur l'AS400, à savoir :
    je lance ma compilation et...rien... la compilation ne se réalise pas...il soumet le travail à Qbatch mais après rien ne se passe, pas de message d'erreur rien en splf... Je me dis que mon programme est peut être mal écrit, alors je prend un autre source, j'essaye de le compiler, et le même problème fait surface...
    Vous auriez une idée pour ce problème ? J'ai l'impression que le redémarrage que j'ai fait hier n'a servi à rien... et je n'ai pas envie de 'solutionner le problème' en le redémarrant tous les jours...
    Merci.

    R4ndy

  10. #10
    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 R4ndy Voir le message
    Bonjour à tous,... et je n'ai pas envie de 'solutionner le problème' en le redémarrant tous les jours...
    Merci.

    R4ndy
    Bonjour.

    Regarde si ta jobq n'est pas holdée par hasard.
    Faire : WRKJOBD et WRKSBMJOB

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2008
    Messages : 148
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par Hédhili Jaïdane Voir le message
    Bonjour.

    Regarde si ta jobq n'est pas holdée par hasard.
    Faire : WRKJOBD et WRKSBMJOB
    Comment on voit cela ? Tu peux m'expliquer stp ?

    Dans WRKSBMJOB je vois mon travail type Batch, en état 'jobq'.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2008
    Messages : 148
    Points : 64
    Points
    64
    Par défaut
    Enfin de compte j'ai *normalement* résolu le problème...
    Un programme de statistique obsolète se lançai chaque soir à 22H cependant depuis quelques jours il plante...Donc j'ai enlevé la tâche.

    Maintenant pour en revenir au principal sujet, Version de l'OS : V5r4

    Désolé pour l'erreur pour la citation du code...le re-voilà :
    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
    DPSDNOBL          s             30                         
                                                               
      /FREE                                                    
       Exec sql Select DONOBL into :PSDNOBL                    
                From RANDTEST/GDDO                             
                Where DODOSS = '100006' ;                      
                                                               
       IF SQLSTT=*Zero AND SQLSTT='02000';                     
       Exec sql Update RANDTEST/PSDGORO Set PSDNOBL = :PSDNOBL;
       ENDIF;                                                  
                                                               
       inlr= '1';                                             
     */END-FREE                                                
                                                               
    C                   return
    Voici les lignes correspondantes à cette erreur :
    L i s t e s o u r c e
    1 DPSDNOBL s 30
    2
    3 /FREE
    ======>a
    *RNF0257 30 a 001400 Type de spécification de procédure principale incorect ou hors séquence.
    4 Exec sql Select DONOBL into :PSDNOBL
    ======>a
    *RNF0257 30 a 001402 Type de spécification de procédure principale incorect ou hors séquence.
    5 From RANDTEST/GDDO
    ======>a
    *RNF0257 30 a 001403 Type de spécification de procédure principale incorect ou hors séquence.
    6 Where DODOSS = '100006' ;
    ======>a
    *RNF0257 30 a 001404 Type de spécification de procédure principale incorect ou hors séquence.
    7
    8 IF SQLSTT=*Zero AND SQLSTT='02000';
    ======>a
    *RNF0257 30 a 001406 Type de spécification de procédure principale incorect ou hors séquence.
    9 Exec sql Update RANDTEST/PSDGORO Set PSDNOBL = :PSDNOBL;
    ======>a
    *RNF0257 30 a 001408 Type de spécification de procédure principale incorect ou hors séquence.
    10 ENDIF;
    ======>a
    *RNF0257 30 a 001409 Type de spécification de procédure principale incorect ou hors séquence.
    11
    12 inlr= '1';
    ======>a
    *RNF0257 30 a 001412 Type de spécification de procédure principale incorect ou hors séquence.
    13 */END-FREE
    14

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Août 2008
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 123
    Points : 146
    Points
    146
    Par défaut
    Bjr,

    Les directives /Free et /end-free doivent commencer précisément en colonne 7 (c'est le '/' qui est en position 7). L'astérisque devant le / est optionnelle.

    Un autre pb : inlr = '1'; s'écrit en général *INLR = '1';
    (sauf si tu as une déclaration de INLR, mais ce serait un peu vicieux AMHA)

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    De plus, ceci me paraît illogique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IF SQLSTT=*Zero AND SQLSTT='02000';

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2008
    Messages : 148
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par jump400 Voir le message
    Bjr,

    Les directives /Free et /end-free doivent commencer précisément en colonne 7 (c'est le '/' qui est en position 7). L'astérisque devant le / est optionnelle.

    Un autre pb : inlr = '1'; s'écrit en général *INLR = '1';
    (sauf si tu as une déclaration de INLR, mais ce serait un peu vicieux AMHA)
    Bien vu ! J'ai corrigé et ça a compilé ! Merci :d

    Citation Envoyé par K2R400 Voir le message
    De plus, ceci me paraît illogique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IF SQLSTT=*Zero AND SQLSTT='02000';
    Tu verrais un 'OR' ?



    Bon pour le moment, la compilation fonctionne, si je rencontre d'autres problèmes par la suite je reviendrai par ici, donc pour le moment je ne mentionne pas "Résolu"

    Merci à tous en tout cas.

  16. #16
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Citation Envoyé par R4ndy

    IF SQLSTT=*Zero AND SQLSTT='02000';

    Tu verrais un 'OR' ?
    Bien entendu !

    Comment veux-tu que la variable SQLSTT soit à la fois égale à *ZERO et à '02000' ????

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2008
    Messages : 148
    Points : 64
    Points
    64
    Par défaut
    J'ai modifié !
    Merci à toi !

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2008
    Messages : 148
    Points : 64
    Points
    64
    Par défaut
    Hello !
    Plus aucun problèmes de compilations, parfait. Cependant, j'ai un petit problème avec ce que tu m'as proposé Mercure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    /free 
        Exec sql Select MaVar into :MaVar From ...;
        if SQLSTT <> *Zero;    <-- ya un os
    ...
        EXEC SQL Update MaTable Set MaColonne1 = :MaVar1, MaColonne2 = :MaVar2, MaColonne3 = 'MaConstante', ...;
        if SQLSTT <> Zero;    <-- ya un os
    Mon code entré, je compile, pas de problèmes... et puis j'exécute : rien ne se produit, ma table ne se met pas à jour. Donc je vire tout mon sql, je met une simple instruction pour ajouter une ligne dans ma table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     **************  Début des données  ************************************
     DPSDNOBLV         s             30                                     
      /free                                                                 
        Exec sql Insert into RANDTEST/PSDGORO (PSDNOBL)                     
        Values('TEST');End-exec;                                            
      /end-free                                                             
      *inlr='1'                                                             
     C                   RETURN                                             
     ***************  Fin des données  *************************************
    Je compile encore, exécute et toujours le même problème rien ne s'ajoute à ma table... Aurais-je commis une erreur ? Est ce que ce que j'ai mis dans mon code est suffisant pour ajouter une valeur ?

    Cordialement, R4ndy.

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Derrière ton insert, fais un DSPLY de SQLSTT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    **************  Début des données  ************************************
     DPSDNOBLV         s             30                                     
      /free                                                                 
        Exec sql Insert into RANDTEST/PSDGORO (PSDNOBL)                     
        Values('TEST');
        Dsply SQLSTT;                     
      /end-free                                                             
      *inlr='1'                                                             
     C                   RETURN                                             
     ***************  Fin des données  *************************************
    Tu retrouveras alors l'erreur SQL, donc la raison de l'échec.
    Tu recherches sur Google "SQL STATE" avec ce qu'il t'a affiché.
    Au fait, en /free, le End-exec est inutile derrière une instruction SQL
    Sache aussi que SQLSTT est une zone alpha de 5, donc tester sa valeur par rapport à *zero n'a pas beacoup d'intérêt. Teste plutôt l'égalité avec '00000' pour savoir si tout c'est bien passé.

  20. #20
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Citation Envoyé par K2R400
    Sache aussi que SQLSTT est une zone alpha de 5, donc tester sa valeur par rapport à *zero n'a pas beaucoup d'intérêt. Teste plutôt l'égalité avec '00000' pour savoir si tout c'est bien passé.
    Je ne comprends pas cette remarque. Tester *ZERO ou '00000' ne revient-il pas au même ?

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

Discussions similaires

  1. [PRO*COBOL] Appel SQL dans un programme COBOL
    Par JauB dans le forum Interfaces de programmation
    Réponses: 9
    Dernier message: 19/05/2010, 13h33
  2. Réponses: 1
    Dernier message: 10/02/2008, 20h13
  3. requete SQL dans un programme VBA ?
    Par shuin dans le forum VBA Access
    Réponses: 1
    Dernier message: 03/06/2007, 21h25
  4. Réponses: 5
    Dernier message: 16/03/2006, 00h37
  5. [CR] Peut-on utiliser CR dans un programme en C
    Par mboucetta dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 11/10/2004, 10h56

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