“已超出文件共享锁计数...”大型事务处理期间出错

症状

当一个或多个用户在多用户环境中处理多个事务时,事务可能会失败并显示以下错误消息:

超过了文件共享锁计数。 请增加 MaxLocksPerFile 注册表项值。

原因

如果执行事务所需的锁数超过每个文件的最大锁数,则会发生此错误。

解决方法

重要:本节、方法或任务包含如何修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,请务必严格按照这些步骤操作。 为了加强保护,应先备份注册表,再进行修改。 如果出现问题,可以还原注册表。 有关如何备份和还原注册表的更多信息,请单击下面的文章编号查看 Microsoft 知识库中相应的文章:

322756 如何在 Windows 中备份和还原注册表

若要解决此问题,请增加每个文件的最大锁数。 为此,请使用下列方法之一。

方法 1:将注册表项设置为 MaxLocksPerFile 以增加每个文件的最大锁数

  1. 单击“开始”,然后单击“运行”

  2. 键入 regedit,然后单击“ 确定”。

  3. 根据 Access 安装找到以下注册表项:

    Windows Installer (MSI) 安装

    • 对于在 32 位版本的 Windows 上运行的 32 位版本的 Access,或在 64 位版本的 Windows 上运行的 64 位版本的 Access

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

    • 对于在 64 位版本的 Windows 上运行的 32 位版本的 Access

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

    即点即用安装

    • 对于在 32 位版本的 Windows 上运行的 32 位版本的 Access,或在 64 位版本的 Windows 上运行的 64 位版本的 Access

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

    • 对于在 64 位版本的 Windows 上运行的 32 位版本的 Access

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

    注意

    <x.0> 占位符表示 Office (16.0 = Office 2016、Office 2019、Office LTSC 2021 或 Microsoft 365,15.0 = Office 2013) 。

  4. 在注册表编辑器的右窗格中,双击“MaxLocksPerFile”。

  5. “编辑 DWORD 值 ”对话框中,选择“ 十进制”。

  6. 根据需要修改“ 值数据 ”框的值,然后选择“ 确定”。

请注意 ,此方法更改使用 Microsoft Jet 数据库引擎版本 4.0 的所有应用程序的注册表设置。

方法 2:使用 SetOption 方法暂时更改 MaxLocksPerFile

注意

本文中的示例代码使用 Microsoft 数据访问对象。 若要正确运行此代码,必须引用 Microsoft DAO 3.6 对象库。 为此,请在 Visual Basic 编辑器的“工具”菜单上单击“引用”,并确保选中“Microsoft DAO 3.6 对象库检查”框。

SetOption 方法暂时覆盖每个文件的默认锁数。 设置 MaxLocksPerFile 注册表项时,可以设置每个文件的默认锁数。 使用 SetOption 方法设置新值。 新值在关闭 DBEngine 对象之前有效。 若要使用方法 2,请执行以下步骤:

  1. 打开 Microsoft Access。

  2. 打开数据库,然后按 Alt+F11 启动 Visual Basic 编辑器。

  3. “Microsoft Visual Basic -<Database Name>-[<模块名称> (代码) ]”窗口中,在“视图”菜单中选择“即时窗口”。

  4. “即时窗口”中,输入以下代码:

    DAO.DBEngine.SetOption dbmaxlocksperfile,15000

  5. 按 ENTER 键运行代码行。 此命令暂时将 MaxLocksPerFile 值设置为 15,000。

若要处理大型事务,请设置 MaxLocksPerFile 值以满足你的要求,然后在会话中运行事务。

使用 SetOption 方法对 MaxLocksPerFile 设置所做的更改仅适用于当前会话。

更多信息

MaxLocksPerFile 设置确定 Microsoft Jet 针对文件放置的最大锁数。 默认 MaxLocksPerFile 值为 9,500。 但是,如果使用的是 Novell NetWare 服务器,请不要更改此值,因为每个连接的最大服务器记录锁数为 10,000。