Après windows pour les nuls, voici PB pour les bons (ou presque).

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 19-01-2007 13:48:51

digital prophecy  
Membre Geek
Date d'inscription: 29-05-2006
Messages: 55
Pépites: 310
Banque: 0

ODBC + Notion de curseur (Je ne sais par où commencer)

Bonjour,

j'ai une situation avec une procédure stockée. j'appelle ma procédure stockée à partir de PB, et tout marche sans problème, mais cela n'est pas fait dans les règles de l'art. Je m'explique.

Ma procédure stockée (SQL Server 2000) retourne une valeur. lorsque je met le mot clé "return" dans ma procédure, powerbuilder me retourne un message comme koi "Cursor is not open", C'est seulement lorsque je met le mot mot clé select devant la variable à retourner que ça marche.

J'aimerai avoir un peu de lumière par rapport à ce message "Cursor is not open" et voir comment je peux faire fonctionner ma procédure stockée sans difficultés.

voici mon code ci-dessous, du moins, celui qui marche, pour que vous puissier m'aider à l'optimiser et à le rendre présentable.

La procédure Stockée :

Code: mssql

ALTER    procedure usp_GetNewSeqVal
      @SeqName nvarchar(255)
as
begin
      declare @NewSeqVal int

      set NOCOUNT ON

      update AllSequences

      set @NewSeqVal = CurrVal = CurrVal+Incr

      where SeqName = @SeqName

    
      if @@rowcount = 0 begin

print 'Sequence does not exist'
         return
      end

      select @NewSeqVal
end

Son Appel dans PB

Code: pb

string ls_err
long ll_currentvalue  
ll_currentvalue = 0

DECLARE proc_GetSequence PROCEDURE FOR dbo.usp_GetNewSeqVal
@SeqName = :is_tablename; //variable d'instance contenant le nom de la table
EXECUTE  proc_GetSequence;

    FETCH proc_GetSequence INTO :ll_currentvalue;

    ls_err    = sqlca.sqlerrtext
    CLOSE proc_GetSequence ;
   
     if SQLCA.sqlcode <> 0 THEN     
        messagebox("Erreur",ls_err)
    END IF
    
CLOSE proc_GetSequence ;

Hors ligne

 

#2 19-01-2007 14:51:40

wazou1812  
Modératrice
Award: bf
Date d'inscription: 24-05-2006
Messages: 610
Pépites: 2,097
Banque: 3,536,631,712,504

Re: ODBC + Notion de curseur (Je ne sais par où commencer)

Bonjour,

Tu ne dois par faire le close après le fetch, mais uniquement si il y a une erreur (et normalement il faut arreter le traitement en cours) ou à la fin lorsque tout c'est bien passé.

Hors ligne

 

#3 19-01-2007 15:26:12

thezerg  
Modérateur
Award: calimero
Lieu: Bordeaux
Date d'inscription: 12-09-2006
Messages: 966
Pépites: 22,449
Banque: 154,120,629,477,379,100

Re: ODBC + Notion de curseur (Je ne sais par où commencer)

Avec ton code tu passe deux fois de suite par CLOSE proc_GetSequence ; est-ce normal?

Hors ligne

 

#4 16-08-2011 12:41:20

bo10ka  
Membre
Date d'inscription: 14-04-2011
Messages: 14
Pépites: 50
Banque: 0

Re: ODBC + Notion de curseur (Je ne sais par où commencer)

Quelqu'un a déjà trouvé la solution à ce problème?

Hors ligne

 

#5 02-09-2011 14:55:11

Yanis  
Modérateur
Lieu: paris
Date d'inscription: 16-06-2010
Messages: 349
Pépites: 665
Banque: 150

Re: ODBC + Notion de curseur (Je ne sais par où commencer)

Bonjour,
    Le problème est du au fait de l'utilisation du FETCH alors que sa procédure ne génère pas de result set. return @NewSeqVal

    Le fait d'effectuer un select @NewSeqVal a eu pour effet de générer un result set donc on peut dans ce cas utliser la fonction FETCH dans le script PB.

Cdt
Yanis

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22