Un verrou exclusif est requis pour enregistrer les modifications de conception dans les objets Access

Numéro de la base de connaissances d’origine : 283228

Remarque

Avancé : nécessite des compétences d’experts en codage, en interopérabilité et en multi-utilisateur. Cet article s’applique uniquement à une base de données Microsoft Access (.mdb et .accdb).

Symptômes

Lorsque vous essayez de personnaliser des barres d’outils ou d’ouvrir un formulaire, un rapport, une macro ou un module Microsoft Access en mode Création, vous recevez le message suivant :

Pour l’instant, vous ne disposez pas d’un accès exclusif à la base de données. Si vous apportez des modifications, vous ne pourrez peut-être pas les enregistrer ultérieurement.

Lorsque vous essayez d’enregistrer les modifications de conception que vous avez apportées à un formulaire, un état, une macro ou un module Access, vous recevez le message suivant :

Pour l’instant, vous ne disposez pas d’un accès exclusif à la base de données. Vos modifications de conception ne seront pas enregistrées.

Lorsque vous essayez d’enregistrer une nouvelle page d’accès aux données, le message suivant s’affiche :

Impossible de créer un lien vers cette page d’accès aux données, car la base de données ne peut pas être verrouillée exclusivement.

Cause

  • Vous essayez d’ouvrir un formulaire, un état, une macro, un module ou une barre de commandes en mode Création.
  • Vous essayez d’enregistrer les modifications de conception apportées à l’un de ces types d’objets ou à un nouveau lien de page, tandis que d’autres utilisateurs ont la même base de données ouverte.

Pour enregistrer les modifications de conception apportées à ces types d’objets, Access doit être en mesure d’obtenir un verrou exclusif sur la base de données.

Résolution

Dans les situations où plusieurs développeurs conçoivent simultanément une application Access, vous devez implémenter le contrôle de code source à l’aide du complément Microsoft Visual SourceSafe pour Microsoft Access. Ou vous devez distribuer des copies de travail locales de la base de données à chaque développeur. Une discussion sur chacune de ces options suit.

Implémentation du contrôle de code source

Le Visual SourceSafe Add-In Microsoft Access vous permet de placer votre application Access sous contrôle de code source pendant son développement. Si vous placez votre application sous contrôle de code source, cela vous permet de suivre et de stocker les modifications apportées à votre application au fil du temps. À l’aide de Microsoft Visual SourceSafe, vous pouvez passer en revue l’historique d’un objet, puis revenir aux versions antérieures d’un objet. Vous pouvez case activée des objets dans l’application Microsoft Access, les modifier ou créer des objets dans leur copie locale, puis les case activée dans la base de données main sous contrôle de code source. Le Visual SourceSafe Add-In Microsoft Access est disponible avec Microsoft Office XP Developer. Pour utiliser le complément Microsoft Access Visual SourceSafe, vous devez également installer Microsoft Visual SourceSafe, qui est également disponible avec Microsoft Office XP Developer, séparément.

Utilisation de bases de données de travail individuelles

Une autre option que vous pouvez implémenter consiste à conserver une copie master de l’application de base de données dans un emplacement centralisé, puis à utiliser des copies de travail individuelles de la base de données sur l’ordinateur de chaque développeur. Chaque développeur développe une partie individuelle de l’application dans la copie de travail locale de la base de données. Lorsque les développeurs souhaitent apporter une modification à un objet dans l’application de base de données, ils importent l’objet à partir de la base de données master dans la base de données de travail locale. Ensuite, les développeurs apportent les modifications requises à l’objet dans la base de données de travail locale et enregistrent l’objet. Lorsque les développeurs sont prêts à valider les modifications apportées à la base de données master, ils exportent l’objet vers la base de données master, en remplaçant l’objet d’origine.

L’un des inconvénients de cette approche est qu’il n’existe aucun moyen de déterminer si plusieurs développeurs travaillent simultanément sur le même objet localement. Lorsque le développeur exporte l’objet vers la base de données master, il peut remplacer sans le savoir les modifications qu’un autre développeur a validées dans la base de données master.

Informations supplémentaires

Pour enregistrer les modifications apportées à la conception d’objets spécifiques à Access, tels que les formulaires, les états, les nouveaux liens de page, les macros, les modules et les barres de commandes, Access 2002 doit être en mesure de verrouiller la base de données exclusivement pendant l’opération d’enregistrement . Les tables, requêtes et relations ne relèvent pas de cette restriction, car il s’agit d’objets spécifiques à Microsoft Jet. Microsoft utilise cette exigence avec Access 2002 pour plusieurs raisons :

  • Il fournit une cohérence avec d’autres applications clientes Visual Basic Environment.
  • Il arrête la dépendance vis-à-vis du moteur de base de données Jet.
  • Il améliore la stabilité des objets spécifiques à Access.

Assure la cohérence avec d’autres applications clientes d’environnement Visual Basic

Étant donné qu’Access 2002 héberge l’environnement Visual Basic, le modèle d’enregistrement utilisé par Microsoft Access doit être cohérent avec les autres applications qui hébergent l’environnement Visual Basic. L’environnement Visual Basic autorise uniquement la modification et l’enregistrement exclusifs des projets Visual Basic qui ne sont pas sous contrôle de code source. Cela vaut pour Visual Basic 6.0, ainsi que pour toutes les applications Office qui hébergent l’environnement Visual Basic.

Arrête la dépendance sur le moteur de base de données Jet

Access offre la possibilité de créer des fichiers de projet Microsoft Access (.adp) ainsi que des bases de données Microsoft Access (.mdb). À l’aide d’un projet Access, les développeurs peuvent utiliser Microsoft SQL Server comme autre moteur de base de données pour Microsoft Jet. Auparavant, tous les objets spécifiques d’Access (formulaires, états, macros, modules et barres de commandes) dépendaient du moteur de base de données Jet pour le stockage. Ces objets ont été stockés dans des tables système spécifiques à Access dans la base de données Microsoft Jet. Étant donné qu’Il est possible pour Access d’utiliser Microsoft SQL Server comme alternative à Microsoft Jet, Microsoft a dû développer un mécanisme de stockage pour les objets spécifiques à Access qui ne s’appuie pas sur le moteur de base de données Jet.

Améliore la stabilité des objets spécifiques à Access

Le modèle de stockage de projet améliore la stabilité des objets spécifiques à Access et du projet Visual Basic. Visual Basic pour Applications n’a jamais autorisé la modification multi-utilisateur de projets Visual Basic sans contrôle de code source. Microsoft Access 95 et Microsoft Access 97 pourraient contourner cette restriction en masquant les modifications apportées au projet dans un environnement multi-utilisateur de Visual Basic pour Applications, puis en les fusionnant dans le projet ultérieurement. Toutefois, cela avait le potentiel d’affecter la stabilité du projet Visual Basic. Par conséquent, Microsoft Access nécessite un verrou exclusif lors de la conception d’objets spécifiques à Access pour s’assurer que le projet n’a qu’un seul éditeur.

Modification d’objets Access dans un environnement multi-utilisateur

Étant donné que les utilisateurs peuvent ouvrir une base de données pour une utilisation exclusive ou partagée, le comportement d’enregistrement affiché par Access dépend de la façon dont l’utilisateur a ouvert la base de données et si plusieurs utilisateurs y accèdent actuellement.

Si un développeur ouvre la base de données pour une utilisation exclusive, il peut enregistrer la conception d’un objet spécifique à Access, à condition que le développeur puisse ouvrir la base de données pour un accès en lecture/écriture et dispose des autorisations appropriées pour modifier la conception de l’objet.

Si un utilisateur ouvre la base de données pour une utilisation partagée, l’utilisateur peut enregistrer la conception d’un objet spécifique à Access, à condition qu’il puisse ouvrir la base de données pour un accès en lecture/écriture, qu’il dispose des autorisations appropriées pour modifier la conception de l’objet et qu’Access puisse obtenir un verrou exclusif sur la base de données.

Promotion des verrous

Pour vous assurer que l’utilisation de la base de données est exclusive, Access utilise la fonctionnalité de contrôle de connexion du moteur de base de données Jet pour promouvoir le verrou partagé de l’utilisateur en exclusif. Access tente de promouvoir un verrou partagé en verrou exclusif dès que l’utilisateur ouvre un formulaire, un état, une macro ou une barre de commandes en mode Création. Access tente de verrouiller la promotion à ce stade afin d’empêcher le scénario où un utilisateur a apporté plusieurs modifications de conception uniquement pour constater ultérieurement que l’utilisateur ne peut pas les enregistrer, car Access ne peut pas obtenir de verrou exclusif. En essayant la promotion de verrouillage dès que l’utilisateur ouvre un objet en mode Création, Access peut avertir l’utilisateur s’il ne peut pas obtenir un verrou exclusif avant que l’utilisateur n’apporte des modifications de conception. Access n’essaie pas de verrouiller la promotion lors de l’ouverture d’un module en mode Création ; Toutefois, il tente de verrouiller la promotion dès que l’utilisateur modifie un module dans la base de données.

Access conserve le verrou exclusif jusqu’à ce que l’utilisateur enregistre ou ignore tous les objets sale et qu’aucun autre objet ne soit ouvert en mode Création. Par la suite, Access rétrograde le verrou sur partagé si la base de données a été initialement ouverte pour une utilisation partagée.

Si Access ne peut pas promouvoir le verrou en exclusif lorsque l’utilisateur ouvre un objet en mode Création, Access alerte l’utilisateur avec le message :

Pour l’instant, vous ne disposez pas d’un accès exclusif à la base de données. Si vous apportez des modifications, vous ne pourrez peut-être pas les enregistrer ultérieurement.

À la suite de ce message d’avertissement, Access ouvre l’objet en mode Création et autorise l’utilisateur à apporter des modifications de conception. Si l’utilisateur tente d’enregistrer l’objet, Access tente de promouvoir le verrou partagé en exclusif. Si la promotion de verrouillage réussit, Access enregistre l’objet et maintient le verrou exclusif jusqu’à ce que l’utilisateur enregistre ou ignore tous les autres objets sale et qu’aucun objet ne reste ouvert en mode Création. Si la promotion de verrou échoue, l’utilisateur reçoit le message suivant :

Pour l’instant, vous ne disposez pas d’un accès exclusif à la base de données. Vos modifications de conception ne seront pas enregistrées.

Si l’utilisateur tente de fermer l’objet sale et d’enregistrer les modifications, Access invite ensuite l’utilisateur à fermer l’objet et à ignorer les modifications de conception qui lui ont été apportées, ou avec la possibilité de le laisser ouvert et non enregistré.

Procédures pour reproduire le problème

  1. Démarrez deux instances de Microsoft Access sur le même ordinateur.

  2. Ouvrez l’exemple de base de données Northwind.mdb dans les deux instances.

  3. Dans la première instance de Microsoft Access, ouvrez le formulaire Clients en mode Création.

    Vous recevez le message :

    Pour l’instant, vous ne disposez pas d’un accès exclusif à la base de données. Si vous apportez des modifications, vous ne pourrez peut-être pas les enregistrer ultérieurement.

  4. Cliquez sur OK pour effacer le message.

    Le formulaire s’ouvre en mode Création .

  5. Ajoutez un contrôle de zone de texte au formulaire.

  6. Dans le menu Fichier, cliquez sur Enregistrer.

    Vous recevez le message suivant :

    Pour l’instant, vous ne disposez pas d’un accès exclusif à la base de données. Vos modifications de conception ne seront pas enregistrées.

  7. Cliquez sur OK pour effacer le message.

  8. Fermez la deuxième instance d’Access sur votre ordinateur.

  9. Dans la première instance d’Access, essayez à nouveau d’enregistrer le formulaire.

    Le formulaire est enregistré avec succès.