Powerbuilder pour les completement Geeks !

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 31-05-2006 05:37:02

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

[RESOLU] Appel d'une procédure stockée

Bonjour à tous !

J'ai écrit une procédure stockée en SQL Server. Ma procédure prends deux paramètres et en retourne un après une sélection, une mise à jour et une sélection dans différentes tables de ma base de données. Le problème, c'est qu'à l'appel de ma procédure j'ai un message d'erreur :

Code:

SQLSTATE = 22005
[Microsoft][ODBC SQL Server Driver]Valeur de caractère non valide pour la spécification de la casse

Hors ligne

 

#2 31-05-2006 07:58:08

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] Appel d'une procédure stockée

histoire d'y voir un peu plus clair...
tu peux détailler ta procedure ?
et ainsi que l'appel de ta procédure depuis powerbuilder ?


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

Hors ligne

 

#3 01-06-2006 13:14:26

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

Re: [RESOLU] Appel d'une procédure stockée

Merci beaucoup Pick ouic pour ton aussi prompte réaction. et je m'excuse d'avoir trainer à te passer ce code. tout en espérant trouver de l'aide :

Le code powerbuilder est :

Code: pb

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))

la procédure stockée SQL Server est :

Code: mssql

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

Hors ligne

 

#4 01-06-2006 13:49:13

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] Appel d'une procédure stockée

yoh !

pourquoi l'appel passe par dbo.xxx  ?
et je me demandais s'il y avait aussi une importance entre le majuscule et le minuscule

en pb , tu mets :

Code: pb

@tablename = :ls_tablename,
@currentvalue = :ll_currentvalue OUTPUT;

alors que ta procedure stockée est declarée en majuscule :

Code: mssql

(
   @Tablename varchar(255),
   @CurrentValue int OUTPUT
)

sinon, essayes voir ce code ci...
Si ca ne marche pas ,enleves le teste du SQLCA.SQLCODE, vu que tu fais des rollback ou commit dans ta proc...

Code: pb

string ls_tablename='Category'
string ls_err
long ll_currentvalue,ll_result

DECLARE proc_GetSequence PROCEDURE FOR dbo.GetSequence
@tablename = :ls_tablename;
EXECUTE  proc_GetSequence;

IF SQLCA.sqlcode = 0 THEN
  FETCH proc_GetSequence INTO :ll_currentvalue;
else
  ls_err  = sqlca.sqlerrtext
  CLOSE proc_GetSequence ;
  messagebox("Attention",ls_err)
  return
END IF

CLOSE proc_GetSequence ;
Messagebox("Valeur retournée",string(ll_currentvalue))

Code: mssql

ALTER    PROCEDURE dbo.GetSequence
(
   @tablename varchar(255)
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

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

Hors ligne

 

#5 01-06-2006 14:18:01

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

Re: [RESOLU] Appel d'une procédure stockée

J'ai modifié le code power builder par celui que tu m'a donnée et remplacé la procédure stockée par celle que tu m'as aussi donnée, cette dernière m'a exigé une parenthèse avant le mot clé AS.

Avec le test de SQLCA, il retourne le même message, mais sans test, le message est : "Cursor is not open".

Hors ligne

 

#6 01-06-2006 14:25:37

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] Appel d'une procédure stockée

une question...

tu utilises quelle version de pb ? et la base de données ?
tu passes via odbc ? ou c'est en direct via sqlserver ?
et quelles sont leurs versions ?

sinon, tu as en fait d'autres, des procédures stockées avec la meme base , et qui fonctionnent ?
juste pour voir la difference...

le but etant de localiser le probleme...s'il vient de pb ou de ta proc...
tu as testé ta procédure stockée ? (via sql...)

apres, il peut y avoir un probleme de parametrage, dans le fichier .ini de powerbuilder.

merci pour les infos.


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

Hors ligne

 

#7 01-06-2006 14:39:27

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

Re: [RESOLU] Appel d'une procédure stockée

J'utilise Powerbuilder 10 et SQL Server 2000, je passe par ODBC, la procédure stockée fonctionne sans problème dans l'analyseur de requête SQL Server.

Quand au finchier ini de Powerbuilder, étant nouveau dans Powerbuilder, je n'y ai jamais jété un oeil !

Hors ligne

 

#8 01-06-2006 14:48:17

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] Appel d'une procédure stockée

BAHHHH !

ok, je regarde de suite...
mais il n'y a pas d'autres procédures stockées utilisées depuis ton projet pb ?
(bien qu'étant en ce moment sous Sybase 12.x)


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

Hors ligne

 

#9 01-06-2006 16:17:57

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] Appel d'une procédure stockée

Topic: Powerbuilder

--------------------------------------------------------------------------------

Expert:
Date:8/17/2000
Subject:PB5-SQL Stored Procedure Parameter passing problem

Question
I get the following error when I try to retrieve datawindows with Stored Procedure as a data source with passing parameters.

Select error; SQLSTATE = 22005
[Microsoft][ODBC SQL Server Driver] Invalid character value for cast specification.

My stored procedure:

...
GO

CREATE PROCEDURE sp_backup @backupdevice AS

LOAD HeaderOnly
FROM @backupdevice

GO

In the Modify Result Set Description-Edit Execute of my datawindow

execute dbo.sp_backup;1;0 @backupdevice=:backupdevice

I am maintaining a system using similar use of stored procedures with parameter, and just recently realized that they too produce similar error, when they had not before. I suspect that the problem is rooted in my PB5 installation setup or in the MS SQL, but I have exhausted conventional sources to get into the bottom of this problem.

I also noticed that using the same stored procedure without parameter passing, setting the @backupdevice to an existing device, I get the desired results.

Its my first time to use stored procedure so I dont really have any Idea what subtle settings or requirements are needed.

Anjo

Answer
Hi Anjo,

I believe the following may solve your problem:

In development mode, on the "Connection" tab of the database profile, enter the following string for the "Driver-Specific Parameters"

DelimitIdentifier='No',MsgTerse='Yes',CallEscape='No',FormatArgsAsExp='N'

When connecting to database at runtime using SQLCA, then use the following for DBParm:

SQLCA.DBParm= "ConnectString='DSN=xxxxx;UID=xxx;PWD=xxxxxx;
DelimitIdentifier='No',MsgTerse='Yes',CallEscape='No',
FormatArgsAsExp='N''"

I hope this helps. Let me know if this solves your problem.

Pete Carbutti


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

Hors ligne

 

#10 02-06-2006 05:37:28

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

Re: [RESOLU] Appel d'une procédure stockée

Merci beaucoup pour ton assistance.

J'ai l'u le post en anglais, j'ai modifié ma chaîne de connection et ça a marché !

Cela m'encourage à continuer mon développement en PowerBuilder. Et surtout merci beaucoup pour ce forum. J'espère pouvoir être aussi à l'écoute de nouveaux venus dans PowerBuilder une fois que j'y aurais pris mes posisitons.

Encore une fois, merci beaucoup !

En passant, Où est le tag "résolu" ?

Dernière modification par digital prophecy (02-06-2006 05:57:16)

Hors ligne

 

#11 02-06-2006 07:44:26

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] Appel d'une procédure stockée

COOL !
Merci pour tes encouragements et remerciements.
En espèrant que ca fera amener d'autres personnes pour des questions, et d'autres pour les réponses !



Euh, pour le tag 'resolu' ? ca n'existe pas encore...
il suffira de mettre sur le titre 'RESOLU' en attendant mieux...

Je suis novice sur PunBB...je rajoute au fur et à mesure les composants...
faut m'excuser, hein ?
comme tu peux le voir, l'interface evolue souvent ces temps-ci...


hé au fait, tu pourrais pas te présenter ?


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