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

DB2 Discussion :

Result set : 0 result sets processed


Sujet :

DB2

  1. #1
    Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 11
    Points : 2
    Points
    2
    Par défaut Result set : 0 result sets processed
    Bonjour,

    J'essaies de retourner un result set à partir d'un sqlrpgle.
    Mon problème est que mon result set ne fonctionne pas.
    On me dit que mon code à l'air bon, mais j'ai toujours ke même message sur le set result set : 0 result sets processed

    Voila le code de mon SQLRPGLE :
    Ddstest DS OCCURS(7)
    D parm1 1 10
    D i s 10i 0
    C for i = 1 to 7
    C eval %occur(dstest)=i
    C eval parm1='Ola'
    C ENDfor
    C/EXEC SQL
    C+ set result sets array:dstest for 7 rows
    C/END-EXEC
    *
    C SETON LR

    Y aurait-il une valeur système ou autre chose qui ne ferait pas fonctionner mon result set ?

    Merci pour votre aide

  2. #2
    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
    Version de l'OS ?

    Sur une machine en V5R3, ça marche bien sans problème.
    Voici le code que j'ai testé.

    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
    h Option( *srcstmt: *nodebugio )                 
    h dftactgrp( *no )                               
     
    D dstest          ds                  occurs(7)  
    D parm1                         10a              
     
    D i               s             10i 0            
     
     /free                                           
        *inlr = *on;                                 
        for i = 1 to 7;                              
          %occur(dstest) = i;                        
          parm1='Ola' + %char(i);                    
        endfor;                                      
     /end-free    
     
    C/EXEC SQL set result sets array :dstest for 7 rows
    C/END-EXEC                                    
     
     /free                                        
        return;
    En revanche, tu ne pourras pas accéder au contenu de ce result set avec SQL "embedded" en RPG ou COBOL. Il te faudra passer par SQL CLI, en RPG ou COBOL.

  3. #3
    Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Je suis e n v5r4

    Toujours le même problème.
    Y aurait une valeur système, ou un paramètre à la compile pour que ca marche ?
    C'est pas la première fois qu'on me dit que mon code est correct, seulement chez moi toujours le même message :

    0 result sets processed by the SET RESULT SETS statement.

  4. #4
    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
    Ce "vieux" code ci-dessous marche.

    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
         h Option( *srcstmt: *nodebugio )
         h dftactgrp( *no )
     
         D DSOCC         e ds                  extname(MyFile) occurs(16)
     
         D i               s             10i 0 inz(16)
     
         c                   eval      *inlr = *on
     
         c/exec sql DECLARE C1 CURSOR FOR
         c+            SELECT *
         c+            FROM   MyFile
         c/end-exec
     
         c/exec sql OPEN C1
         c/end-exec
     
          * Les lignes sont lues en une seule fois dans la DS DSOCC
         c/exec sql FETCH FROM C1 FOR :i ROWS INTO :DSOCC
         c/end-exec
     
         c/exec SQL set result sets array :DSOCC for :i rows
         c/end-exec
     
         c/exec sql  CLOSE C1
         c/end-exec
     
         c                   return
    Tu peux le convertir en free si tu veux.

    HTH

  5. #5
    Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Merci pour ta réponse,

    J'ai toujours le même problème, ca ne vient à priori pas du code source

    J'ai les messages suivants quand je déroule mon programme en debug :

    Cursor C1 opened.
    The cursor was opened with result set identifier of 0

    16 rows fetched from cursor C1.
    16 rows were fetched from cursor C1 with result set identifier 0

    0 result sets were processed by the SET RESULTS SETS
    statement, including 0 array result sets with 16 rows.

    Je suppose que mon result set est vide.
    Comment en être sûr ?
    cela veut dire qu'il manque quelquechose mais quoi ?
    Je commence à désespérer :-)

    Merci pour ton aide

  6. #6
    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
    1. Compile le programme avec DBGVIEW(*SOURCE).
    2. Mets-toi sous debug sur un écran vert avec STRDBG
    3. Place un breakpoint sur la dernière instruction par <F6>.
    4. Regarde ensuite le contenu de la DSOCC en plaçant le curseur sur la DEFINITION de la DS (en haut) et fais <F11>
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      D DSOCC         e ds                  extname(MyFile) occurs(16)
          !
          !____ <F11> ici sur DSOCC
    5. La DSOCC devrait contenir les 16 lignes alimentées.


    Fais voir ici la commande de compil dans sa TOTALITé please

    Si ça ne suffit pas, je te filerai un VBA qui te permettra d'accéder au result set depuis Excel sous Windows. Avec ce VBA, tu verras s'il est alimenté ou pas.

  7. #7
    Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Bonjour,

    J'espère que les fêtes ont été bonnes ....

    Pour mon petit soucis,
    J'ai vérifié, la dsocc est bien remplie.

    Voila la compilation de mon sqlrpgle :

    CRTSQLRPGI OBJ(MABIB/MONSQLRPGLE)
    SRCFILE(MABIB/QILESRC)
    SRCMBR(MONSQLRPGLE)
    OBJTYPE(*PGM)
    REPLACE(*YES)

    Merci !!!!

  8. #8
    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
    A ce jour nous sommes encore dans la période des fêtes. C'est "la trêve des Confiseurs".

    Ceci dit, dans la mesure où la DSOCC est alimentée correctement, il y a de fortes chances pour que le result set le soit également malgré le message inquiétant.

    La commande de compil me semble OK.

    Une question cependant.
    Comment vas-tu faire pour lire le contenu du result set ?
    Indique en détail ce que tu comptes faire.

  9. #9
    Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    C'est juste, on remet le couvert bientôt ....

    En fait je souhaite lire le contenu de mon resultset à partir d'une page web :
    J'utilise Zend core pour faire du php sur l'as 400.
    Avec leurs outils, je peux appeler soit un programme, soit executer une procedure stockée qui renvoi un result set que je peux lire en php.

    voila le code de ma page php :
    <?php
    require_once 'verif_conn.php';
    $sql="CALL mabib/monprogramme";
    $stmt=i5_prepare($sql);
    if (!$stmt) {
    echo 'Prepare error: ' . i5_errno() . '<br/>Msg: ' . i5_errormsg() . '<br/>';
    die();
    }

    $result = i5_execute($stmt);
    if (!$result) {
    echo 'Execute error: ' . i5_errno() . '<br/>Msg: ' . i5_errormsg() . '<br/>';
    die();
    }

    echo '<br><table border=1 cellpadding=5 cellspacing=5>';

    /* Iterate through result set, printing one table line per record returned. */
    while ($row = i5_fetch_array($stmt)) {
    if (!$row=='') {
    echo "<tr><td>$row[0]<td>$row[1]<td>$row[2]<td>$row[3]</td ><td>$row[4]<td>$row[5]<td>$row[6]<td>$row[7].....</td></tr >";
    }
    }

    // Close table
    echo '</table><br>';


    ?>


    Comme le resultset à l'air vide quand j'execute ma page, j'ai déroulé mon sqlrpgle en debug, et c'est la que j'ai vu les messages. J'en ai supposé que le resultset n'était pas bien rempli.
    Et voila ou j'en suis.

  10. #10
    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
    Je n'ai pas Zend Core et, a priori, pas de php non plus sur les machines que j'utilise.

    J'inclus donc ci-dessous donc le code VBA dont je t'ai parlé.
    Ce code fait appel au programme RPG ILE que je t'ai transmis et qui charge arbitrairement les 16 premièrs enregistrements du fichier que tu as choisi dans la DS DSOCC.

    Marche à suivre :

    1. Ouvre un nouveau classeur Excel
    2. Crée un onglet que tu appelles "DSOCC"
    3. Ouvre VB Editor (Alt+F11)
    4. Colle le code VBA dans la fenêtre de droite (sous "General/Declarations")
    5. Modifie ce qui est en rouge dans le code joint
    6. Sauve et exécute par <F8> (debug)
    7. Quand terminé, retourne sur la feuille de calcul et vois si la 1ère colonne de ton fichier est bien affichée en colonne A sur les 16 premières lignes de la feuille.


    Dis-nous ce qui en est.

    VBA
    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
    Option Explicit
    
    Dim Cnn As ADODB.Connection
    Dim Cmd As ADODB.Command
    Dim rs As ADODB.Recordset
    Dim StrSQL As String
    
    Dim Row As Integer
    
    Public Function Get_DSOCC()  ' Appel pgm BIBLIO.MONPGM
    
    Set Cnn = New ADODB.Connection
    
    With Cnn
        .Open "Provider=IBMDA400;Data Source=Adresse_IP_AS400;", "ProfilUSer", "MotDePasse"
    End With
    
    StrSQL = "BIBLIO.PROGRAMME"    'Nom programme AS400 qualifié avec un point
    
    Set Cmd = New ADODB.Command
    Set Cmd.ActiveConnection = Cnn
    Cmd.CommandText = StrSQL
    Cmd.CommandType = adCmdStoredProc
    
    Set rs = New ADODB.Recordset
    Set rs.Source = Cmd
    Row = 0
    
    rs.Open
    While Not rs.EOF
        
        ' Calcule la ligne sur la feuille de calcul
        Row = Row + 1
        ' Affiche la première colonne sur la feuille de calcul
        With Worksheets("DSOCC")
            .Cells(Row, 1).Value = rs(0)
        End With
        
    rs.MoveNext
    Wend
        
    rs.Close
    Cnn.Close
    Set Cnn = Nothing
    Set Cmd = Nothing
    Set rs = Nothing
    End Function

  11. #11
    Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Compile error
    User-defined type not defined

    sur la première ligne Dim Cnn As ADODB.Connection

    quand je fais F8

    Je suis sous vista en excel 2007
    Désolé je ne comprends pas trop le VBA

  12. #12
    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
    je ne suis pas expert VBA non plus.
    Essaie en ajoutant les "New" en rouge sur les DIM.

    Dim Cnn As New ADODB.Connection
    Dim Cmd As New ADODB.Command
    Dim rs As New ADODB.Recordset

  13. #13
    Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Marche toujours pas,

    T'embête pas, je pense que le resultset est vide de toute façon.
    Ca doit être quelque chose sur ma machine ou sur ma base de donnée.

    Merci quand même pour ton aide..

  14. #14
    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
    Perso, je suis sous XP et je sais que Vista fait des misères.

    j'ai testé et le RPG et le VBA sur mon matériel (V5R3 + XP) et ça marche pourtant nickel-chrome !

    En effet, tu dois avoir des blèmes avec ton propre matos ou logiciels.

    @+

  15. #15
    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
    J'y pense maintenant, un peu tard c'est vrai.

    As-tu défini ta procédure stockée avec une instruction SQL CREATE PROCEDURE de ce genre ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE PROCEDURE  MABIB.MAPROSTO
                     LANGUAGE RPGLE
                     MODIFIES SQL DATA
                     RESULT SETS 1
                     EXTERNAL NAME MABIB.MONPROGRAMME
                     PARAMETER STYLE GENERAL
    Est-ce que la procédure marche si tu l'appelles depuis iSeries Navigator ? Pour t'en assurer, va dans Run SQL Scripts et insères-y un

  16. #16
    Membre éclairé Avatar de Peut-êtreUneRéponse
    Homme Profil pro
    IT Specialist - IBM Z
    Inscrit en
    Décembre 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : IT Specialist - IBM Z
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2006
    Messages : 548
    Points : 801
    Points
    801
    Par défaut
    Citation Envoyé par Mercure Voir le message
    je ne suis pas expert VBA non plus.
    Essaie en ajoutant les "New" en rouge sur les DIM.

    Dim Cnn As New ADODB.Connection
    Dim Cmd As New ADODB.Command
    Dim rs As New ADODB.Recordset
    Bonjour,

    En fait il faut rajouter la référence ADO, pour cela dans VBE (l'éditeur Visual Basic) dans la barre d'outils sélectionner Outils > Références et cocher Microsoft ActiveX Data Objects 2.0 Library puis OK

    .

  17. #17
    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
    Mais oui, bon sang, mais c'est bien sûr ! J'avais complètement oublié, caramba !!

    Bonnes fêtes !

    Edit : Merci PeutEtre !

  18. #18
    Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 11
    Points : 2
    Points
    2
    Par défaut
    Hello

    Merci pour tous ces bon conseils.

    Ca marche, j'ai bien un resultset.
    Mais pourquoi j'avais ces messages dans les joblog c'est une autre histoire.

    Bref ca marche pas encore via ma page web, mais c'est un autre problème.
    MERCI pour tout

    A+

Discussions similaires

  1. Cast de set<A> vers set<B> quand A hérite de B
    Par Agoudard dans le forum SL & STL
    Réponses: 7
    Dernier message: 06/04/2011, 07h38
  2. Réponses: 0
    Dernier message: 28/10/2010, 19h00
  3. Réponses: 3
    Dernier message: 29/01/2010, 21h59
  4. Tomcat settings should be set in tomcat preference page
    Par Esil2008 dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 17/11/2009, 22h04
  5. Type "set" et variable "set of" en string ?
    Par phplive dans le forum Langage
    Réponses: 23
    Dernier message: 14/11/2008, 02h18

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