Cómo rastrear y auditar cambios en una base de datos
Tu datos son importantes. De hecho, son cruciales para tu negocio. Entrar, almacenar y mantener datos válidos es el trabajo más importante de cualquier base de datos. Cuando eres el único usuario de la base de datos, puedes limitar los errores. Sin embargo, cuando varios usuarios están modificando datos, muchas cosas pueden salir mal. Es posible que quieras llevar un registro de cambios de entrada de datos. En otras palabras, es posible que quieras saber quién está cambiando los datos y cuándo. El seguimiento de cambios tiene dos beneficios:
![Cómo rastrear y auditar cambios en una base de datos - Video](https://i.ytimg.com/vi/PAjYowVwVdQ/hqdefault.jpg)
- Puedes determinar rápidamente qué operadores están cometiendo errores de forma consistente (o no están cometiendo errores).
- Puedes deshacer rápidamente errores antes de que tus consultas e informes empiecen a generar datos erróneos.
¡La solución de este artículo no es una solución de auditoría real! Ese tipo de seguimiento exhaustivo requiere un gran esfuerzo de desarrollo. Encontrarás que esta solución es fácil de implementar y más que suficiente para la mayoría de las aplicaciones. Sin embargo, no evitará que usuarios inapropiados accedan a tu sistema; para eso necesitas seguridad. Además, un usuario sofisticado sabrá cómo abrir la tabla y eliminar registros que rastrean sus errores, aunque los valores faltantes de la clave principal deberían ser una señal de que faltan registros. La forma más fácil de evitar que los usuarios accedan a la tabla de auditoría es moverla a una base de datos segura y crear un enlace a ella.
Creando los componentes de auditoría
No necesitas tablas individuales para cada formulario de entrada de datos o para cada tabla de datos. Una tabla almacena cada cambio en cualquier tabla. Consulta Tabla A para crear una tabla llamada Audit. Puedes modificar la tabla de ejemplo para adaptarla a tus necesidades. Es probable que no desees eliminar ninguno de los campos de la tabla de ejemplo, pero es posible que desees agregar algunos nuevos. Si lo haces, recuerda actualizar la instrucción SQL INSERT INTO en el subprocedimiento de auditoría que agregarás más adelante.
Tabla A: Esta tabla almacena los cambios de datos. |
Campo ![]() | Tipo de datos | Explicación |
IDRegistro | AutoNúmero | Clave primaria de la auditoría. |
FechaEdición ![]() | Fecha/Hora | La fecha y hora en que se realiza el cambio. |
Usuario | Texto | El usuario que realizó el cambio. |
RegistroID ![]() | Texto | Valor que identifica de forma única el registro modificado. |
TablaOrigen | Texto | Tabla o consulta. |
CampoOrigen ![]() | Texto | El campo modificado. |
ValorAnterior | Texto | El valor original antes del cambio. |
ValorPosterior ![]() | Texto | El nuevo valor después del cambio. |
Cierra la tabla de auditoría y abre el Editor de Visual Basic (VBE). Inserta un módulo estándar y escribe la siguiente declaración Const y subprocedimiento de auditoría:
Const cDQ As String = "" Sub SeguimientoDeAuditoría(frm As Form, idregistro As Control) 'Realiza un seguimiento de cambios en los datos. 'idregistro identifica el control correspondiente al campo clave primaria en frm, para identificar el registro. Dim ctl As Control Dim varAnterior As Variant Dim varPosterior As Variant Dim strNombreControl As String Dim strSQL As String On Error GoTo ManejadorError 'Obtiene los valores modificados. For Each ctl In frm.Controls With ctl 'Evita etiquetas y otros controles sin propiedad Valor. If .ControlType = acTextBox Then If .Value & <> .OldValue Then varAnterior = .OldValue varPosterior = .Value strNombreControl = .Name 'Construye la instrucción INSERT INTO. strSQL = "INSERT INTO " _ & "Auditoria (FechaEdicion, Usuario, RegistroID, TablaOrigen, " _ & " CampoOrigen, ValorAnterior, ValorPosterior) " _ & "VALUES (Now(), " _ & cDQ & Environ("username") & cDQ & ", " _ & cDQ & idregistro.Value & cDQ & ", " _ & cDQ & frm.RecordSource & cDQ & ", " _ & cDQ & .Name & cDQ & ", " _ & cDQ & varAnterior & cDQ & ", " _ & cDQ & varPosterior & cDQ & ")" 'Ve la instrucción evaluada en la ventana Inmediato. Debug.Print strSQL DoCmd.SetWarnings False DoCmd.RunSQL strSQL DoCmd.SetWarnings True End If End If End With Next ctl Set ctl = Nothing Exit Sub ManejadorError: MsgBox Err.Description & vbNewLine _ & Err.Number, vbOKOnly, "Error" End Sub
Guarda el módulo como basSeguimientoAuditoria y cierra el VBE. Puedes llamar al subprocedimiento desde cualquier formulario de entrada de datos. Utilizamos el asistente AutoForm para crear un formulario de ejemplo basado en la tabla Shippers de Northwind (la base de datos de ejemplo que viene con Access). Puedes usar cualquier formulario vinculado, siempre y cuando permita ediciones. Para seguir nuestro ejemplo, abre el módulo del formulario Shippers en el VBE e introduce la siguiente instrucción para llamar al subprocedimiento de auditoría:
Private Sub Form_BeforeUpdate(Cancel As Integer) Call SeguimientoDeAuditoría(Me, IDRegistro) End Sub
Ahora, aquí es donde tendrás que personalizar el procedimiento de ejemplo para que funcione con tus formularios. La llamada pasa dos variables de objeto a SeguimientoDeAuditoría(): el formulario como objeto Form y el control que contiene los datos que identifican de forma única el registro, como objeto Control. El identificador Me maneja el formulario. IDRegistro es la clave primaria de la tabla Shippers (y es un campo AutoNúmero). Utiliza una clave primaria natural de un solo campo o un campo AutoNúmero para este propósito.
![](https://newsmatic.com.ar/wp-content/uploads/twitter-se-convierte-en-objetivo-para-el-malware-segun-usuarios-australianos-150x150.png)
Una vez que guardes tu formulario, estarás listo para comenzar a rastrear ediciones (SeguimientoDeAuditoría() no rastrea nuevos registros, solo cambios en datos existentes). Con el formulario de ejemplo en vista de formulario, cambia el último dígito en el número de teléfono de Speedy Express de 1 a 6, como se muestra en Figura A, y presiona [Tab]. En el siguiente registro, agrega la palabra Service al nombre del transportista, cambia el último dígito en el número de teléfono a 8 y presiona [Tab]. No puedes cambiar el valor de IDRegistro porque es un AutoNúmero. En un formulario de producción, los usuarios ni siquiera verían este valor.
Figura A |
![]() |
Cambia un valor existente en el formulario de ejemplo. |
Presionar [Tab] te lleva al siguiente registro, lo que ejecuta el evento Before Update del formulario. Este procedimiento de evento pasa los dos objetos a SeguimientoDeAuditoría(): el formulario y los datos (como un objeto de control) que identifican de manera única el registro actual. La instrucción For...Each recorre la colección Controls del formulario. Cuando el control actual es un control de cuadro de texto, el procedimiento compara sus valores antiguos y nuevos. Si los valores son iguales, no hay cambios que rastrear y VBA pasa al siguiente control. Cuando los valores son diferentes, el procedimiento ejecuta una instrucción INSERT INTO que agrega un nuevo registro a la tabla de auditoría, rastreando ese cambio.
Tal como está, el procedimiento rastrea solo cambios en controladores de cuadro de texto y memo. Si necesitas rastrear cambios en otros tipos de controladores, cambia esa instrucción If por un Select Case en el formulario agregando todos los controladores necesarios:
![](https://newsmatic.com.ar/wp-content/uploads/no-hay-nada-que-hacer-la-realidad-de-un-impresora-danada-por-incendio-150x150.jpg)
Select Case ctl.ControlType Case acTextBox, acCheckBox, acOptionGroup, ...
Probablemente te hayas dado cuenta de que el procedimiento pasa valores antiguos y nuevos como cadenas de texto, independientemente de su tipo de datos. Esa simplificación hace que este procedimiento sea más fácil de implementar. Después de todo, no necesitas mantener tipos de datos para fines de auditoría.
La instrucción Debug.Print te permite ver la instrucción INSERT INTO evaluada en la ventana Inmediato. Si tienes problemas, esta es una herramienta de depuración útil. Simplemente copia la instrucción evaluada desde la ventana Inmediato y ejecútala en la ventana SQL (Diseño de consulta). Access te dará pistas de error mucho mejores que VBA.
Nuestro procedimiento contiene un mínimo de manejo de errores. Querrás personalizar el procedimiento para adaptarlo a tus necesidades.
Usando la tabla de auditoría
La tabla realiza un seguimiento de cada cambio, creando una perspectiva histórica de lo que está sucediendo con los datos. Cada registro identifica al usuario que realizó el cambio, la fecha en que el usuario realizó el cambio y el cambio real, como se muestra en Figura B. La tabla probablemente aumentará rápidamente, por lo que los filtros o consultas probablemente sean la forma más eficiente de utilizar los registros de seguimiento. Por lo general, puedes limitar el resultado a un registro o usuario específico.
Figura B ![]() |
![]() |
La tabla realiza un seguimiento de los cambios en los datos. |
Susan Sales Harkins es una consultora independiente y autora de varios artículos y libros sobre tecnologías de bases de datos. Su libro más reciente es Mastering Microsoft SQL Server 2005 Express, con Mike Gunderloy, publicado por Sybex. Otras colaboraciones con Gunderloy incluyen Automating Microsoft Access 2003 with VBA, Upgrader's Guide to Microsoft Office System 2003, ICDL Exam Cram 2 y Absolute Beginner's Guide to Microsoft Access 2003, todos publicados por Que. Actualmente, Susan es directora de publicaciones de Database Advisors en http://www.databaseadvisors.com. Puedes comunicarte con ella en [email protected].
En Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre General, allí encontraras muchos artículos similares a Cómo rastrear y auditar cambios en una base de datos , tenemos lo ultimo en tecnología 2023.
Artículos Relacionados