web-dev-qa-db-fra.com

Comment enregistrer les modifications de données de l'accès au niveau de la table?

Je soutiens une base de données d'accès pour une organisation à but non lucratif. Nous avons des problèmes avec des données mystérieusement modifiées, et il y a eu un débat convivial, de savoir si cela est causé par les utilisateurs qui ne sont pas la plus petite littéraité informatique ou par certains de mes technologies de fond.

J'ai ajouté des chèques au niveau de l'interface utilisateur pour ces conditions, mais j'aimerais mettre des chèques au niveau de la table de base de données pour vous connecter lorsque certains champs sont modifiés. De cette façon, je saurai sur la modification si elle a été initiée par un utilisateur ou juste à partir d'une requête de mise à jour en cours d'exécution en arrière-plan. Normalement j'utiliserais un on update déclencheur, mais à ma connaissance, l'accès ne prend pas en charge les déclencheurs. Y a-t-il une autre fonctionnalité de journalisation ou de déclenchement de type déclencheur disponible dans Access?

8
BenV

En plus de la méthode de LittlebobbobTables, il existe une troisième option qui implique de faire un _audit Table pour chaque table régulière et écrit toute une logique Lotta pour les soutenir, de sorte que, lorsque les choses sont changées, vous insérez un enregistrement dans ces tables pour le faire. (Vous savez déjà lorsque vous enregistrez/la mise à jour/la suppression des enregistrements, oui?)

Certes, voici comment les "bases de données plus grandes" le font, l'inconvénient ici est le lot de logique que vous devez faire manuellement pour simuler le travail de type déclencheur sur un serveur.

4
jcolebrand

Notez que par ex. SQL Server Express est gratuit et pourrait potentiellement être un remplacement d'une chute d'accès. Cela vous donnerait la fonctionnalité de vérification dont vous avez besoin. Je ne pense pas que l'approche "Table d'audit" est viable; Il suppose que quiconque se connecte à la base de données le fait via le client "officiel" qui a cette logique. Avec des déclencheurs, il n'y a aucun moyen d'obtenir aux données sans qu'ils tirent à partir d'un client aléatoire.

Une troisième option est de wifshark ou similaire à regarder réellement le trafic entre le client et la base de données (je suppose que cela ne sera pas le protocole de partage de fichiers, mais que vous pouvez voir exactement qui fait quoi et quand et de quelle machine. L'inconvénient est que cela nécessite beaucoup de stockage, certains scripts pour faire l'analyse et peuvent avoir une incidence sur la performance.

4
Gaius

Malheureusement, Microsoft Access n'a pas de déclencheurs, ni quelque chose même ressemblant à des déclencheurs. En haut de ma tête, vous avez quelques choix peu attrayants:

  • Créez DateModified et UserModified colonnes et mettez à 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 n'aura pas d'antécédents à regarder ..
  • Gardez votre accès à votre accès et portez vos tables sur une extrémité 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).