Pas de problème (pb), que du PowerBuilder (PB) ^^

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 03-10-2006 13:30:43

Deedoo2000  
Membre Geek
Date d'inscription: 13-09-2006
Messages: 91
Pépites: 408
Banque: 0

[RESOLU] Variable de retour

Bonjour,

Voici ma problématique :

J'ai une procédure stockée qui a en output une variable de type varchar(255).
Cette procédure est appelée par PB, je l'ai donc ajoutée dans mes local external functions où ma variable output est identifiée avec un "ref" devant.

Voici mon code PB :

Code: pb

  SQLCA.SP_I_CORRESPONDANCE(ls_correspondance, ls_pays_cible, ls_retour)
  commit;
  If ls_retour <> "OK" then MessageBox("Correspondance Pays", ls_retour)

Or la variable ls_retour définie comme un string ne contient pas la chaine de caractères renvoyée par  la proc.

J'ai testé la proc seule et elle renvoie bien la chaine désirée.

Je conclue donc qu'il y a un problème de type de données ?

Pouvez-vous m'en dire plus ?

Merci.

Hors ligne

 

#2 03-10-2006 13:45:11

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 29-05-2006
Messages: 4658
Pépites: 942
Banque: 2,147,483,647
Site web

Re: [RESOLU] Variable de retour

voila comment j'utilise les procédures stockées, avec la variable de retour....

tout d'abord, je declare de cette facon ma procedure stockée...
la variable de retour se trouve directement dans le Select Finale
http://img134.imageshack.us/img134/5607/pcnbjourhb2.jpg

et depuis pb,
le bout de script pour l'appeler :

Code: pb

  // compte le nombre de jours écoulés entre la date d'expiration
  // et la date du moment
  DECLARE nb_jours_expires_maxi PROCEDURE FOR pc_nb_jours_expires
  @nom = :ls_code_user;
  EXECUTE nb_jours_expires_maxi;
  
  IF SQLCA.sqlcode = 0 THEN
    FETCH nb_jours_expires_maxi INTO :li_nb_jours_expires;
  else
    ls_err  = sqlca.sqlerrtext
    CLOSE nb_jours_expires_maxi;
    messagebox("Attention",ls_err)
    return
  END IF

  CLOSE nb_jours_expires_maxi;

Et ca fonctionne bien !!!!!


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

#3 03-10-2006 13:51:46

Deedoo2000  
Membre Geek
Date d'inscription: 13-09-2006
Messages: 91
Pépites: 408
Banque: 0

Re: [RESOLU] Variable de retour

Merci, mais tu n'as pas une idée de pourquoi ça ne marche aps dans mon cas. Sachant que si ma variable de retour est un integer dans Sybase et un long dans PB, ça marche très bien...

Hors ligne

 

#4 03-10-2006 14:05:53

shahin  
Modérateur
Award: bf
Lieu: val de marne
Date d'inscription: 26-09-2006
Messages: 938
Pépites: 8,675,050,269
Banque: 16,218,225,127,617

Re: [RESOLU] Variable de retour

C'est quoi ta base de données ? Sybase ?
Driver natif, Ole db, odbc ?
Pb version ?
OS version ?

Je vois que pick-ouic utilise cast Workbench (excellent outil) et probablement Sybase ASE.

Il faut peut-être reserver l'espace mémoire.
ls_retour = space (255)


D'autre part, il est extrémement important que tu fournisse ta déclaration de SP_I_CORRESPONDANCE

Dernière modification par shahin (03-10-2006 14:12:28)


never let people work on more than one thing at once.

Hors ligne

 

#5 03-10-2006 14:07:27

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 29-05-2006
Messages: 4658
Pépites: 942
Banque: 2,147,483,647
Site web

Re: [RESOLU] Variable de retour

disons donc que je n'ai jamais utilisé ta méthode...avec la valeur de retour dans le REF.....

par contre ma méthode fonctionne à tous les coups....que soit pour un decimal, un string ou autre format.

A Confirmer...


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

#6 03-10-2006 14:09:10

Deedoo2000  
Membre Geek
Date d'inscription: 13-09-2006
Messages: 91
Pépites: 408
Banque: 0

Re: [RESOLU] Variable de retour

shahin a écrit:

C'est quoi ta base de données ? Sybase ?
Driver natif ?

Il faut peut-être reserver l'espace mémoire.
ls_retour = space (255)


D'autre part, il est extrémement important que tu fournisse ta déclaration de SP_I_CORRESPONDANCE

Oui c'est du Syabe 12.5.1

Voila la déclaration :

subroutine SP_I_CORRESPONDANCE(string PAYS_FICHIER,string PAYS_BASE,ref string RETOUR) RPCFUNC ALIAS FOR "dbo.SP_I_CORRESPONDANCE"

Sachant que space(255) ,'arrange pas le problème.

Hors ligne

 

#7 03-10-2006 14:26:48

shahin  
Modérateur
Award: bf
Lieu: val de marne
Date d'inscription: 26-09-2006
Messages: 938
Pépites: 8,675,050,269
Banque: 16,218,225,127,617

Re: [RESOLU] Variable de retour

space(255) n'arrange pas le problème, mais je viens de relire la doc au chapitre "Declaring DBMS stored procedures as remote procedure calls", et c'est obligatoire.
Je croyais que t'avais oublié le mot clef "REF", mais ce n'est pas le cas.

Cependant si ton retour est "Ok" ou "erreur", pas besoin de string utilise un entier (int/long) avec les conventions habituelles 1=ok, -1 =erreur 1, -2=erreur 2, etc ...

Quel est le retour de SQLCA.sqlcode ? A tester en premier.

Code: pb

SQLCA.SP_I_CORRESPONDANCE(ls_correspondance, ls_pays_cible, ls_retour)
IF SQLCA.sqlcode = 0 THEN
   commit;
   If ls_retour <> "OK" then MessageBox("Correspondance Pays", ls_retour)
        messagebox("Error", SQLCA.sqlerrtext)
   Else 
        messagebox("ok", "ok")
   end if
ELSE
        messagebox("Error", SQLCA.sqlerrtext)
END IF

Dernière modification par shahin (03-10-2006 14:30:10)


never let people work on more than one thing at once.

Hors ligne

 

#8 03-10-2006 14:32:59

Deedoo2000  
Membre Geek
Date d'inscription: 13-09-2006
Messages: 91
Pépites: 408
Banque: 0

Re: [RESOLU] Variable de retour

Le SQLCA.sqlcode ne renvoie rien. La procédure seule marche bien, il n'y a pas de soucis. Si je l'éxécute manuellement, je récupère bien mon string.
Mais quand je l'éxécute depuis PB la variable ls_retour est toujours vide, elle ne "passe" pas... C'est bizarre. Alors que avec un integer ça marche très bien.

Hors ligne

 

#9 03-10-2006 14:37:19

shahin  
Modérateur
Award: bf
Lieu: val de marne
Date d'inscription: 26-09-2006
Messages: 938
Pépites: 8,675,050,269
Banque: 16,218,225,127,617

Re: [RESOLU] Variable de retour

Rien ? tu veux dire 0 je suppose ?
Ici j'ai pas ASE (que Oracle) et ne peux pas investiguer plus.
Essaie la méthode de Pick Ouic.


never let people work on more than one thing at once.

Hors ligne

 

#10 03-10-2006 14:39:47

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 29-05-2006
Messages: 4658
Pépites: 942
Banque: 2,147,483,647
Site web

Re: [RESOLU] Variable de retour

c'est pas lié avec une histoire de autocommit à true ?

tu le mets juste avant l'appel de ta proc...
apres , tu le remets comme il etait avant....

enfin, je dis comme ca.... j'en sais pas plus


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

#11 03-10-2006 14:41:53

Deedoo2000  
Membre Geek
Date d'inscription: 13-09-2006
Messages: 91
Pépites: 408
Banque: 0

Re: [RESOLU] Variable de retour

Bon... Vous allez rire...
En fait je faisais pas le space(255) sur la bonne variable...

Merci !

Hors ligne

 

#12 03-10-2006 14:45:11

shahin  
Modérateur
Award: bf
Lieu: val de marne
Date d'inscription: 26-09-2006
Messages: 938
Pépites: 8,675,050,269
Banque: 16,218,225,127,617

Re: [RESOLU] Variable de retour

T'inquiéte pas Deedoo, ça arrive à tout le monde
L'important c'est que ça fonctionne maintenant

Dernière modification par shahin (03-10-2006 14:45:26)


never let people work on more than one thing at once.

Hors ligne

 

#13 03-10-2006 14:50:03

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 29-05-2006
Messages: 4658
Pépites: 942
Banque: 2,147,483,647
Site web

Re: [RESOLU] Variable de retour

pas grave, tu me devras juste un menu maxi best of....


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22