Comment enregistrer les modifications de données dans Access au niveau de la table?

8

Je soutiens une base de données Access pour une organisation à but non lucratif. Nous avons des problèmes avec les données qui changent mystérieusement, et il y a eu, euh, un débat amical sur le fait que cela soit causé par des utilisateurs qui ne sont pas les plus compétents en informatique ou par certains de mes traitements d'arrière-plan.

J'ai ajouté quelques vérifications au niveau de l'interface utilisateur pour ces conditions, mais je voudrais mettre des vérifications au niveau de la table de base de données pour se connecter lorsque certains champs sont modifiés. De cette façon, je saurai si le changement a été initié par un utilisateur ou simplement à partir d'une requête de mise à jour exécutée en arrière-plan. Normalement, j'utiliserais un on updatedéclencheur, mais à ma connaissance, Access ne prend pas en charge les déclencheurs. Existe-t-il d'autres fonctionnalités de journalisation ou de type déclencheur disponibles dans Access?

BenV
la source

Réponses:

4

Malheureusement, Microsoft Access n'a pas de déclencheurs, ni rien qui ressemble à des déclencheurs. Du haut de ma tête, vous avez deux choix peu attrayants:

  • Créer DateModifiedet UserModifiedcolonnes, et mettre à jour votre code pour inclure ces valeurs. L'inconvénient est que vous ne connaîtrez que la dernière personne qui a mis à jour un enregistrement et que vous n'aurez pas d'historique à consulter.
  • Conservez votre serveur frontal Access et transférez vos tables vers un serveur principal SQL Server Express. De cette façon, vous pourrez utiliser des déclencheurs (ainsi que des tâches de sauvegarde et d'autres belles choses).
LittleBobbyTables - Au Revoir
la source
4

En plus de la méthode LittleBobbyTables, il existe une troisième option, qui consiste à créer un _audittableau pour chaque table régulière et à écrire toute une logique pour les prendre en charge, de sorte que lorsque les choses changent, vous insérez un enregistrement dans ces tableaux pour ce faire. (vous savez déjà quand vous enregistrez / mettez à jour / supprimez les enregistrements, oui?)

Certes, c'est comme ça que les «plus grandes bases de données» le font, l'inconvénient ici est le nombre de logiques que vous devez faire manuellement pour simuler un travail de type déclencheur sur un serveur.

jcolebrand
la source
4

Notez que, par exemple, SQL Server Express est gratuit et pourrait potentiellement être un remplacement direct pour Access. Cela vous donnerait la fonctionnalité d'audit dont vous avez besoin. Je ne pense pas que l'approche «table d'audit» soit viable; cela suppose que quiconque se connecte à la base de données le fait via le client "officiel" qui a cette logique.

Une troisième option consiste à Wireshark ou similaire pour réellement regarder le trafic entre le client et la base de données (je suppose que ce ne sera pas TDS mais le protocole de partage de fichiers?), Alors vous pouvez voir exactement qui fait quoi et quand et à partir de quelle machine. L'inconvénient est qu'il nécessite beaucoup de stockage, des scripts pour effectuer l'analyse et peut avoir un impact sur les performances.

Gaius
la source