Tuve la necesidad de crear una solución para ver las transacciones que podrían hacer los usuarios, debido a que trabajo con bases e datos de foxpro(DBC) , y se trataba de no meter mas código o funciones en el mismo sistema realizado, si no que el proceso fuera transparente, osea se trata de escribir un código en los procedimientos almacenados de la DBC y esto si crear prg.
1 - Abrir la base de datos a usar
Crear una tabla con con la siguiente información en la base de datos abierta
NOMBRE: HISTORIAL.DBF Campo Campo Nombre Tipo Ancho 1 USUARIO Caracter 20 2 TIPO Caracter 20 3 FECHA DateTime 8 4 TABLA Caracter 30 5 EQUIPO Caracter 50 6 OBSERVA Memo 4
Los indices de la tabla pueden ser creados a su consideración para generar reportes o métodos de consulta propios
2 - Ir a las propiedades de la base de datos y activar la casilla de verificación "SET EVENTS ON " y después dar click a el boton "EDIT CODE", después insertar el siguiente código:
PROCEDURE Hsts(clTipo)
LOCAL clobser
STORE SPACE(0) TO clObser,clObservaciones,clValor,clDatos
IF !TYPE("cp_login")="C"
cp_login="DESCONOCIDO"
ENDIF
clAlias=Alias()
If Empty("clAlias")
Return
Endif
Select (clAlias)
clRutaHistorico=ADDBS(justpath(CURSORGETPROP("Database")))+"HISTORIAL.DBF"
USE IN (SELECT("Historial_cfg"))
nl_error=0
ON ERROR nl_error=1
USE (clRutaHistorico) IN 0 SHARED AGAIN Alias Historial_cfg
ON ERROR
IF nl_error=0
clObser="Campos Modificados"+CHR(13)
FOR Ind=1 TO FCOUNT(clAlias)
clObser=clObser+" "+FIELD(Ind)+"= "
clValor=ALLTRIM(clAlias)+"."+FIELD(Ind)
DO Case
CASE VARTYPE(&clValor) = "N"
clDatos=STR(&clValor,16,2)
CASE VARTYPE(&clValor) = "C"
clDatos=&clValor
CASE VARTYPE(&clValor) = "D"
clDatos=DTOC(&clValor)
CASE VARTYPE(&clValor) = "T"
clDatos=TTOC(&clValor)
OTHERWISE
clDatos=""
ENDCASE
clObser=clObser+clDatos+CHR(13)
NEXT
clObservaciones=clObser
SELECT Historial_cfg
APPEND BLANK
Replace Historial_cfg.TIPO WITH clTipo,;
Historial_cfg.FECHA WITH DATETIME(),;
Historial_cfg.USUARIO WITH Cp_LOGIN,;
Historial_cfg.TABLA WITH clAlias,;
Historial_cfg.EQUIPO WITH LEFT(SYS(0),AT("#",SYS(0))-1),;
Historial_cfg.OBSERVA WITH clObservaciones
USE IN (SELECT("Historial_cfg"))
ENDIF
IF !EMPTY(clalias)
SELECT &clAlias
ENDIF
ON ERROR
RETURN
ENDPROC
3 - En la tablas importantes en donde se requiera el registro de transacciones se realizar lo siguiente modificar datos de la tabla, y ir a la pestaña "Table" y en cada Triggers insertar el siguiente código
Insert Trigger = Hsts("AGREGAR")
update Trigger = Hsts("MODIFICAR")
delete Trigger = Hsts("ELIMINAR")
4 - Listo después de esto entonces cada transacción se estará grabando el la tabla de Historial, solo faltaría hacer un reporte para visualizar informacion del historial
Mauricio Mijangos Villalobos
No hay comentarios. :
Publicar un comentario
Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.