Exec Usp Desde Pb

12

Click here to load reader

Transcript of Exec Usp Desde Pb

Page 1: Exec Usp Desde Pb

COMO EJECUTAR DESDE POWER BUILDER PROCEDIMIENTOS ALMACENADOS (STORED PROCEDURES) EN SQL SERVERPower Builder [email protected]

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 código 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 código en Power Builder que despliegue el resultado del Stored Procedure

//------------------------------------------------------------------------

//En power Builder escribimos el siguiente código

//Codigo en Power Builder

//Declaramos dos variables de trabajo

int a,b,resultado

a = 3 b = 5

//declaramos el procedimiento almacenado

//Primero declaramos con un nombre lógico para el nombre del procedimiento almacenado

//enviamos los dos parámetros a y b

declare pb_Suma procedure for PSuma

@a = :a,

@b = :b;

Page 2: Exec Usp Desde Pb

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

2 4 c o m e n t a r i o s :

adario dijo...Hola fijate que quiero executar un SP en sql 2005 desde power builder 105. Necesito que al presionar un botón, 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 botón. Me podrías decir que Power Script debo colocar en el evento clicked de mi boton? No necesito mostrarlo en ningún sle_, solamente ejecutar las instrucciones del SP. Creoq ue sería algo sencillo para ti. Gracias

26 de abril de 2008 23:06

David Castillo dijo...//Declatramos el procedimiento almacenado a ejecutarsedeclare pb_Suma procedure for PSuma;

//ejecutamos el procedimiento//si no es necesario ningun resultado esto solo ejecutara el procedimiento en sql serverexecute pb_Suma;

5 de junio de 2008 12:19

Ana María dijo...Hola, super tu ayuda con esto de la ejecución de procedimientos almacenados... pero me gustaria saber cómo hago si tengo mas de un valor de salida?

6 de junio de 2008 15:02

David Castillo dijo...

Page 3: Exec Usp Desde Pb

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 extraño 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 GOSET ANSI_NULLS ON GO-- Definimos el procedimiento almacenado-- este procedimiento devuelve aquellos titulos que incluyan en el campo título el parametro enviado

CREATE Procedure Pemployees--recibimos un parametro@filtro varchar(10)

as--declaramos la variable que contendra el resultado

select employeeid, lastname,firstname,titlefrom employeeswhere title like '%'+@filtro+'%'

GOSET QUOTED_IDENTIFIER OFF 

Page 4: Exec Usp Desde Pb

GOSET 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 trabajoint employeeidstring lastnamestring firstname

//Declaramos la variable que enviara el parametrostring filtrofiltro = 'representative'

//declaramos el procedimiento almacenado//Primero declaramos con un nombre lógico del procedimiento almacenado//y enviamos el parametro 

declare pb_Employees procedure for PEmployees@filtro = :filtro;

//ejecutamos el procedimientoexecute pb_Employees;

//el resultado es devuelto en un cursor el cual es vaciado en el cursor resultadofetch pb_Employees into :Employeeid, :lastname, :firstname, :title;

//Una vez cargado el cursor con n registros lo recorremos//Mientras no sea fin del cursorDO WHILE sqlca.sqlcode = 0 //Adicionamos a un lb_1 los registros recorridoslb_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 cursorclose 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

Page 5: Exec Usp Desde Pb

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 @codescGO

10 de julio de 2008 12:22

David Castillo dijo...Hola carol

Este procedimiento almacenado llamado AAACREATE 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 @codescGO 

Recibe tres parametros1. curso que es un varchar de (50) asumo que sera el curso2. codesc con varchar de 10 (debe ser codigo de escuela3. 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'

Page 6: Exec Usp Desde Pb

para ejecutar este procedimiento desde power builder debes escribir el siguiente codigo

//Codigo en Power Builder//Declaramos las variables de trabajostring cursostring codescdate fechita

//declaramos el procedimiento almacenado//Primero declaramos con un nombre lógico del procedimiento almacenado//y enviamos el parametro 

declare aaa procedure for aaa

//ejecutamos el procedimientoexecute aaa;

//el resultado es devuelto en un cursor el cual es vaciado en el cursor resultadofetch aaa into :curso, :codesc;

//Una vez cargado el cursor con n registros lo recorremos//Mientras no sea fin del cursorDO WHILE sqlca.sqlcode = 0 //Adicionamos a un lb_1 los registros recorridoslb_1.additem( curso + ' ' + codesc)

// Colocamos los valores de la siguiente fila a las variables de trabajo fetch aaa into :curso, :codesc;LOOP

//cerramos el cursorclose 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 juridicaCREATE procedure usp_personajuridica_insertar@xcod_persona varchar(10),@xtel_persona varchar(50),@xemail_persona varchar(50),@xdir_persona varchar(50),

Page 7: Exec Usp Desde Pb

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

asinsert into persona values (@xcod_persona,@xtel_persona,@xemail_persona,@xdir_persona)insert into persona_juridica values (@xcod_persona,@xrazsoc_personajuridica,@xruc_personajuridica,@xrepleg_personajuridica)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 juridicaCREATE 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)

asinsert into persona values (@xcod_persona,@xtel_persona,@xemail_persona,@xdir_persona)insert into persona_juridica values (@xcod_persona,@xrazsoc_personajuridica,@xruc_personajuridica,@xrepleg_personajuridica)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.

Page 8: Exec Usp Desde Pb

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

Page 9: Exec Usp Desde Pb

David Castillo dijo...Jhan 

La consulta que escribes no tiene el paramnetro de Power ni de Sql server, aqui t envio el código 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

Page 10: Exec Usp Desde Pb

Utliza la comilla simple para adicioanr el simbolo porcentaje y luego suma tu variable de trabajo.

El código 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 código 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 

Page 11: Exec Usp Desde Pb

CREATE PROCEDURE dbo.sp_fecha_hora@dt_fecha_hora datetime OUTPUT

ASSelect @dt_fecha_hora = getdate()Select @dt_fecha_horareturnGO

Codigo de ejecución desde power builder 9

declare sp_proc procedure for dbo.sp_fecha_hora @dt_fecha_hora = :idt_fecha OUTPUTusing 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.