Quoi, tu ne connais pas PB ? Va falloir parcourir tout le forum alors !

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 27-04-2007 08:17:10

Eric06  
Membre
Date d'inscription: 29-03-2007
Messages: 18
Pépites: 89
Banque: 0

[RESOLU] procedure stockee SqlServer et pb 10.5

J'essaye d'appeler une procedure stockée depuis PB et je n'y arrive pas.
Cote BDD j'ai :

Code: mssql

CREATE PROCEDURE kone.sp_set_num_devis 
  -- Add the parameters for the stored procedure here
  @Agence varchar(6) OUTPUT,
   @Devis varchar(4) OUTPUT,
  @Vers varchar(1)  OUTPUT,
  @Cprofit varchar(6),
  @coderetour int OUTPUT,
  @retour varchar(255) OUTPUT
BEGIN
     --blabla
    SELECT @Agence,@Devis,@Vers,@coderetour,@retour 
  return
END

Coté PB :

Code: pb

    ls_retour=''
    DECLARE p_set_num_devis PROCEDURE FOR kone.sp_set_num_devis 
      ( @Agence= :is_devis_ag  OUTPUT
      , @Devis = :is_devis_no 
      , @Vers = :is_devis_vers 
      , @Cprofit = :ls_centreProfit 
      , @coderetour = :ll_coderetour 
      , @retour = :ls_retour )    USING SQLCA;
  
    EXECUTE  p_set_num_devis ;    
    
    IF SQLCA.sqlcode = 0 THEN
      FETCH p_set_num_devis INTO :ls_devis_ag,:ls_devis_no,:ls_devis_vers,:ll_coderetour,:ls_retour;
    ELSE
      gnv_app.inv_error.of_message("EDS-004")
      Close(w_maj_donnees)
      return -1
    END IF
    
    CLOSE p_set_num_devis;


Pb m'empeche de specifier OUTPUT au niveau des parametres :

C0038 : SQLSTATE =37000 Microsoft ODBC SQL Server Driver Impossible d'utiliserl'option OUTPUT pour passer une constante à une procedure stockee.

Et sans cet output, quand j'execute mon programme j'ai l'erreur suivante : type mismatch between retrieve columns and fetch columns.

Au niveau acces BDD, je passe par ODBC avec al connect string suivvante :

Code: pb

DBParm = "ConnectString='DSN=;UID=;PWD=',DisableBind=1,CommitOnDisconnect='Yes',DelimitIdentifier='No',MsgTerse='Yes',CallEscape='No',FormatArgsAsExp='N'"


J'ai absolument besoin de cette procedure stockee.
Je craque  ;-)

merci pour votre aide

[edit] http://pbadonf.fr/forum/img/puntoolbar/smooth/bt_pre.png [ code=mssql ] [ code=pb]

Hors ligne

 

#2 27-04-2007 08:36:09

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [RESOLU] procedure stockee SqlServer et pb 10.5

salut, t'es sûr qu'il faut des parenthèses dans ta déclaration :

Code: pb

 DECLARE p_set_num_devis PROCEDURE FOR kone.sp_set_num_devis 
     ***(*** @Agence= :is_devis_ag  OUTPUT
      , @Devis = :is_devis_no 
      , @Vers = :is_devis_vers 
      , @Cprofit = :ls_centreProfit 
      , @coderetour = :ll_coderetour 
      , @retour = :ls_retour ***)***    USING SQLCA;

N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#3 27-04-2007 08:43:09

Eric06  
Membre
Date d'inscription: 29-03-2007
Messages: 18
Pépites: 89
Banque: 0

Re: [RESOLU] procedure stockee SqlServer et pb 10.5

j'ai essaye avec et sans parenthese, mem resultat.
J'aie ssaye egalement d'enlever les "@Agence =" sans succes.
Je suis en train de tester un appel de procedure sans parametre et lors d el'execute j'ai un sqlcode=100 comme si il ne trouvait pas la proc stoc.

Hors ligne

 

#4 27-04-2007 08:57:58

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2486
Pépites: 85
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] procedure stockee SqlServer et pb 10.5

Bonjour,

Et comme ça, ce ne serait pas mieux?

Code: pb

    ls_retour=''
    DECLARE p_set_num_devis PROCEDURE FOR kone.sp_set_num_devis 
      @Agence= :is_devis_ag  OUTPUT, 
      @Devis = :is_devis_no OUTPUT,
      @Vers = :is_devis_vers OUTPUT,
      @Cprofit = :ls_centreProfit,
      @coderetour = :ll_coderetour OUTPUT,
      @retour = :ls_retour OUTPUT
    USING SQLCA;
  
    EXECUTE  p_set_num_devis ;    
    
    IF SQLCA.sqlcode = 0 THEN
      FETCH p_set_num_devis  INTO :ls_devis_ag,:ls_devis_no,:ls_devis_vers,:ll_coderetour,:ls_retour;
    ELSE
      gnv_app.inv_error.of_message("EDS-004")
      Close(w_maj_donnees)
      return -1
    END IF
    
    CLOSE p_set_num_devis;


NB: Normalement, le sqlcode 100 correspond au code retour "NO DATA FOUND" pour une requête SQL ou une procédure


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#5 27-04-2007 09:27:07

Eric06  
Membre
Date d'inscription: 29-03-2007
Messages: 18
Pépites: 89
Banque: 0

Re: [RESOLU] procedure stockee SqlServer et pb 10.5

avec ton code, j'ai le message suivant  lors de la sauvegarde de mon code :
C0038 : SQLSTATE =37000 Microsoft ODBC SQL Server Driver Impossible d'utiliserl'option OUTPUT pour passer une constante à une procedure stockée

Hors ligne

 

#6 27-04-2007 09:35:26

inferni  
Membre Geek
Lieu: Orléans
Date d'inscription: 28-02-2007
Messages: 52
Pépites: 49
Banque: 2,337,704,263,781

Re: [RESOLU] procedure stockee SqlServer et pb 10.5

essaie avec juste OUT

Hors ligne

 

#7 27-04-2007 10:09:51

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2486
Pépites: 85
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] procedure stockee SqlServer et pb 10.5

Arrêtes-moi si je me trompe, mais tu n'aurais pas fait une erreur au niveau du passage des variables:

Tu passes :is_devis_ag, et tu fetches dans :ls_devis_ag par exemple.
Ce sont des paramètres exclusivement en OUTPUT, ou en INPUT/OUTPUT?


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#8 27-04-2007 11:47:51

Eric06  
Membre
Date d'inscription: 29-03-2007
Messages: 18
Pépites: 89
Banque: 0

Re: [RESOLU] procedure stockee SqlServer et pb 10.5

en fait je passe @Agence,@Devis,@Vers,@Cprofit   à ma proc stock qui va faire son traitement et qui me renvoie agence,devis et vers (dont les valeurs sont modifiées).
je m'y prends peut etre mal effectivement. Comment je lui indique  que c'est du input/output ?

Hors ligne

 

#9 27-04-2007 11:51:00

Eric06  
Membre
Date d'inscription: 29-03-2007
Messages: 18
Pépites: 89
Banque: 0

Re: [RESOLU] procedure stockee SqlServer et pb 10.5

Inferni, avec le OUT mememessage d'erreur

Hors ligne

 

#10 27-04-2007 12:01:02

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [RESOLU] procedure stockee SqlServer et pb 10.5

Eric06 a écrit:

en fait je passe @Agence,@Devis,@Vers,@Cprofit   à ma proc stock qui va faire son traitement et qui me renvoie agence,devis et vers (dont les valeurs sont modifiées).
je m'y prends peut etre mal effectivement. Comment je lui indique  que c'est du input/output ?

en oracle c'est INOUT, ça doit être ça aussi en SQL Server


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#11 27-04-2007 12:32:35

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2486
Pépites: 85
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] procedure stockee SqlServer et pb 10.5

Bon, alors en Oracle, pour PB 9 (Je sais pas pour PB10.5, mais je pense que ça n'a pas changé) il n'est pas possible de gérer les paramètres en IN/OUT via le traditionnel "DECLARE ... EXECUTE" : Il faut obligatoirement déclarer une RPCFUNC.

Pour SQLServer, je n'ai jamais eu à gérer ce cas de figure et je ne suis pas sûr que le IN/OUT soit réellement supporté. (L'aide PB est muette à ce propos)

Je te propose donc de tester deux solutions (Je suis sous ORACLE, et donc je ne peux pas le faire moi-même ):

1ère option:

Utiliser uniquement des variables locales pour passer les paramètres (Pour vérifier que ça ne vienne pas de tes variables d'instance, mais j'en doute):

Code: pb

String ls_devis_ag, ls_devis_no, ls_devis_vers, ls_retour
Long  ll_coderetour

    ls_retour=''
ls_devis_ag = is_devis_ag
ls_devis_no = is_devis_no
ls_devis_vers = is_devis_vers


    DECLARE p_set_num_devis PROCEDURE FOR kone.sp_set_num_devis 
      @Agence= :ls_devis_ag  OUTPUT, 
      @Devis = :ls_devis_no OUTPUT,
      @Vers = :ls_devis_vers OUTPUT,
      @Cprofit = :ls_centreProfit,
      @coderetour = :ll_coderetour OUTPUT,
      @retour = :ls_retour OUTPUT
    USING SQLCA;
  
    EXECUTE  p_set_num_devis ;    
    
    IF SQLCA.sqlcode = 0 THEN
      FETCH p_set_num_devis  INTO :ls_devis_ag,:ls_devis_no,:ls_devis_vers,:ll_coderetour,:ls_retour;
    ELSE
      gnv_app.inv_error.of_message("EDS-004")
      Close(w_maj_donnees)
      return -1
    END IF
    
    CLOSE p_set_num_devis;

2ème option: Dupliquer les paramètres au niveau de ta procédure stockée sous SQLServer:

Code: mssql

CREATE PROCEDURE kone.sp_set_num_devis 
  -- Add the parameters for the stored procedure here
@Agence varchar(6),
   @Devis varchar(4),
  @Vers varchar(1),
  @Agence_ret varchar(6) OUTPUT,
   @Devis_ret varchar(4) OUTPUT,
  @Vers_ret varchar(1)  OUTPUT,
  @Cprofit varchar(6),
  @coderetour int OUTPUT,
  @retour varchar(255) OUTPUT
BEGIN
     --blabla
    SELECT @Agence,@Devis,@Vers,@coderetour,@retour 
  return
END

Dans ce cas, il te faudra, bien évidemment, modifier ton DECLARE en conséquence dans PB:

Code: pb

String ls_devis_ag, ls_devis_no, ls_devis_vers, ls_retour
Long  ll_coderetour

    DECLARE p_set_num_devis PROCEDURE FOR kone.sp_set_num_devis 
      @Agence= :is_devis_ag, 
      @Devis = :is_devis_no,
      @Vers = :is_devis_vers, 
      @Agence_ret= :ls_devis_ag  OUTPUT, 
      @Devis_ret = :ls_devis_no OUTPUT,
      @Vers_ret = :ls_devis_vers OUTPUT,
      @Cprofit = :ls_centreProfit,
      @coderetour = :ll_coderetour OUTPUT,
      @retour = :ls_retour OUTPUT
    USING SQLCA;
  
    EXECUTE  p_set_num_devis ;    
    
    IF SQLCA.sqlcode = 0 THEN
      FETCH p_set_num_devis  INTO :ls_devis_ag,:ls_devis_no,:ls_devis_vers,:ll_coderetour,:ls_retour;
    ELSE
      gnv_app.inv_error.of_message("EDS-004")
      Close(w_maj_donnees)
      return -1
    END IF
    
    CLOSE p_set_num_devis;

Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#12 27-04-2007 14:04:40

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [RESOLU] procedure stockee SqlServer et pb 10.5

foon a écrit:

1ère option:

Utiliser uniquement des variables locales pour passer les paramètres (Pour vérifier que ça ne vienne pas de tes variables d'instance, mais j'en doute):

je ne pense pas non plus que ça soit la cause, j'ai des scripts SQL embarqués avec des :inv_objet.is_pte qui marchent bien. (mais ne sait-on jamais avec des procédures en SQL server... ?)


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#13 27-04-2007 14:16:50

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2486
Pépites: 85
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] procedure stockee SqlServer et pb 10.5

C'est vrai, j'avais mis ça pour le cas où les string is_devis_ag et autres auraient été des constantes, mais dans ce cas, elles auraient été nommées différemment.
C'est le message d'erreur ODBC qui m'a fait penser à cette hypothèse...


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#14 27-04-2007 14:23:54

Eric06  
Membre
Date d'inscription: 29-03-2007
Messages: 18
Pépites: 89
Banque: 0

Re: [RESOLU] procedure stockee SqlServer et pb 10.5

J'ai testé les 2 solutions mais j'ai toujours le message C0038 : SQLSTATE =37000 Microsoft ODBC SQL Server Driver Impossible d'utiliserl'option OUTPUT pour passer une constante à une procedure stockée 
qui me bloque.
Je confirme le INOUT n'est pas supporte
je vais tester RPCFUNC et je vous tiens au courant.
merci pour votre aide

Hors ligne

 

#15 27-04-2007 14:44:01

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2486
Pépites: 85
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] procedure stockee SqlServer et pb 10.5

Une autre hypothèse à tester si le RPCFUNC ne marche pas: L'ordre de déclaration des paramètres IN et OUT:

Code: mssql

CREATE PROCEDURE kone.sp_set_num_devis 
  -- Add the parameters for the stored procedure here
@Agence varchar(6),
   @Devis varchar(4),
  @Vers varchar(1),
 @Cprofit varchar(6),
  @Agence_ret varchar(6) OUTPUT,
   @Devis_ret varchar(4) OUTPUT,
  @Vers_ret varchar(1)  OUTPUT,
  @coderetour int OUTPUT,
  @retour varchar(255) OUTPUT
BEGIN
     --blabla
    SELECT @Agence,@Devis,@Vers,@coderetour,@retour 
  return
END


Et en PB:

Code: pb

String ls_devis_ag, ls_devis_no, ls_devis_vers, ls_retour
Long  ll_coderetour

    DECLARE p_set_num_devis PROCEDURE FOR kone.sp_set_num_devis 
      @Agence= :is_devis_ag, 
      @Devis = :is_devis_no,
      @Vers = :is_devis_vers, 
      @Cprofit = :ls_centreProfit,
      @Agence_ret= :ls_devis_ag  OUTPUT, 
      @Devis_ret = :ls_devis_no OUTPUT,
      @Vers_ret = :ls_devis_vers OUTPUT,
      @coderetour = :ll_coderetour OUTPUT,
      @retour = :ls_retour OUTPUT
    USING SQLCA;
  
    EXECUTE  p_set_num_devis ;    
    
    IF SQLCA.sqlcode = 0 THEN
      FETCH p_set_num_devis  INTO :ls_devis_ag,:ls_devis_no,:ls_devis_vers,:ll_coderetour,:ls_retour;
    ELSE
      gnv_app.inv_error.of_message("EDS-004")
      Close(w_maj_donnees)
      return -1
    END IF
    
    CLOSE p_set_num_devis;

Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#16 28-04-2007 08:57:10

Eric06  
Membre
Date d'inscription: 29-03-2007
Messages: 18
Pépites: 89
Banque: 0

Re: [RESOLU] procedure stockee SqlServer et pb 10.5

et bien le rpcfunc fonctionne tres bien. Je vais donc l'utiliser adonf ;-)
Merci pour votre aide.
J'espere pouvoir repondre bientot a certaines questions des autres membres.
bon week end

Hors ligne

 

#17 28-04-2007 09:08:20

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [RESOLU] procedure stockee SqlServer et pb 10.5

Eric06 a écrit:

et bien le rpcfunc fonctionne tres bien. Je vais donc l'utiliser adonf ;-)

J'espere pouvoir repondre bientot a certaines questions des autres membres.
bon week end

oui, pour commencer, c'est quoi le code de déclaration et d'appel en rpcfunc de ton exemple ?


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#18 03-05-2007 11:14:32

PB2  
Membre Geek
Date d'inscription: 05-06-2006
Messages: 36
Pépites: 280
Banque: 0

Re: [RESOLU] procedure stockee SqlServer et pb 10.5

Bonjour,

PB ne sais pas récupérer les paramètres en OUTPUT d'une procédure stockée (ou plutot je n'ai jamais réussi à le faire depuis des années).

Dans ce cas précis, on n'a pas besoin de paramètres en OUTPUT. La procédure peut être réécrite comme suit:

Code: mssql

CREATE PROCEDURE kone.sp_set_num_devis 
  -- Add the parameters for the stored procedure here
  @Cprofit varchar(6)

BEGIN
   /* déclarer les variables de retour */
   Declare @Agence varchar(6),
   Declare @Devis varchar(4),
   Declare @Vers varchar(1),
   Declare @coderetour int,
   Declare @retour varchar(255)

   /* Renseigner les variables de retours */
   Select @Agence = ....
   --blabla

   /* Retourner les valeurs */
    SELECT @Agence, @Devis, @Vers, @coderetour, @retour 
  return
END


Coté PB :

Code: pb

    ls_retour=''
    DECLARE p_set_num_devis PROCEDURE FOR kone.sp_set_num_devis 
      ( @Cprofit = :ls_centreProfit )    USING SQLCA;
  
    EXECUTE  p_set_num_devis ;    
    
    IF SQLCA.sqlDBcode = 0 THEN
      FETCH p_set_num_devis INTO :ls_devis_ag, :ls_devis_no, :ls_devis_vers, :ll_coderetour, :ls_retour;
    ELSE
      gnv_app.inv_error.of_message("EDS-004")
      Close(w_maj_donnees)
      return -1
    END IF
    
    CLOSE p_set_num_devis;

Je n'ai pas testé mais ça devrait marcher.
Tiens moi au courant.

A+

Hors ligne

 

#19 25-07-2007 16:20:51

Eric06  
Membre
Date d'inscription: 29-03-2007
Messages: 18
Pépites: 89
Banque: 0

Re: [RESOLU] procedure stockee SqlServer et pb 10.5

Perfecto. Cela focntionne tres bien.

Desole pour le long retard dans ma reponse.
;-)

merci beaucoup en tout cas

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22