Que tal? estoy intentando hacer una auditoria para mi aplicacion en delphi, usando como motor de db a MYSQL.
Resulta que estoy buscando la forma de programar un script de forma tal que capture cualquier evento en mi base de dato (INSERT, UPDATE, DELETE) y poder recuperar los datos a operar en una tabla de auditoria.
Hasta el momento llegue a la conclusion que no me sirve utilizar trigger, ya que necesito capturar el ID del usuario logueado el cual realiza la accion (INSERT, UPDATE, DELETE), y ese ID lo guardo en una variable publica en mi MAIN de la aplicacion en delphi, y hasta donde yo se, los triggers solo procesan datos con los que trabaja la tabla.
Entonces, ya que uso SP para los inserts, probe realizar el siguiente script, y necesito la critica de los que verdaderamente saben (ustedes v
v ) y que me digan que opinan al respecto, si conviene trabajar asi, si es factible en cuanto a velocidad de proceso, etc.
Algo para tener en cuenta, mi aplicacion es para una oficina, en la cual son no mas de 12 terminales, 5 para consultas y no mas de 5 para ABM de datos, y 2 que administren.
A continuacion les dejo mi SP
Código MySQL:
Ver original-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$
)
/*Primer INSERT datos ACTA*/
INSERT INTO acta
(actanum
, actaserie
, actafecha
, actahora
, actanumcalle
, offdni
, empresa_id
, vehicledom
, lugar_id
, causanum
, causafecha
) VALUES (p_actanum
, p_actaserie
, p_actafecha
, p_actahora
, p_actanumcalle
, p_offdni
, p_empresaid
, p_vehicledom
, p_lugarid
, p_causanum
, p_causafecha
);
/*Segundo INSERT datos INFRACCION*/
INSERT INTO actabreach
(actanum
, actaserie
, breach_id
) VALUES (p_actanum
, p_actaserie
, var1
);
INSERT INTO actabreach
(actanum
, actaserie
, breach_id
) VALUES (p_actanum
, p_actaserie
, var2
);
INSERT INTO actabreach
(actanum
, actaserie
, breach_id
) VALUES (p_actanum
, p_actaserie
, var3
);
INSERT INTO actabreach
(actanum
, actaserie
, breach_id
) VALUES (p_actanum
, p_actaserie
, var4
);
INSERT INTO actabreach
(actanum
, actaserie
, breach_id
) VALUES (p_actanum
, p_actaserie
, var5
);
INSERT INTO actabreach
(actanum
, actaserie
, breach_id
) VALUES (p_actanum
, p_actaserie
, var6
);
INSERT INTO actabreach
(actanum
, actaserie
, breach_id
) VALUES (p_actanum
, p_actaserie
, var7
);
INSERT INTO actabreach
(actanum
, actaserie
, breach_id
) VALUES (p_actanum
, p_actaserie
, var8
);
INSERT INTO actabreach
(actanum
, actaserie
, breach_id
) VALUES (p_actanum
, p_actaserie
, var9
);
INSERT INTO actabreach
(actanum
, actaserie
, breach_id
) VALUES (p_actanum
, p_actaserie
, var10
);
/*Tercer INSERT de CAUSA en tabla CAUSA*/
VALUES (p_causanum
, p_causafecha
);
/*cuarto INSERT para AUDITORIA ACTA*/
INSERT INTO audit_acta
(tipoact
, actanum_new
, actaserie_new
, actafecha_new
, actahora_new
, usu_id
, fecha
, hora
)
La estructura de las tablas que uso son las siguientes
acta
*actanum
*actaserie
actafecha
actahora
actanumcalle
offdni
empresa_id
vehicledom
lugar_id
causanum
causafecha
resolnum
resolfecha
pago_id
fichanum
causa
*causanum
*causafecha
causaobs
actabreach
*actabreach_id (AI)
actanum
actaserie
breach_id
Agradeceria mucho su ayuda, y si este tema no corresponde en esta seccion, por favor hacerme saber asi lo cambio. Saludos y gracias