Power Builder - Guardar dato anterior y posterior al Actualizar

 
Vista:

Guardar dato anterior y posterior al Actualizar

Publicado por Alex (23 intervenciones) el 28/09/2003 21:30:29
Hola. Tengo una aplicacion en donde tengo mis codigueras de datos y realizo las siguientes operaciones altas, bajas, modificaciones. Ahora cada vez que modifico un dato de alguna tabla preciso guardar el nombre de la tabla, el campo que fue modificado, el valor anterior a la modificacion y el valor despues de la modificacion de dicho campo. Alguien tiene algun ejemplo o idea de como hacer esto?

Muchas 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:Guardar dato anterior y posterior al Actualizar

Publicado por Oscar (1178 intervenciones) el 29/09/2003 07:12:57
Esta idea, funciona para un DW tipo FreeForm, es decir, cuando se modifican varios campos visualizando un solo registro a la vez; pero si se modifican varias filas al mismo tiempo, habría que mejorarlo.

Aquí va:
1. Supongamos la siguiente tabla:
TABLA1
idalumno
nombre

2. Creas OTRA tabla, con los mismos campos y añades otros:
TABLA2
idalumno (null)
nombre_antes (null)
nombre_despues (null)
fecha(null)

3. Creas un dw_1, en base a la TABLA1, y un dw_2 en base a la TABLA2 el DW_2, lo ocultas).

4. Variables de instancia:
Integer ii_n
string is_NombreActual

5. Evento EditChanged del DW_1
//Con esto, guardamos el dato original del campo nombre
is_NombreActual=dw_1.GetItemString(dw_1.GetRow(),"nombre")

//Creo que existe otra forma, trabajando con los diferentes buffers que ofrece PB.
// (CONTINUA...)
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

Guardar dato anterior y posterior al Actualizar(2)

Publicado por Oscar (1178 intervenciones) el 29/09/2003 07:15:50
(continuación...)
6. En el Dw_1, evento updatestart (antes que empiece la actualización de la BD) , Obtenemos el estado del DW.

Int i

FOR i = 1 to dw_1.rowcount()
dwItemStatus l_estado
l_estado = dw_1.getitemstatus(i, 0, Primary!)

CHOOSE CASE l_estado
CASE new!
//Esta fila i, es nueva sin datos
CASE newmodified!
//Esta fila i, es nueva con datos

//CASE notmodified!
// DW no fue modificado (no interesa)

CASE datamodified!
//DW fue modificado, en la fila i".Trabajamos en esto:
//Insertamos una nueva fila en el dw_2
ii_n=dw_2.InsertRow(0)
dw_2.ScrollToRow(ii_n)

//copiamos la fila modificada al dw_2
dw_2.SetItem(ii_n,"nombre_antes",is_NombreActual)
dw_2.SetItem(ii_n,"nombre_despues",dw_1.GetItemString(dw_1.GetRow(),"nombre"))
dw_2.SetItem(ii_n,"fecha",Today())
END CHOOSE
NEXT

dw_2.Update()

7. Cuando el usuario, pulse el botón Guardar o actualizar del dw_1(dw_1.Update()), trasbasará sin darse cuenta la fila modificada al dw_2 oculto.

El ejemplo no muestra el nombre de la tabla (supongo que tendrás que crear una copia de cada tabla), y mejorar las actuales limitantes. Te repito que es sólo una idea. Es probable que existan otras.
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:Guardar dato anterior y posterior al Actualizar

Publicado por Alex (23 intervenciones) el 29/09/2003 17:50:36
Oscar, el problema que tengo de crear una tabla espejo, es que en mi aplicacion yo tengo una ventana de la cual heredo para hacer los bams, en total tengo como 150 ventanas que heredan de esa, tengo la ventana con el dw dentro sin asociarlo a ninguno, lo que hago lo hago en tiempo de ejecucion, o sea que duplicar todas las tablas es medio complicado, la idea es hacer algo en la ventana padre, de la cual heredan las demas.
Muchas gracias igual por la ayuda, sirve para sacar ideas
Saludos
Alex
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:Guardar dato anterior y posterior al Actualizar

Publicado por Victor :-) (116 intervenciones) el 30/09/2003 23:23:03
Te propongo que NO resuelvas el problema de auditoria de datos en el PB.
Mejor usa los triggers(Gatillos o desencadenadores) en SQL en Update.
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:Guardar dato anterior y posterior al Actualizar

Publicado por Alex (23 intervenciones) el 01/10/2003 13:51:39
Alguna idea??
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:Guardar dato anterior y posterior al Actualizar

Publicado por Alex (23 intervenciones) el 02/10/2003 20:52:15
Ya lo consegui, gracias a todos
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:Guardar dato anterior y posterior al Actualizar

Publicado por Oscar (1178 intervenciones) el 03/10/2003 00:35:29
Podrías explicarlos; aunque brevemente, ¿cómo lo hiciste?
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