Power Builder - Store Procedure en PB

 
Vista:

Store Procedure en PB

Publicado por Barzi (28 intervenciones) el 06/09/2005 04:36:15
Hola a todos tengo una tabla llamada ControlTablas (esta tabla tiene dos campos UltimoCodigo varchar(6) y NombreTabla varchar(25) ) bueno esta tabla controla los codigos de mi demas tablas (Empleado , Proveedor, Producto, etc)

Ejemplo...

Tabla: ControlTablas
------------------------------------------
UltimoCodigo NombreTabla
------------------------------------------
EM0002 Empleado
------------------------------------------
PV0005 Proveedor

He creado este Procedimiento Almacenado... para generar un nuevo codigo.....

Create Procedure sp_NuevoCodigo
@UltimoCodigo varchar(6) output,
@Tabla varchar(25)

As

Declare @xCodigo varchar(6), @Dig Numeric, @Ceros Numeric
Select @xCodigo = UltimoCodigo From ControlTablas Where NombreTabla = @Tabla

if @Tabla = 'Empleado'

Set @Dig = Convert(Numeric,Right(@xCodigo,4)) + 1
Set @Ceros = 4 - Len(Convert(varchar, @Dig))
Set @UltimoCodigo = 'EM' + Replicate('0', @Ceros) + Convert (varchar,@Dig)

Update ControlTablas Set UltimoCodigo = @UltimoCodigo Where NombreTabla = @Tabla

/*Ejecutando el procedimiento*/

Declare @@Ultimo varchar(6)
Execute sp_NuevoCodigo @@Ultimo output, @Tabla = 'Emnpleado'

Select * From ControlTablas

Bueno mis consultas son:

1--Cuando no inserto ningun registro a la tabla ControlTablas no me genera nada que me falta en ese codigo para q me permita insertar sin tener nada en la tabla ControlTablas osea q comienza ejemplo:

Tabla: ControlTablas
------------------------------------------
UltimoCodigo NombreTabla
------------------------------------------
EM0001 Empleado
------------------------------------------

2--Tengo una aplicacion en PowerBuilder 9.0 donde existe una ventana ancestro o padre que tiene ventanas hijas (w_empleado, w_proveedor, etc) Como puedo llevar mi procedimiento almacenado a mi apliacion de PB se q todo el sript seria en la ventana padre pero como hago para que me resconosca cuando es w_empleado y inserte EM0002 o cuando es w_proveedor inserte PV0001 y asi sucesivamente para las demas ventanas....

Gracias por su tiempo...!

Si alguien tiene una idea mejor me la puede decir gracias...!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Store Procedure en PB

Publicado por Carlos Gil (124 intervenciones) el 06/09/2005 15:49:19
Hola:

Tu diseño atenta contra las reglas de normalización. En los campos que son clave primaria de una tabla no se debe almacenar mas información que el código, tu quieres grabar 'PV0001' y eso es una mala practica. Lo que te recomiendo estimado forista es que, a cada tabla le asignes como clave primaria un campo con tipo de dato numérico y que sea autoincremental. De esta manera tu te despreocupas de llenar este campo.

Además:
- Te ahorras una Tabla, "ControlTablas"
- Ya no te preocupas por programar el dichoso Store Procedure
- Evitaras programación excesiva en tu ventana padre, es decir ya no tienes que pasarle ningún parámetro (nombre de tabla) a ningún store procedure.
- Si quieres que tu información se muestre como 'PV0001', lo único que tienes que hacer es colocar una mascara a dicho campo. Para este caso la mascara seria 'PV0000'
- y por último; si tienes claves primarias del tipo de datos numérico agilizas la búsqueda en tu base de datos.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Store Procedure en PB

Publicado por Barzi (28 intervenciones) el 06/09/2005 16:50:50
Gracias por la respuesta amigo Carlos Gil te agradesco tu recomendacion.... saludos de Lima - Peru...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Store Procedure en PB

Publicado por Carlos Gil (124 intervenciones) el 07/09/2005 02:47:21
De nada...
Saludos de Chimbote - Peru
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar