¿Cómo registrar cambios de datos en Access a nivel de tabla?

8

Apoyo una base de datos de Access para una organización sin fines de lucro. Tenemos algunos problemas con los datos que cambian misteriosamente, y ha habido un debate amistoso sobre si esto es causado por usuarios que no saben mucho de informática o por parte de mi procesamiento en segundo plano.

Agregué algunas verificaciones en el nivel de IU para estas condiciones, pero me gustaría poner algunas verificaciones en el nivel de la tabla de la base de datos para registrar cuando se cambian ciertos campos. De esta manera sabré sobre el cambio si fue iniciado por un usuario o simplemente desde una consulta de actualización que se ejecuta en segundo plano. Normalmente usaría un on updatedisparador, pero que yo sepa, Access no admite disparadores. ¿Hay alguna otra funcionalidad de inicio de sesión o de tipo disparador disponible en Access?

BenV
fuente

Respuestas:

4

Desafortunadamente, Microsoft Access no tiene desencadenantes, ni nada que se parezca a los desencadenantes. Fuera de mi cabeza, tienes un par de opciones poco atractivas:

  • Cree DateModifiedy UserModifiedcolumnas, y actualice su código para incluir estos valores. La desventaja es que solo conocerá a la última persona que actualizó un registro, y no tendrá un historial para ver.
  • Mantenga su front-end de Access y transfiera sus tablas a un back-end de SQL Server Express. De esta manera, podrá utilizar disparadores (así como trabajos de respaldo y otras cosas buenas).
LittleBobbyTables - Au Revoir
fuente
4

Además del método LittleBobbyTables, hay una tercera opción, que consiste en hacer una _audittabla para cada tabla normal y escribir una lógica de lotta completa para admitirlos, de modo que cuando las cosas cambien, inserte un registro en esas tablas para hacerlo. (ya sabe cuándo guarda / actualiza / elimina los registros, ¿sí?)

De acuerdo, así es como lo hacen las "bases de datos más grandes", la desventaja aquí es la gran cantidad de lógica que tiene que hacer manualmente para simular el trabajo de tipo disparador en un servidor.

jcolebrand
fuente
4

Tenga en cuenta que, por ejemplo, SQL Server Express es gratuito y podría ser un reemplazo directo para Access. Esto le daría la funcionalidad de auditoría que necesita. No creo que el enfoque de "tabla de auditoría" sea viable; se supone que cualquiera que se conecte a la base de datos lo hace a través del cliente "oficial" que tiene esa lógica. Con los disparadores no hay forma de acceder a los datos sin que disparen desde ningún cliente aleatorio.

Una tercera opción es usar Wireshark o similar para observar el tráfico entre el cliente y la base de datos (supongo que esto no será TDS sino un protocolo para compartir archivos), entonces puede ver exactamente quién hace qué, cuándo y desde qué máquina. La desventaja de esto es que requiere mucho almacenamiento, algunas secuencias de comandos para hacer el análisis y puede afectar el rendimiento.

Gayo
fuente