Tabla que guarda uso de los usuarios access

Disculpen por favor, pero quisiera me puedan ayudar con lo siguiente:

Tengo una aplicación donde me gustaría que exista una tabla donde se guarde todos los usos o accesos y modificaciones que los diferentes usuario hacen, por ejemplo, son tres usuario; Us1, Us2, Us3
el Us1 entro hoy y creo nuevo registro de compra, el la tabla donde se guardan los suceso se tendría que registrar de modo automático y oculto de la siguiente forma:

fecha              hora        usuario                 detalle_uso
08/09/2016  07:45       us1                        ingreso a sistema
08/09/2016  07:46       us1                        ingreso a form compras
08/09/2016  07:46       us1                        nuevo resgistro compra ID:45
08/09/2016  07:50       us1                        guardo resitro compra ID: 45
08/09/2016  07:51       us1                        Salio de form compra
08/09/2016  07:51       us1                        salido del sisitema

Más o menos ese esquema y así con los demás usuario, que modifican eliminar o generan reportes en el sistema. Es posible crear un histórico de esta forma.

1 respuesta

Respuesta
1

Vamos por partes. Lo primero es crear la tabla, fecha y hora puede ser un solo campo o dos como pones en el ejemplo, usuario, detalle uso... "Usuario" si te interesa lo puedes separar en varios campos; usuario de windows, nombre de equipo, usuario de tu bbdd...

A continuación deberías crear la función para crear un registro en la tabla con los parámetros que le pases cada vez que la llames.

Finalmente deberás "llamar" a la función desde todos los eventos que quieras.

Vamos con la función, la deberás poner en un módulo para poder llamarla desde todos los formularios:

'le ponemos el nombre de "controlactividad" y le tenemos que pasar dos parámetros, vusr que será el usuario de la bbdd y vdetalle que será el detalle de la acción realizada
Public Function controlactividad(ByVal vusr As String, ByVal vdetalle As String)
'desactivamos las alertas de access
DoCmd.SetWarnings False
'dimensionamos variable
Dim wshNetwork As Object 'New wshNetwork
Set wshNetwork = CreateObject("WScript.Network")
'igualamos la variable User al nombre de usuario de la sesión de windows
User = wshNetwork.UserName
'podríamos tomar el nombre del equipo con wshNetwork.ComputerName:
nombrecomputadora = wshNetwork.ComputerName
'tomamos el valor de la fecha y la hora en sendas variables
vfecha = Format(Date, "dd/mm/yyyy")
If Day(vfecha) < 13 Then vfecha = Format(vfecha, "mm/dd/yyyy")
vhora = Format(Now, "hh:mm:ss")
'suponiendo que nuestra tabla se llama ControlActividad, y tiene los campos Id, Fecha, Hora, Usiario_Windows, Usuario_BBDD, Detalle_Uso
'creamos la consulta de inserción y la tiramos
ssql = "INSERT INTO [ControlActividad] (Fecha,Hora,Usuario_Windows,Usuario_BBDD,Detalle_Uso) select # " & vfecha & " #, # " & vhora & " #, """ & User & """, """ & vusr & """, """ & vdetalle & """"
DoCmd.RunSQL ssql
End Function

Vamos a ver ahora como llamamos a la función, por ejemplo supongamos que tenemos un formulario que se llama "Acceso2" y queremos crear un registro cada vez que se accede a dicho formulario, entonces deberemos escribir el siguiente código en el evento formload del formulario:

Private Sub Form_Load()
'definimos el usuario de la BBDD, bien lo puedes almacenar en una variable pública o en una tabla. Aquí lo igualo a un literal "Pepito"
vusr = "Pepito"
'definimos el detalle de uso, en este caso se trata del acceso al formulario "Acceso2"
vdetalle = "ingreso a formulario Acceso2"
'llamamos a la función
Call controlactividad(vusr, vdetalle)
End Sub

Entonces este código en el que defines las variables vusr y vdetalle y llamas a la función, lo deberás poner en todos los puntos de la BBDD desde los que quieras que se registre la actividad.

Espero que con esto te dé una idea por lo menos de por dónde empezar.

¡Gracias!  voy a poner manos a la obra, te aviso como me va

Amigo, sera que tiene un pequeño ejemplo a mano, para que me sirva de guía

Claro, algo te puedo dejar. Dime un email y te mando algo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas