
PB2022 - NO GRABA en STORED PROCEDURE PARAMETRIZADO de SQL SERVER
Publicado por Alex (2 intervenciones) el 28/03/2024 23:10:49
-Intento grabar por medio de un SP, sin éxito, en una tabla de Sql Server.
-Al ejecutarlo no da error, pero nada hace, como si no existiera la línea EXECUTE.
-También probé anular en el SP todo lo que es controles de transacción dejando
solo el INSERT INTO, y tampoco hace nada.
-El SP funciona y graba bien. Ya está probado en el sql.
-El messagebox del CnxSqlSrv.sqlcode devuelve el valor -1
-El messagebox de la variable nRet muestra el valor -999, lo que me indica que
nunca fue modificado dentro del SP, algo que es imposible, por lo tanto nunca
entrá al SP, y eso significa que para el PB no existe el EXECUTE.
¿Qué estoy haciendo mal?. ya dudo de si es confiable el PB, pues lo estoy
aprendiendo y evaluando. Espero que me ayuden y el problema sea yo que hace
mal las cosas, porque el PB me gusta mucho y sería una pena descartarlo.
Espero sus comentarios. Gracias.
-------------
Versiones
-------------
-POWERBUILDER 2022 1878
-SQL SERVER 2014
--------------
Elementos
--------------
-parent.em_fecha.text = "2024"
-CnxSqlSrv = conexión a sql funcionando
-TEST2 = Tabla en sql server
-PROCEDURE dbo.TEST= stored procedure grabando perfectamente
----------------------------
En SP de Sql Server
----------------------------
PROCEDURE dbo.TEST @panio int, @presultado int OUTPUT
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRANSACTION TR
Begin Try
if @panio>0
begin
INSERT INTO TEST2(anio) values(@panio);
end
End Try
Begin Catch
goto no_actualiza
End Catch
COMMIT TRANSACTION TR
set @presultado = 0;
return;
no_actualiza:
ROLLBACK TRANSACTION TR
set @presultado = 99
return;
END
GO
------------------------------
En Powerbuilder 2022
------------------------------
integer nAnio
integer nRet
nAnio = year(date(parent.em_fecha.text))
nRet = -999
DECLARE pbsp_CL PROCEDURE FOR dbo.TEST
@nAnio = :nAnio,
@nRet = :nRet USING (CnxSqlSrv);
EXECUTE pbsp_CL;
if CnxSqlSrv.sqlcode = 0 then
messagebox("Grabación exitosa SQLCODE.","EJECUTÓ "+string(CnxSqlSrv.sqlcode))
else
messagebox("Grabación error SQLCODE.","ERROR "+string(CnxSqlSrv.sqlcode)+"-"+SQLCA.sqlerrtext)
end if
if nRet<>1 then
messagebox("Error nRet OUT ",string(nRet))
else
messagebox("OK nRet OUT ",string(nRet))
end if
CLOSE pbsp_CL;
-Al ejecutarlo no da error, pero nada hace, como si no existiera la línea EXECUTE.
-También probé anular en el SP todo lo que es controles de transacción dejando
solo el INSERT INTO, y tampoco hace nada.
-El SP funciona y graba bien. Ya está probado en el sql.
-El messagebox del CnxSqlSrv.sqlcode devuelve el valor -1
-El messagebox de la variable nRet muestra el valor -999, lo que me indica que
nunca fue modificado dentro del SP, algo que es imposible, por lo tanto nunca
entrá al SP, y eso significa que para el PB no existe el EXECUTE.
¿Qué estoy haciendo mal?. ya dudo de si es confiable el PB, pues lo estoy
aprendiendo y evaluando. Espero que me ayuden y el problema sea yo que hace
mal las cosas, porque el PB me gusta mucho y sería una pena descartarlo.
Espero sus comentarios. Gracias.
-------------
Versiones
-------------
-POWERBUILDER 2022 1878
-SQL SERVER 2014
--------------
Elementos
--------------
-parent.em_fecha.text = "2024"
-CnxSqlSrv = conexión a sql funcionando
-TEST2 = Tabla en sql server
-PROCEDURE dbo.TEST= stored procedure grabando perfectamente
----------------------------
En SP de Sql Server
----------------------------
PROCEDURE dbo.TEST @panio int, @presultado int OUTPUT
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRANSACTION TR
Begin Try
if @panio>0
begin
INSERT INTO TEST2(anio) values(@panio);
end
End Try
Begin Catch
goto no_actualiza
End Catch
COMMIT TRANSACTION TR
set @presultado = 0;
return;
no_actualiza:
ROLLBACK TRANSACTION TR
set @presultado = 99
return;
END
GO
------------------------------
En Powerbuilder 2022
------------------------------
integer nAnio
integer nRet
nAnio = year(date(parent.em_fecha.text))
nRet = -999
DECLARE pbsp_CL PROCEDURE FOR dbo.TEST
@nAnio = :nAnio,
@nRet = :nRet USING (CnxSqlSrv);
EXECUTE pbsp_CL;
if CnxSqlSrv.sqlcode = 0 then
messagebox("Grabación exitosa SQLCODE.","EJECUTÓ "+string(CnxSqlSrv.sqlcode))
else
messagebox("Grabación error SQLCODE.","ERROR "+string(CnxSqlSrv.sqlcode)+"-"+SQLCA.sqlerrtext)
end if
if nRet<>1 then
messagebox("Error nRet OUT ",string(nRet))
else
messagebox("OK nRet OUT ",string(nRet))
end if
CLOSE pbsp_CL;
Valora esta pregunta


0