Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-05-2013
elrodrix elrodrix is offline
Miembro
NULL
 
Registrado: nov 2011
Posts: 32
Poder: 0
elrodrix Va por buen camino
Procedimiento Almacenado para Auditoria

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 ) 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 SQL [-]
-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `acta_alta`(
    in p_actanum int,
    in p_actaserie varchar(2),
    in p_actafecha Date,
    in p_actahora varchar (5),
    in p_offdni int,
    in p_empresaid int,
    in var1 int,
    in var2 int,
    in var3 int,
    in var4 int,
    in var5 int,
    in var6 int,
    in var7 int,
    in var8 int,
    in var9 int,
    in var10 int,
    in p_vehicledom varchar (45),
    in p_lugarid int,
    in p_actanumcalle varchar (45),
    in p_causanum int,
    in p_causafecha date,
    in p_usu int
    
)
BEGIN

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

    if var1 >0 then
        INSERT INTO actabreach (actanum, actaserie, breach_id) 
        VALUES (p_actanum, p_actaserie, var1);
    end if;
    
    if var2 >0 then
        INSERT INTO actabreach (actanum, actaserie, breach_id) 
        VALUES (p_actanum, p_actaserie, var2);
    end if;
    
    if var3 >0 then
        INSERT INTO actabreach (actanum, actaserie, breach_id) 
        VALUES (p_actanum, p_actaserie, var3);
    end if;
    
    if var4 >0 then
        INSERT INTO actabreach (actanum, actaserie, breach_id) 
        VALUES (p_actanum, p_actaserie, var4);
    end if;
    
    if var5 >0 then
        INSERT INTO actabreach (actanum, actaserie, breach_id) 
        VALUES (p_actanum, p_actaserie, var5);
    end if;
    
    if var6 >0 then
        INSERT INTO actabreach (actanum, actaserie, breach_id) 
        VALUES (p_actanum, p_actaserie, var6);
    end if;
    
    if var7 >0 then
        INSERT INTO actabreach (actanum, actaserie, breach_id) 
        VALUES (p_actanum, p_actaserie, var7);
    end if;
    
    if var8 >0 then
        INSERT INTO actabreach (actanum, actaserie, breach_id) 
        VALUES (p_actanum, p_actaserie, var8);
    end if;
    
    if var9 >0 then
        INSERT INTO actabreach (actanum, actaserie, breach_id) 
        VALUES (p_actanum, p_actaserie, var9);
    end if;
    
    if var10 >0 then
        INSERT INTO actabreach (actanum, actaserie, breach_id) 
        VALUES (p_actanum, p_actaserie, var10);
    end if;
    
/*Tercer INSERT de CAUSA en tabla CAUSA*/

    INSERT INTO causa (causanum, causafecha)
    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)
    VALUES ('I', p_actanum, p_actaserie, p_actafecha, p_actahora, p_usu, CURRENT_DATE(), CURRENT_TIME()); 

END


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 no estoy en la seccion correspondiente, que me informen asi lo posteo donde corresponde. Saludos y Gracias
Responder Con Cita
 



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
Trigger dinámico para Auditoría de Tablas jwmoreira Firebird e Interbase 6 11-03-2010 22:53:07
Procedimiento almacenado Ledian_Fdez SQL 0 03-03-2010 15:38:18
Consejo para principiante sobre Disparador y Procedimiento almacenado NPIdea Firebird e Interbase 5 18-06-2008 08:13:00
Procedimiento almacenado para obtener Rubros y subrubros oliverinf Firebird e Interbase 7 27-08-2004 01:25:42
Procedimiento almacenado - BDE Ricardo Alfredo Conexión con bases de datos 1 16-06-2003 21:31:34


La franja horaria es GMT +2. Ahora son las 22:43:17.


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