You are on page 1of 11

COMO EJECUTAR DESDE POWER BUILDER PROCEDIMIENTOS ALMACENADOS (STORED PROCEDURES) EN SQL SERVER

Power Builder castillodavid@gmail.com


Para ejecutar un procedimiento almacenado que nos devuelva un resultado realizaremos las siguientes operaciones: 1. Crear un procedimiento almacenado en SQL Server 2. Crear el cdigo en Power Builder que despliegue el resultado del Stored Procedure 1. Crear un procedimiento almacenado en SQL Server --En SQL Server Ejecutamos el siguiente codigo --Creamos el procedimiento en SQl Server SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS OFF GO Create Procedure PSuma --recibimos dos parametros @a int, @b int as --declaramos lavariable que contendra el resultado declare @c int select @c = @a + @b --devolvemos el resultado select @c GO SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO 2. Crear el cdigo en Power Builder que despliegue el resultado del Stored Procedure //-----------------------------------------------------------------------//En power Builder escribimos el siguiente cdigo //Codigo en Power Builder //Declaramos dos variables de trabajo int a,b,resultado a=3b=5 //declaramos el procedimiento almacenado //Primero declaramos con un nombre lgico para el nombre del procedimiento almacenado //enviamos los dos parmetros a y b declare pb_Suma procedure for PSuma @a = :a, @b = :b;

//ejecutamos el procedimiento execute pb_Suma; //el resultado es devuelto en un cursor el cual es vaciado en la variable resultado fetch pb_Suma into :resultado; //cerramos el cursor close pb_Suma; //Asignamos el valor resultado en un sle sle_1.text = string(resultado)

Publicado por David Castilloen 21:59 Etiquetas: Power Builder 10.5, procedimeinto almacenado, Sql Server, Stored Procedure

24 comentarios:

adario dijo... Hola fijate que quiero executar un SP en sql 2005 desde power builder 105. Necesito que al presionar un botn, se ejecute el stored procedure. Lo nico es que el stored procedure no tiene parametros, no los necesito, pero quiero que se ejecute al hacer click en el botn. Me podras decir que Power Script debo colocar en el evento clicked de mi boton? No necesito mostrarlo en ningn sle_, solamente ejecutar las instrucciones del SP. Creoq ue sera algo sencillo para ti. Gracias 26 de abril de 2008 23:06

David Castillo dijo... //Declatramos el procedimiento almacenado a ejecutarse declare pb_Suma procedure for PSuma; //ejecutamos el procedimiento //si no es necesario ningun resultado esto solo ejecutara el procedimiento en sql server execute pb_Suma; 5 de junio de 2008 12:19

Ana Mara dijo... Hola, super tu ayuda con esto de la ejecucin de procedimientos almacenados... pero me gustaria saber cmo hago si tengo mas de un valor de salida? 6 de junio de 2008 15:02

David Castillo dijo...

Para trabajar con procedimiento alamcenado que devuelme mas de un valor el resultado se debe ser capturado en power builder en un cursor en http://blogcastillodavid.blogspot.com/2008/06/como-ejecutar-desde-power-builder.html Hay un ejemplo. 6 de junio de 2008 17:07

Rafael Paul dijo... ayudame indicando otra pagina donde pueda ver como capturar mas de un valor de unn stored procedure, el link que indicas ya no existe 2 de julio de 2008 11:48

David Castillo dijo... Estimado Rafael que extrao que no podas entrar a la pagina porque esta se encuentra en el mismo blog. Sin embargo aqui tienes un ejemplo cuando tienes varias filas de retorno: Para ejecutar un procedimiento almacenado que devuelve varios registros es necesario recibir los registros en un cursor. Para este ejemplo utilizaremos la Base de Datos Northwind de SQL Server. 1. Primero creamos un procedimiento almacenado que desplegara los empleados cuyo titulo incluya la palabra 'representative' SET QUOTED_IDENTIFIER OFF GO SET ANSI_NULLS ON GO -- Definimos el procedimiento almacenado -- este procedimiento devuelve aquellos titulos que incluyan en el campo ttulo el parametro enviado

CREATE Procedure Pemployees --recibimos un parametro @filtro varchar(10) as --declaramos la variable que contendra el resultado select employeeid, lastname,firstname,title from employees where title like '%'+@filtro+'%' GO SET QUOTED_IDENTIFIER OFF

GO SET ANSI_NULLS ON GO 2. En Power Builder desplegaremos el resultado en el control List (LB_1) //Codigo en Power Builder //Declaramos las variables de trabajo int employeeid string lastname string firstname //Declaramos la variable que enviara el parametro string filtro filtro = 'representative' //declaramos el procedimiento almacenado //Primero declaramos con un nombre lgico del procedimiento almacenado //y enviamos el parametro declare pb_Employees procedure for PEmployees @filtro = :filtro; //ejecutamos el procedimiento execute pb_Employees; //el resultado es devuelto en un cursor el cual es vaciado en el cursor resultado fetch pb_Employees into :Employeeid, :lastname, :firstname, :title; //Una vez cargado el cursor con n registros lo recorremos //Mientras no sea fin del cursor DO WHILE sqlca.sqlcode = 0 //Adicionamos a un lb_1 los registros recorridos lb_1.additem( string(Employeeid) + ' ' + lastname + ' ' + firstname + ' ' + title) // Colocamos los valores de la siguiente fila a las variables de trabajo fetch pb_Employees into :Employeeid, :lastname, :firstname, :title; LOOP //cerramos el cursor close pb_Employees; 2 de julio de 2008 16:04

carol dijo... Hola, me gustaria que me expliques este pa., me lo paso un amigo pero no m lo pudo explicar, y si podrias decirme como lo ejecuto en pb mucho mejor gracias

CREATE PROCEDURE aaa @curso varchar(50), @codesc varchar (10), @fechita datetime AS SELECT C.cod_curso, C.desc_curso FROM CURSO C WHERE C.desc_curso LIKE @curso +'%' and C.cod_escuela LIKE @codesc GO 10 de julio de 2008 12:22

David Castillo dijo... Hola carol

Este procedimiento almacenado llamado AAA CREATE PROCEDURE aaa @curso varchar(50), @codesc varchar (10), @fechita datetime AS SELECT C.cod_curso, C.desc_curso FROM CURSO C WHERE C.desc_curso LIKE @curso +'%' and C.cod_escuela LIKE @codesc GO

Recibe tres parametros 1. curso que es un varchar de (50) asumo que sera el curso 2. codesc con varchar de 10 (debe ser codigo de escuela 3. fechita un valor de tipo datetime este parametro no es utilizado en el pa; Este procedimiento almacenado devuelve el todos los cursos que empiezan con el codigo curso y pertenecen a la escuela seleeccionada para ejecutarlo desde Sql Server la linea debe ser: aaa 'curso_a_buscar', 'codigo_escuela', '01/01/2008'

para ejecutar este procedimiento desde power builder debes escribir el siguiente codigo //Codigo en Power Builder //Declaramos las variables de trabajo string curso string codesc date fechita //declaramos el procedimiento almacenado //Primero declaramos con un nombre lgico del procedimiento almacenado //y enviamos el parametro declare aaa procedure for aaa

//ejecutamos el procedimiento execute aaa; //el resultado es devuelto en un cursor el cual es vaciado en el cursor resultado fetch aaa into :curso, :codesc; //Una vez cargado el cursor con n registros lo recorremos //Mientras no sea fin del cursor DO WHILE sqlca.sqlcode = 0 //Adicionamos a un lb_1 los registros recorridos lb_1.additem( curso + ' ' + codesc) // Colocamos los valores de la siguiente fila a las variables de trabajo fetch aaa into :curso, :codesc; LOOP //cerramos el cursor close aaa; 10 de julio de 2008 13:16

carol dijo... Hola, quisiera que le des una chequeadita a mi pa. que he hecho es acerca de herencia persona a persona juridica, y tambien podrias indicarme como lo puedo llamar desde pb,ose creo dos dw uno para persona y otro para persona juridica, xq no m sale no me permite ingresar dx en persona juridica CREATE procedure usp_personajuridica_insertar @xcod_persona varchar(10), @xtel_persona varchar(50), @xemail_persona varchar(50), @xdir_persona varchar(50),

@xrazsoc_personajuridica varchar(30), @xruc_personajuridica varchar(11), @xrepleg_personajuridica varchar(30)

as insert into persona values (@xcod_persona,@xtel_persona,@xemail_persona,@xdir_persona) insert into persona_juridica values (@xcod_persona,@xrazsoc_personajuridica,@xruc_personajuridica,@xrepleg_personajuri dica) GO 10 de julio de 2008 14:51

carol dijo... Hola, quisiera que le des una chequeadita a mi pa. que he hecho es acerca de herencia persona a persona juridica, y tambien podrias indicarme como lo puedo llamar desde pb,ose creo dos dw uno para persona y otro para persona juridica, xq no m sale no me permite ingresar dx en persona juridica CREATE procedure usp_personajuridica_insertar @xcod_persona varchar(10), @xtel_persona varchar(50), @xemail_persona varchar(50), @xdir_persona varchar(50), @xrazsoc_personajuridica varchar(30), @xruc_personajuridica varchar(11), @xrepleg_personajuridica varchar(30)

as insert into persona values (@xcod_persona,@xtel_persona,@xemail_persona,@xdir_persona) insert into persona_juridica values (@xcod_persona,@xrazsoc_personajuridica,@xruc_personajuridica,@xrepleg_personajuri dica) GO 10 de julio de 2008 14:55

darkmorfix dijo... Hola David, necesito ejecuta un procedimiento almacenado en un datawindows, al ingresar un numero, por ejemplo de una prefactura(EJ:378) en un cuadro de texto, la idea es clickear un boton buscar y que me taiga los datos relacionados a ese numero de prefactura a la datawindows y ahi trabajarlos para que mas tarde poder crear la facturacion. de antemano muchas gracias.

25 de noviembre de 2008 12:11

darkmorfix dijo... Esmidado David, despues de varios intentos, me empezo a entregar los datos en la datawindows gracias por la ayuda prestada.Consulta? Puedo trabajar la informacion de la datawindows?, en la datawindows me muestra la prefactura(378), Ej: esta me trae 6 filas con distintos valores todos relacionados a la misma prefactura, En la columna Total Factura(total_f), contiene todos los valores, cada fila tiene una valor distinto, lo que quiero es sumar todos esos valores(total_f) y el resultado multiplicarlo por el valor de la columna exento, para que me muestre los valores Afecto y exento que contiene la factura.mo se si sera dificil hacer esto, pero de todos modos muchas gracias por la ayuda prestada 26 de noviembre de 2008 10:36

Gerardo Emmanuel dijo... ingresa a : es.geocities.com/gds_system y ve a la seccion tutoriales de hecho que te ayudara 5 de febrero de 2009 06:07

Jhan dijo... SELECT "departamento"."depto_nombre", "empleado"."emp_apellido", "empleado"."emp_nombre", "empleado"."emp_depto_id", "empleado"."emp_id" FROM "departamento", "empleado" WHERE ( "empleado"."emp_depto_id" = "departamento"."depto_id" ) and ( ( "empleado"."emp_nombre" = :nombre ) OR ( "empleado"."emp_apellido" = :apellido ) ) ORDER BY "empleado"."emp_apellido" ASC

muchachos tengo este codigo,,y necesito que al preguntar por el nombre o el apellido, pueda usar el like como normalmente se hace asi like "% variable%", pero no he podido hacerlo...gracias 8 de febrero de 2010 08:28

Jhan dijo... bueno esto es en power builder,,,,gracias 8 de febrero de 2010 08:30

David Castillo dijo... Jhan La consulta que escribes no tiene el paramnetro de Power ni de Sql server, aqui t envio el cdigo en sql server Que espero te sea util Caso contrario por favor escribe si lo deseas en power builder y te dare el codigo requerido Un gran saludo declare @apellido nvarchar(25) declare @nombre nvarchar(50) set @nombre = 'abe'

SELECT "departamento"."depto_nombre", "empleado"."emp_apellido", "empleado"."emp_nombre", "empleado"."emp_depto_id", "empleado"."emp_id" FROM "departamento", "empleado" WHERE ( "empleado"."emp_depto_id" = "departamento"."depto_id" ) and ( ( "empleado"."emp_nombre" like '%' + nombre + '%' ) OR ( "empleado"."emp_apellido" likr '%' +apellido+ '%' ) ) ORDER BY "empleado"."emp_apellido" ASC 8 de febrero de 2010 09:12

Jhan dijo... david: agradezco el interes en ayudarme, el codigo lo necesito en power builder, ya que el complique que tengo es en el argumento :nombre y :apellido para poder utilizarlo con el like....de forma correcta es que la verdad no tengo claro el uso de las ' y " ademas del signo +....gracias,,,, 8 de febrero de 2010 11:05

David Castillo dijo... Jhan

Utliza la comilla simple para adicioanr el simbolo porcentaje y luego suma tu variable de trabajo. El cdigo es el siguiente: SELECT "departamento"."depto_nombre", "empleado"."emp_apellido", "empleado"."emp_nombre", "empleado"."emp_depto_id", "empleado"."emp_id" FROM "departamento", "empleado" WHERE ( "empleado"."emp_depto_id" = "departamento"."depto_id" ) and (( dbo.Personal.apellidoPaterno like '%'+ :apellido + '%' ) OR ( dbo.Personal.nombres like '%'+ :nombre + '%' )) ORDER BY "empleado"."emp_apellido" ASC Como una sugerencia puedes realizar la consulta solo con una variable y una vez que veas su funcionamiento adicionas la segunda variable en el retrieve es decir: el cdigo seria el siguiente: SELECT "departamento"."depto_nombre", "empleado"."emp_apellido", "empleado"."emp_nombre", "empleado"."emp_depto_id", "empleado"."emp_id" FROM "departamento", "empleado" WHERE ( "empleado"."emp_depto_id" = "departamento"."depto_id" ) and ( dbo.Personal.apellidoPaterno like '%'+ :apellido + '%' ) ORDER BY "empleado"."emp_apellido" ASC 8 de febrero de 2010 13:51

Jhan dijo... jeje gracias,,,lo seguire molestando y si tenes documentacion sobre el power builder 9,,,seria un gran favor...estoy de novato en este lenguaje,,,,,,Exitos... 8 de febrero de 2010 14:05

29917541 dijo... Ejecuto un procedimiento almacenado desde power builder 9 y no me devuelve nada la variable de salida pero lo ejecuto desde la ventana de consulta y me fnciona perfecto no entiendo porque. Codigo de store procedure

CREATE PROCEDURE dbo.sp_fecha_hora @dt_fecha_hora datetime OUTPUT AS Select @dt_fecha_hora = getdate() Select @dt_fecha_hora return GO

Codigo de ejecucin desde power builder 9 declare sp_proc procedure for dbo.sp_fecha_hora @dt_fecha_hora = :idt_fecha OUTPUT using sqlca; execute sp_proc; IF SQLCA.SQLCode = -1 THEN MessageBox("SQL error", SQLCA.SQLErrText) END IF

Y no me da error no se que es lo que estoy haciendo malo me esta faltando. Espero que me puedan ayudar. Saludos.

You might also like