Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
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 :
SQLSTATE = 22005 [Microsoft][ODBC SQL Server Driver]Valeur de caractère non valide pour la spécification de la casse
Hors ligne
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 ?
Hors ligne
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 :
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 :
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
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 :
@tablename = :ls_tablename, @currentvalue = :ll_currentvalue OUTPUT;
alors que ta procedure stockée est declarée en majuscule :
( @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...
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))
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
Hors ligne
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
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.
Hors ligne
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
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)
Hors ligne
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
Hors ligne
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
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 ?
Hors ligne