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 :

SQL CLI: sqlBindCol(: SQL_NUMERIC:) -> sqlFetch() -> MCH5003


Sujet :

AS/400

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 33
    Points : 27
    Points
    27
    Par défaut SQL CLI: sqlBindCol(: SQL_NUMERIC:) -> sqlFetch() -> MCH5003
    Bonjour,

    Voici quelques temps que j'obtiens une erreur système, MCH5003, sans jamais êtres parvenus à identifier la cause et donc de corriger le problème.

    En effet j'utilise les APIs SQL CLI en RPG ile pour éviter d'écrire en SQLRPGLE.
    Tant que mes champs sélectionnés sont de type caractère (SQL_CHAR) aucun problème mais dès que je souhaite faire un select sur un champs numérique étendu (SQL_NUMERIC) j'obtiens un MCH5003 lors du fetch de la requête!

    Si quelqu'un a déjà été confronté a ce problème et qu'il connaisse un moyen autre que de convertir ce champ en caractère, je serais heureux d'avoir un peu d'aide.

    Par avance merci beaucoup.

  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
    Colle ici stp toute l'instruction SQLBindCol et la totalité de l'instruction Fetch avec les définitions RPG des zones fetchées.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 33
    Points : 27
    Points
    27
    Par défaut
    Je pense que je suis sur une piste. Cela concerne la manière de documenter les paramètres de la fonction SQLBindCol(). En fait il faut indiquer à la fois la partie entière et fractionnaire de la zone qui reçoit les données du Fetch pour une zone numérique.

    La valeur de ces paramètres est issue du petit calcul décrit à l'url suivante:

    http://www-03.ibm.com/systems/i/soft...b2/clifaq.html
    à la rubrique Working with DECIMAL and NUMERIC Column Types

    Je testerais demain @+.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 33
    Points : 27
    Points
    27
    Par défaut
    Salut Mercure,

    Apparemment je ne sait pas exploiter la piste.

    Voici une partie du 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
    /*---*/
    Variables fetchées :
    
    d SrcSeq          s              6s 0                               
    d rlength1        s                         Like(SQLINTEGER_t)      
     *                                                                  
    d SrcDate         s              6s 0                               
    d rlength2        s                         Like(SQLINTEGER_t)      
     *                                                                  
    d SrcCode         s            120a                                 
    d rlength3        s                         Like(SQLINTEGER_t)      
    
    
    SqlBind :
    
    c                   Eval      rlength1 = 256 * %Size(SrcSeq)           
    c                   If        SQLBindCol(hstmt:                        
    c                             1:                                       
    c                             SQL_NUMERIC:                             
    c                             %addr(SrcSeq):                           
    c                             %Size(SrcSeq):                           
    c                             %Addr(rlength1)) = SQL_SUCCESS           
     *                                                                     
    c                   Eval      rlength2 = 256 * %Size(SrcDate)          
    c                   If        SQLBindCol(hstmt:                        
    c                                        2:                            
    c                                        SQL_NUMERIC:                  
    c                                        %addr(SrcDate):               
    c                                        %Size(SrcDate):               
    c                                        %Addr(rlength2)) = SQL_SUCCESS
     *                                                                     
    c                   Eval      rlength3 = 0                             
    c                   If        SQLBindCol(hstmt:                        
    c                                        3:                            
    c                                        SQL_CHAR:                     
    c                                        %addr(SrcCode):               
    c                                        %Size(SrcCode):               
    c                                        %Addr(rlength3)) = SQL_SUCCESS
    
    Fetch :
    
    c                   DoW       SQLFetch(hstmt) = SQL_SUCCESS 
    /*---*/
    Merci pour ton aide.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 33
    Points : 27
    Points
    27
    Par défaut
    Bonjour,

    ça y est, ça marche, j'avais inversé le calcul du 5ièm et 6ièm paramettre et le SQLBindCol se fait comme ça maintenant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    c                   Eval      rlength1   = %Size(SrcSeq)               
    c                   If        SQLBindCol(hstmt:                        
    c                                        1:                            
    c                                        SQL_NUMERIC:                  
    c                                        %addr(SrcSeq):                
    c                                        256 * %Size(SrcSeq):                   
    c                                        %Addr(rlength1)) = SQL_SUCCESS
    Kiko.

  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
    Tu ferais bien d'écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    c                   If        SQLBindCol(hstmt:                        
    c                                        1:                            
    c                                        SQL_NUMERIC:                  
    c                                        %addr(SrcSeq):                
    c                                        %Len(SrcSeq) * 256 + %DecPos(SrcSeq):
    au lieu de
    car un jour ou l'autre, tu tomberas sur une zone qui contiendra des décimales.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 33
    Points : 27
    Points
    27
    Par défaut
    Salut,

    merci du conseil, effectivement le %Len et plus précis pour une zone packé ainsi que le %DecPos pour ne pas oublier des petits en route.

    Une question concenant la fonction QSLBindCol() que je trouve fastidieuse lorsqu'il y a une trentaine de zones a Binder, y à t-il un moyen d'avoir une meilleure visibilité au niveau du code car le FETCH INTO du SQLRPGLE est bien meilleur sur ce plan là je trouve (?).

    Kiko.

  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
    Citation Envoyé par Kiko93
    ... y à t-il un moyen d'avoir une meilleure visibilité au niveau du code ...
    Pas que je sache.

  9. #9
    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
    Citation Envoyé par Kiko93 Voir le message
    Salut,

    merci du conseil, effectivement le %Len et plus précis pour une zone packé ainsi que le %DecPos pour ne pas oublier des petits en route.

    Une question concenant la fonction QSLBindCol() que je trouve fastidieuse lorsqu'il y a une trentaine de zones a Binder, y à t-il un moyen d'avoir une meilleure visibilité au niveau du code car le FETCH INTO du SQLRPGLE est bien meilleur sur ce plan là je trouve (?).

    Kiko.
    Question :

    Dans quel cas utilises-tu le SQLCLI :
    - Pour lire des résults sets ?
    - Pour lire une autre base que DB2 à travers une driver JDBC ?
    - ... ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [SQL-Server] Erreur de segmentation, connexion PHP CLI et SQL Server
    Par marcandre dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/05/2015, 16h11
  2. [C++/CLI][ADO.NET] INTERFACE BDD SQL SERVER
    Par orames dans le forum VC++ .NET
    Réponses: 1
    Dernier message: 02/10/2012, 15h24
  3. SQL avec C++/CLI
    Par BOUBOU81 dans le forum C++/CLI
    Réponses: 2
    Dernier message: 01/08/2006, 08h20
  4. Réponses: 5
    Dernier message: 16/02/2006, 21h07

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