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

Powerbuilder Discussion :

[PowerBuilder 10] Procédure stockée sous SQL Server 2000


Sujet :

Powerbuilder

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 116
    Points : 67
    Points
    67
    Par défaut [PowerBuilder 10] Procédure stockée sous SQL Server 2000
    Bonjour, j'utilise PowerBuilder 10 de puis un mois maintenat. J'ai créé une procédure stockée en SQL Server 2000 auquel je me connecte via ODBC en passant par SQLCA. j'ai créé une procédure stockée qui met à jour une table et renvoie un entier.

    Comment je fais en powerBuilder pour Exécuter la procédure et récupérer la valeur de rétour dans une variable antière ?

    Merci pour votre aide

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 108
    Points : 97
    Points
    97
    Par défaut
    Bonjour

    Essaye quelque chose comme ca :

    // --- Declaration de la proc stock
    DECLARE maProcStock PROCEDURE FOR maProcStock
    @var_in_1 = :l_var_in_1,
    @var_in_n: = :l_var_in_n,
    @var_out_n: = :l_var_out_n, output ;

    // --- lancement du traitement
    EXECUTE maProcStock;

    // --- détection d'erreur à l'execution de la proc
    IF SQLCA.sqlCode <> 0
    CLOSE maProcStock;
    Return -1
    END IF

    // --- récupération des paramètres mis en output ou renvoyer par return de la proc
    DO WHILE SQLCA.SQLCODE = 0
    FETCH maProcStock INTO :l_var_out_n;
    LOOP

    IF SQLCA.SQLCODE = -1 THEN
    // --- erreur sur la récupération des données
    CLOSE maProcStock;
    RETURN -1
    END IF

    CLOSE maProcStock;

    ...

    A+ Thig

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 116
    Points : 67
    Points
    67
    Par défaut
    Merci Thig !

    J'ai écri le code, mais il me génère l'érreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SQLSTATE = 22005
    [Microsoft][ODBC SQL Server Driver]Valeur de caractère non valide pour la spécification de la casse
    Je ne comprends rien, pck ma procédure stockée parche bien dans l'analyseur de requête SQL Serveur.

    Voici ma procédure stockée :

    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
    
    ALTER    PROCEDURE dbo.GetSequence
    (
       @Tablename varchar(255),
       @CurrentValue int OUTPUT
    )
    AS
    
    --DECLARE @CurrentValue int
    
    
    BEGIN TRANSACTION LaTransaction
    
    SET @CurrentValue = (SELECT ncurrentvalue FROM Tsequence WHERE ltablename = @Tablename)
    
    SET @CurrentValue = @CurrentValue + 1
    
    UPDATE Tsequence SET ncurrentvalue = @CurrentValue,dmodified = GETDATE() WHERE ltablename = @Tablename
    
    SELECT @CurrentValue
    
    if @@error <> 0
        ROLLBACK TRANSACTION LaTransaction
    ELSE
        COMMIT TRANSACTION LaTransaction
    
    GO
    Mon code PowerScript :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    string ls_tablename='Category'
    long ll_currentvalue,ll_result
    
    DECLARE GetSequence PROCEDURE FOR dbo.GetSequence
    
    @tablename = :ls_tablename,
        @currentvalue = :ll_currentvalue OUTPUT;
    
    EXECUTE  GetSequence;
    
    Messagebox("Valeur retournée",string(SQLCA.SQLErrText))
    
    Messagebox("Valeur retournée",string(ll_currentvalue))

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 108
    Points : 97
    Points
    97
    Par défaut
    SQLCA.sqlErrText contient le message d'erreur envoyé par la base (en cas d'erreur uniquement).

    Pour récupérer le paramètre currentValue il faut faire au moins un fecth.

    Au minimun :

    long ll_currentValue = 0

    DECLARE ...

    EXECUTE ...

    fecth getSequence into :ll_currentValue;

    CLOSE ...

    Il est possible de voir ce que Pb envoie à la base en utilisant le fichier de trace des ordres SQL ( voir menu System Option )

  5. #5
    Membre du Club
    Inscrit en
    Novembre 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 116
    Points : 67
    Points
    67
    Par défaut
    Thig, je tiens d'abord à te remercier pour l'attention que tu m'accorde.

    Le problème réside justement dans le fait que SQLCA.SQLCODE vaut -1 donc il y a erreur dans l'exécution de la commande, et c'est l'erreur que j'ai affichée plus haut. Mon problème c'est que je ne sais vraiment pas comment résoudre ce problème.

    Merci bcp !

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 108
    Points : 97
    Points
    97
    Par défaut
    merci...

    Je ne connais pas l'erreur 22005, c'est quoi le message complet ?( on le voit pas )

    Thig

  7. #7
    Membre du Club
    Inscrit en
    Novembre 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 116
    Points : 67
    Points
    67
    Par défaut
    Le message d'erreur c'est celui là :


    SQLSTATE = 22005
    [Microsoft][ODBC SQL Server Driver]
    Valeur de caractère non valide
    pour la spécification de la casse
    c'est celui-là justement que j'ai repris dans mon message plus haut.

    merci !

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 108
    Points : 97
    Points
    97
    Par défaut
    Bonjour

    C'est peut être un problème de configuration de la connection ODBC avec SQLServeur...

    Essaye d'ajouter au paramètre SQLCA.DBParm = "StripParmNames='Yes'"

    Thig

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 56
    Points : 67
    Points
    67
    Par défaut Apparemment problème ODBC
    Apparemment, c'est un problème lié à ODBC.
    Si tu as la version entreprise utilise OLE DB ou ado.net.

    Si tu as la version pro, il faut contacter Sybase

Discussions similaires

  1. Procédure stockée sous SQL Server et MS access
    Par mfofana dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 02/04/2011, 00h15
  2. Debug de procédure stockée sous SQL Server 2005
    Par verbal34 dans le forum Développement
    Réponses: 0
    Dernier message: 29/09/2009, 17h29
  3. Exécution d'une procédure stockée sous sql server 2000
    Par amirad dans le forum Développement
    Réponses: 2
    Dernier message: 27/04/2009, 09h50
  4. Problème de procédure stockée sous SQL Server 2000.
    Par FabienDev dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 01/07/2008, 16h26

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