« Le nombre de verrous de partage de fichiers est dépassé... » lors du traitement des transactions volumineuses

Symptômes

Lorsqu’un ou plusieurs utilisateurs traitent de nombreuses transactions dans un environnement multi-utilisateur, les transactions peuvent échouer avec le message d’erreur suivant :

Le nombre de verrous disponibles pour le partage des fichiers est dépassé. Augmentez l'entrée de registre MaxLocksPerFile.

Cause

L’erreur se produit si le nombre de verrous requis pour effectuer une transaction dépasse le nombre maximal de verrous par fichier.

Solution de contournement

Important : cette section, méthode ou tâche contient des étapes vous indiquant comment modifier le Registre. Toutefois, des problèmes graves peuvent se produire si vous modifiez le Registre de façon incorrecte. Par conséquent, veillez à suivre ces étapes scrupuleusement. Pour une meilleure protection, sauvegardez le registre avant de le modifier. Vous pouvez alors le restaurer en cas de problème. Pour plus d’informations sur la procédure de sauvegarde et de restauration du Registre, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :

322756 Comment sauvegarder et restaurer le Registre dans Windows

Pour contourner ce problème, augmentez le nombre maximal de verrous par fichier. Pour cela, appliquez l’une des méthodes suivantes :

Méthode 1 : Définissez la clé de Registre sur MaxLocksPerFile pour augmenter le nombre maximal de verrous par fichier

  1. Cliquez sur Démarrer, puis sur Exécuter.

  2. Tapez regedit, puis cliquez sur OK.

  3. Recherchez la clé de Registre suivante en fonction de votre installation Access :

    Installation de Windows Installer (MSI)

    • Pour la version 32 bits d’Access s’exécutant sur la version 32 bits de Windows, ou la version 64 bits d’Access s’exécutant sur la version 64 bits de Windows

      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\<x.0>\Access Connectivity Engine\Engines\ACE

    • Pour la version 32 bits d’Access s’exécutant sur la version 64 bits de Windows

      HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\<x.0>\Access Connectivity Engine\Engines\ACE

    Installation « Démarrer en un clic »

    • Pour la version 32 bits d’Access s’exécutant sur la version 32 bits de Windows, ou la version 64 bits d’Access s’exécutant sur la version 64 bits de Windows

      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\Office\<x.0>\Access Connectivity Engine\Engines\ACE

    • Pour la version 32 bits d’Access s’exécutant sur la version 64 bits de Windows

      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Wow6432Node\Microsoft\Office\<x.0>\Access Connectivity Engine\Engines\ACE

    Remarque

    L’espace réservé <x.0> représente votre version d’Office (16.0 = Office 2016, Office 2019, Office LTSC 2021 ou Microsoft 365, 15.0 = Office 2013).

  4. Dans le volet droit du registre Rédacteur, double-cliquez sur MaxLocksPerFile.

  5. Dans la boîte de dialogue Modifier la valeur DWORD , sélectionnez Décimal.

  6. Modifiez la valeur de la zone Données de la valeur en fonction des besoins, puis sélectionnez OK.

Notez que cette méthode modifie le paramètre de Registre pour toutes les applications qui utilisent le moteur de base de données Microsoft Jet version 4.0.

Méthode 2 : utiliser la méthode SetOption pour modifier temporairement MaxLocksPerFile

Remarque

L’exemple de code de cet article utilise Microsoft Data Access Objects. Pour que ce code s’exécute correctement, vous devez référencer la bibliothèque d’objets Microsoft DAO 3.6. Pour ce faire, cliquez sur Références dans le menu Outils de la Rédacteur Visual Basic, puis vérifiez que la zone case activée Bibliothèque d’objets Microsoft DAO 3.6 est cochée.

La méthode SetOption remplace temporairement le nombre de verrous par défaut par fichier. Vous définissez le nombre par défaut de verrous par fichier lorsque vous définissez la clé de Registre MaxLocksPerFile. Vous définissez la nouvelle valeur à l’aide de la méthode SetOption. La nouvelle valeur est valide jusqu’à ce que vous fermiez l’objet DBEngine. Pour utiliser la méthode 2, procédez comme suit :

  1. Ouvrez Microsoft Access.

  2. Ouvrez une base de données, puis appuyez sur Alt+F11 pour lancer l’éditeur Visual Basic.

  3. Dans la fenêtre Microsoft Visual Basic -<Nom> de la base de données-[<Nom> du module (Code)] , sélectionnez Fenêtre Exécution dans le menu Affichage .

  4. Dans la fenêtre Exécution, entrez le code suivant :

    DAO.DBEngine.SetOption dbmaxlocksperfile,15000

  5. Appuyez sur la touche Entrée pour exécuter la ligne de code. Cette commande définit temporairement la valeur MaxLocksPerFile sur 15 000.

Pour traiter des transactions volumineuses, définissez la valeur MaxLocksPerFile pour répondre à vos besoins, puis exécutez les transactions dans la session.

Les modifications que vous apportez au paramètre MaxLocksPerFile à l’aide de la méthode SetOption sont disponibles uniquement pour la session active.

Informations supplémentaires

Le paramètre MaxLocksPerFile détermine le nombre maximal de verrous que Microsoft Jet place sur un fichier. La valeur maxlocksPerFile par défaut est 9 500. Toutefois, ne modifiez pas cette valeur si vous travaillez sur un serveur Novell NetWare, car le nombre maximal de verrous d’enregistrement de serveur par connexion est de 10 000.