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 programas.
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 despues dar click a el botón "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 información del historial.
Que tal, implemente tu código en un sistema que tengo, pero no realiza ningún registro, me queda la duda de cp_login, de donde le asigno valor, hay algo más que se deba hacer????, gracias!!!
ResponderBorrar