在 Access 中检索 SharePoint 列表数据时出现的问题

症状

从 Microsoft Access 中的 Microsoft SharePoint 列表请求数据时,可能会收到以下错误消息之一:

  • 执行批量查询或将数据发送到服务器时出错。 重新连接表以解决冲突或放弃挂起的更改。
  • 所有 SharePoint 表均断开连接。
  • 不能更新。 数据库或对象为只读。
  • Microsoft Office Access 数据库引擎找不到对象“<链接表名称>”。 请确定该对象存在,并正确拼写其名称和路径名。
  • 链接表“<链接表名称>”不可用。 Microsoft Access 无法联系服务器。 检查网络连接或联系服务器管理员。
  • 您没有使用“链接表名称>”<对象所需的权限。 请让系统管理员或此对象的创建者为您设置适当的权限。

或者,可能会遇到以下问题之一:

  • 尝试打开链接表时,访问会意外退出或崩溃。
  • 尝试打开链接表时,访问权限显示为死锁。

原因

当 Access 从 SharePoint 列表中请求列表项时,Access 将等待有限时间返回该数据。 具体而言,如果 Access 在 30 秒后未收到给定批处理的数据,则会中止请求,并可能将批处理作为新请求重新发送。 如果 Access 在发送这些批处理时遇到失败,则程序可能会放弃并返回错误消息。

可能导致此问题的一些条件包括:

  • Microsoft SharePoint Server 的运行状况存在问题,例如,它运行缓慢。
  • 你有一个低带宽连接。
  • 你有一个大型或复杂的 SharePoint 列表或文档库。
  • 你和服务器之间有很长的距离。
  • SharePoint 列表或文档库中有超过 255 列。
  • 使用 SharePoint Online 时会受到限制。 有关 SharePoint Online 中限制的详细信息,请参阅 避免在 SharePoint Online 中受到限制或阻止

解决方案

若要解决此问题,请使用以下方法之一:

  • 方法 1:通过避免可能导致问题的条件来缩短响应时间。

  • 方法 2:通过使用 SharePoint 中的视图,然后将 Access 链接到该视图,减少从服务器请求的数据量。

    有关如何创建使用 SharePoint 视图的链接表的详细信息,请参阅 ImportSharePointList 宏操作

  • 方法 3:通过添加 DataFetchTimeout 注册表项来增加 Access 中的超时

    重要

    此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,请务必严格按照这些步骤操作。 为了加强保护,应先备份注册表,再进行修改。 如果出现问题,可以还原注册表。 有关如何备份和还原注册表的详细信息,请参阅如何备份和还原 Windows 中的注册表

    备注

    当 Access 将其缓存的数据与 SharePoint 列表同步时,DataFetchTimeout 注册表项最初仅适用于读取请求。 从 Access 2016即点即用版本 16.0.9215.5830 开始,此注册表项也适用于插入、更新和删除操作。

在 Access 2010 中添加 DataFetchTimeout 注册表项

  1. 应用以下修补程序包:

    Access 2010 修补程序包 (Stslist-x-none.msp) 的说明:2011 年 6 月 28 日

  2. 打开注册表编辑器,找到并选择以下注册表子项:

    对于 32 位 Windows 上的 32 位访问或 64 位 Windows 上的 64 位 Access

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\14.0\Access Connectivity Engine\Engines

    对于 64 位 Windows 上的 32 位访问

    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\14.0\Access Connectivity Engine\Engines

  3. 在“编辑”菜单上,指向“新建”,然后单击“DWORD 值”

  4. 键入 DataFetchTimeout,然后按 Enter

  5. 右键单击“ DataFetchTimeout”,然后单击“ 修改”。

  6. “基数”中选择“小数”,在“值数据”框中键入 90000,然后单击“确定”。

    如果值不能解决问题,请尝试使用更大的值。 DataFetchTimeout 以毫秒为单位。

  7. 退出注册表编辑器。

在 Access 2013 中添加 DataFetchTimeout 注册表项

  1. 打开注册表编辑器,找到并选择以下注册表子项:

    对于 32 位 Windows 上的 32 位访问或 64 位 Windows 上的 64 位 Access

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\15.0\Access Connectivity Engine\Engines

    对于 64 位 Windows 上的 32 位访问

    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\15.0\Access Connectivity Engine\Engines

  2. 在“编辑”菜单上,指向“新建”,然后单击“DWORD 值”

  3. 键入 DataFetchTimeout,然后按 Enter

  4. 右键单击“ DataFetchTimeout”,然后单击“ 修改”。

  5. “基数”中选择“小数”,在“值数据”框中键入 90000,然后单击“确定”。

    如果值不能解决问题,请尝试使用更大的值。 DataFetchTimeout 以毫秒为单位。

  6. 退出注册表编辑器。

在 Access 2016 中添加 DataFetchTimeout 注册表项

  1. 打开注册表编辑器,找到并选择以下注册表子项:

    • 对于 ACCESS 的 MSI 安装

      对于 32 位 Windows 上的 32 位访问或 64 位 Windows 上的 64 位 Access

      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\16.0\Access Connectivity Engine\Engines

      对于 64 位 Windows 上的 32 位访问

      HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\16.0\Access Connectivity Engine\Engines

    • 对于 Access 的即点即用安装

      对于 32 位 Windows 上的 32 位访问或 64 位 Windows 上的 64 位 Access

      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\Office\16.0\Access Connectivity Engine\Engines

      对于 64 位 Windows 上的 32 位访问

      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Wow6432Node\Microsoft\Office\16.0\Access Connectivity Engine\Engines

  2. 在“编辑”菜单上,指向“新建”,然后单击“DWORD 值”

  3. 键入 DataFetchTimeout,然后按 Enter

  4. 右键单击“ DataFetchTimeout”,然后单击“ 修改”。

  5. “基数”中选择“小数”,在“值数据”框中键入 90000,然后单击“确定”。

    如果值不能解决问题,请尝试使用更大的值。 DataFetchTimeout 以毫秒为单位。

  6. 退出注册表编辑器。