Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-07-2007
Avatar de jwmoreira
jwmoreira jwmoreira is offline
Miembro
 
Registrado: jun 2004
Posts: 83
Poder: 21
jwmoreira Va por buen camino
Question Trigger dinámico para Auditoría de Tablas

Hola a todos,

Actualmente realizo la auditoria de algunas tablas transaccionales desde triggers pero validando campo por campo:

If (old.campo1 <> new.campo1 ) ....

Esto se vuelve algo tedioso si la tabla es demasiado larga, ahora imaginense si le quiero hacer auditoria a todas las tablas del sistema, mi pregunta es, si existe algun forma de traer, estando dentro del evento update del trigger todos los nombres de los campos en forma de arreglo y poderlos recorrer con algun cursor o algo parecido?

Saludos,
Jorge.
Responder Con Cita
  #2  
Antiguo 21-07-2007
TJose TJose is offline
Miembro
 
Registrado: may 2003
Posts: 162
Poder: 22
TJose Va por buen camino
Hola

Tengo un pequeño programa que escribí hace un tiempo, que hace (creo) lo que necesitas (genera el codigo sql)
Si quieres te lo paso

Saludos
TJose
Responder Con Cita
  #3  
Antiguo 23-07-2007
Avatar de jwmoreira
jwmoreira jwmoreira is offline
Miembro
 
Registrado: jun 2004
Posts: 83
Poder: 21
jwmoreira Va por buen camino
Thumbs up

Hola, gracias seria muy bueno, por favor mi mail es el siguiente: jwmoreira@hotmail.com.

Saludos,
Jorge.
Responder Con Cita
  #4  
Antiguo 31-01-2010
yakko_msm yakko_msm is offline
Registrado
 
Registrado: ene 2010
Posts: 1
Poder: 0
yakko_msm Va por buen camino
Hola me podrias enviar el script a mi correo yakko_msm@hotmail. Estoy trabajando en algo similar y quiero ver si lo puedo mejorar.

Gracias
Saludos
Yakko
Responder Con Cita
  #5  
Antiguo 31-01-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Hola.

Utilizar un programa que te genere un SQL para construir los triggers, está muy bien, pero significa que cada vez que cambias un campo tendrás que reconstruir los triggers.

¿ No sería mejor crear un trigger que se adapte a los campos que tengas en cada momento ?, de esta manera, una vez creado el trigger ya te puedes olvidar de él, por más que modifiques la tabla.

Para ello, en el trigger tienes que recorrer (con un for select) las tablas de sistema, para ir obteniendo el nombre de los campos en la tabla, y para cada campo, utilizas una sentencia dinámica (con execute statement) para verificar si ha cambiado de valor.

NOTA: Esta consulta te devuelve todos los campos de una Tabla

select f.rdb$field_name
from rdb$relation_fields f
join rdb$relations r on f.rdb$relation_name = r.rdb$relation_name
and r.rdb$view_blr is null
and (r.rdb$system_flag is null or r.rdb$system_flag = 0)
and f.rdb$relation_name = :TABLA
order by f.rdb$field_position

Saludos.

Última edición por guillotmarc fecha: 31-01-2010 a las 20:23:44.
Responder Con Cita
  #6  
Antiguo 31-01-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Por cierto, la comparación que haces no me parece correcta :

if (old.campo1 <> new.campo1 ) then ....

Un campo vacío (null) es un estado y no un valor comparable. Eso hace que las comparaciones entre un null y un valor no siempre den lo que te esperas. Aunque es mucho más largo, deberías escribir :

Código:
if ((old.campo1 is null and new.campo1 is not null) or 
    (old.campo1 is not null and new.campo1 is null) or 
    (old.campo1 <> new.campo1 )) then ....
Responder Con Cita
  #7  
Antiguo 11-03-2010
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.412
Poder: 22
fjcg02 Va camino a la fama
Hola,
habeis llegado a alguna conclusión ?

No consigo realizar lo mismo que estais comentando.

En qué puede fallar mi trigger ?

Saludos

http://www.clubdelphi.com/foros/show...350#post356350
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Sistema de Huellas (Pistas de auditoria) Hagen Firebird e Interbase 3 29-03-2011 14:47:12
Cambio dinamico de BD en delphi para sacar reporte Crystal Jovana Macias Impresión 1 10-05-2007 20:27:00
Triggers de auditoria en firebird 1.5 robertoe Firebird e Interbase 1 04-01-2007 05:18:11
Como crear menu dinamico para ventanas creadas marcoev Varios 9 05-07-2005 21:54:07
Trigger Para Refrescar Tablas GIVO SQL 5 21-07-2003 20:32:55


La franja horaria es GMT +2. Ahora son las 01:16:26.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi