Les objets d'accès aux données (DAO) LastUpdate propriété retourne dates /heures incorrectes dans la base de données Microsoft Access

Avancée : Nécessite un codage expert, une interopérabilité et des compétences multi-utilisateurs.Cet article ne s'applique qu'à une base de données Microsoft Access (.mdb).

Symptômes

La propriété LastUpdated DAO (Objets d'accès aux données) renvoie les dates/heures incorrectes pour les formulaires, rapports, macros et modules Microsoft Access.

Cause

Microsoft Access n'informe pas le moteur de base de données Microsoft Jet de la modification d'objets spécifiques à l'accès (formulaires, rapports, macros et modules); par conséquent, la colonne DateUpdate dans la table MSysObjects n'est jamais mise à jour à la date et à l'heure correctes. Le même comportement est vrai pour Microsoft Access 2007, qui utilise le moteur de base de données Microsoft Access.

Statut

Microsoft a confirmé qu'il s'agit d'un problème dans les produits Microsoft qui sont répertoriés au début de cet article.

Informations supplémentaires

La propriété LastUpdated fournie par DAO renvoie la date/heure correcte pour les objets moteurs de base de données (tableaux, requêtes et relations), mais elle ne renvoie que la date de création, et non la dernière date modifiée pour les objets spécifiques Microsoft Access (formulaires, rapports, macros et modules). Avant Microsoft Access 2000, Microsoft Access utilisait un fichier de base de données Jet (.mdb) pour stocker à la fois les objets de base de données (tables, requêtes et relations) ainsi que les objets spécifiques à Microsoft Access (formulaires, rapports, macros et modules). Microsoft Access a stocké ses objets spécifiques dans les tables du système Jet, en particulier les tables MSysObjects et MSysModules (ou MSysModules2). La colonne DateUpdate dans la table MSysObjects est responsable du stockage de la dernière date de modification d'un objet et est la colonne que la propriété DAO LastUpdated utilise pour renvoyer la dernière date modifiée d'un objet. Lorsqu'un utilisateur a modifié et enregistré un objet dans des versions antérieures, Microsoft Access a informé le moteur de base de données Jet que l'objet avait été modifié, et Jet a mis à jour la colonne DateUpdate à la date et à l'heure actuelles. Microsoft Access 2000 a introduit les fichiers du projet Access (.adp), qui ont la capacité de se connecter directement aux bases de données Microsoft SQL Server sans utiliser le moteur de base de données Jet. Étant donné que les fichiers ADP n'utilisent pas le moteur de base de données Jet (ou le moteur de base de données d'accès), Access ne pouvait pas utiliser le même format de stockage précédemment utilisé dans les bases de données Jet pour les objets spécifiques à l'accès. Il a dû les stocker dans un nouveau format de stockage doc OLE qui est accessible à la fois dans les bases de données Jet et les projets d'accès. Lorsque l'utilisateur crée initialement un nouvel objet spécifique Microsoft Access, tel qu'un formulaire, le moteur de base de données entre toujours la date et l'heure actuelles dans les colonnes DateCreate et DateUpdate dans la table MSysObjects. Toutefois, lorsque l'utilisateur modifie et enregistre l'objet, Microsoft Access n'informe pas le moteur de base de données ; par conséquent, la colonne DateUpdate reste toujours la même. En outre, vous avez peut-être remarqué que la fenêtre Base de données (dans les versions antérieures à Access 2007) et le panoramique de navigation dans Access 2007 ou Access 2010 affiche la date et l'heure correctes pour la dernière modification d'un objet. C'est parce que Microsoft Access utilise son propre mécanisme interne pour stocker la date créée et la date modifiée, indépendamment du moteur de base de données. Malheureusement, Microsoft Access n'expose pas ces informations dans son modèle d'objet ; par conséquent, il n'y a aucun moyen programmatique d'accéder à ces informations dans Microsoft Access.

Procédure pour reproduire le problème

  1. Démarrez Microsoft Access, puis créez une nouvelle base de données vierge.

  2. Créez un nouveau formulaire vierge dans la vue Design.

  3. Ajouter une boîte de texte au formulaire.

  4. Enregistrer le formulaire comme frmLastUpdated, puis le fermer.

  5. Dans Access 2003 et les versions antérieures d'Access, sélectionnez le menu Afficher et cliquez sur Détails. Dans Access 2007 ou Access 2010, cliquez à droite sur l'en-tête de catégorie dans le volet navigation à gauche et cliquez sur Afficher par détails. Cela affiche les dates modifiées et créées pour chaque objet. Notez que les colonnes modifiées et créées pour le formulaire frmLastUpdated sont fixées à la même date et à la même heure.

  6. Appuyez sur CTRL-G pour ouvrir la fenêtre immédiate dans Visual Basic Editor. (Dans Access 2007 ou Access 2010, vous devez d'abord activer le contenu ou la base de données doit être dans un endroit de confiance.)

  7. Tapez la ligne suivante dans la fenêtre immédiate, puis appuyez sur ENTER:

    ?CurrentDb.Containers("Forms").Documents("frmLastUpdated").LastUpdated

    Notez que la date et l'heure retournées correspondent aux colonnes modifiées et créées dans la fenêtre Base de données.

  8. Appuyez sur ALT-F11 pour revenir à Microsoft Access.

  9. Ouvrez le formulaire frmLastUpdated dans la vue Design.

  10. Ajoutez une deuxième boîte de texte au formulaire, puis enregistrez-la et fermez-la. Notez que la colonne modifiée dans la fenêtre Base de données contient une date et une heure mises à jour pour le formulaire.

  11. Répétez les étapes 7 et 8.

Remarque La propriété LastUpdated renvoie toujours la date et l'heure d'origine au lieu de la nouvelle date et heure affichées dans la colonne modifiée dans la fenêtre Base de données.

Besoin d’aide ?

Développez vos compétences
Découvrez des formations
Accédez aux nouvelles fonctionnalités en avant-première
Rejoindre Microsoft Insider

Ces informations vous ont-elles été utiles ?

Nous vous remercions pour vos commentaires.

Merci pour vos commentaires. Il serait vraisemblablement utile pour vous de contacter l’un de nos agents du support Office.

×