2010-12-09 58 views
3

Si vous avez lu mes autres questions récentes, vous avez probablement remarqué que je ne suis pas vraiment un un développeur d'accès .... La plupart de mon expérience est en VB, où j'ai assidûment évité les contrôles liés.Détecter les changements de données avec les événements Form

Maintenant je travaille dans Access 2007. J'ai un formulaire qui est basé sur une table (bien, une requête de table unique), et un sous-formulaire dessus basé sur une table enfant un-à-plusieurs. Je souhaite détecter les modifications apportées par l'utilisateur dans les données de l'un de ces formulaires afin de pouvoir mettre à jour un horodatage dans la table parente. Le champ de date actuel n'est pas affiché à l'utilisateur (du moins pas ici).

Quel serait l'événement approprié pour comprendre le fait que le changement a été fait? Comment est-ce que je devrais faire le changement réel (directement au form.Recordset! DateField | avec une boîte de texte liée cachée | d'une autre manière)?

+0

Vous devez envisager de conserver votre tampon de mise à jour séparément pour les tables parent et enfant. –

+0

@ David - Je ne porte pas de tampon de mise à jour sur l'enfant, mais je souhaite que le tampon de mise à jour parent soit mis à jour lorsque le parent ou l'enfant change. L'enfant est en fait une table de jointure plusieurs-à-plusieurs (le parent est un "kit" de "parties" (maintenu séparément), et mon inquiétude concerne la composition du kit (la table enfant dans la question initiale), pas sur les changements dans les lignes de l'enfant _per se_). – RolandTumble

+1

Je comprends. Je vous suggère très probablement un jour de maintenir les données sur la dernière mise à jour des enregistrements enfants séparément de la date de mise à jour pour l'enregistrement parent - c'est la voix de l'expérience de parler. En outre, je suis un peu méfiant de stocker des données sur les enregistrements enfant dans l'enregistrement parent. Je le vois comme une forme de dénormalisation. Avec des déclencheurs, je ne serais pas nécessairement si inquiet, mais sans eux, je vois cela comme problématique, car il est trop facile de désynchroniser les données. A2010 fournit l'équivalent des déclencheurs, BTW. –

Répondre

4

Vous devrez rechercher l'événement afterupdate, qui est déclenché lorsque le contenu mis à jour d'un contrôle lié est mis à jour dans le jeu d'enregistrements sous-jacent.

Dans cette procédure événementielle, vous devriez être en mesure d'écrire les instructions nécessaires pour mettre à jour votre champ de date. Il n'est pas nécessaire de l'avoir lié à un contrôle sur le formulaire, tant que le champ est dans le jeu d'enregistrements!

+0

Fonctionne parfaitement, merci. C'est en fait ce à quoi je m'attendais, mais je ne savais pas assez si je me sentais plus en sécurité. – RolandTumble

0

Je pense que vous pouvez faire un déclencheur pour mettre à jour le cachet de la table enfant par ligne d'élément que l'utilisateur a fait des changements. Je l'utilise normalement sur l'événement afterupdate par rapport au numéro d'index de la ligne active (si vous êtes dans un formulaire de feuille de données ou continue) en cours d'édition. Mais bien sûr, vous pouvez compter sur combien de fois chaque enregistrement a été mis à jour et vous pouvez mettre à jour la date de timbre de la dernière mise à jour.