如何排查在 Access 查询和窗体中更新数据时可能发生的错误

原始 KB 编号: 328828

注意

需要具备基本的宏、编码和互操作性技能。 本文适用于 Microsoft Access 数据库 (.mdb 和 .accdb) 以及 Microsoft Access 项目 (.adp) 。

本文介绍更新查询和表单中的数据时,Microsoft Access 中可能发生的错误。 本文还介绍了错误的原因以及如何排查这些错误。

尝试更新查询或表单中的数据时,可能会收到以下错误消息之一:

操作必须使用一个可更新的查询。

- 或者 -

此 Recordset 不可更新。

有关更新查询中的数据时可能发生的问题的故障排除信息

  • 如果查询基于三个或多个表,并且存在多对一对多关系,则无法直接在查询中更新数据。 可以在窗体或数据访问页中更新数据。 当窗体的 属性设置为 Dynaset (不一致汇报) 时RecordsetType,可以根据查询执行此操作。

  • 当查询是交叉表查询时,无法更新查询中的数据。

  • 当查询是 Microsoft SQL 直通查询时,无法更新查询中的数据。

  • 当查询对字段中的值计算求和、平均值、计数或其他类型的总计时,无法更新查询中的数据。 此外,不能更新从交叉表、查询、选择查询或包含总计或聚合函数的子查询中引用 “更新到 ”行中的字段的查询。 若要解决此问题,请使用更新查询的 “更新到” 行中的域聚合函数。 可以从交叉表查询、选择查询或包含总计或聚合函数的子查询引用字段。

  • 如果查询是联合查询,则无法更新查询中的数据。

  • 当查询的“唯一值”属性设置为“ 是”时,无法更新查询中的数据。 若要解决此问题,请将查询的 Unique Values 属性设置为 “否”。

  • 如果查询包含没有唯一索引的链接 ODBC 表或没有主键的 Paradox 表,则无法更新查询中的数据。 若要解决此问题,请向链接表添加主键或唯一索引。

  • 如果对查询或基础表没有 “更新数据” 权限,则无法更新数据。 若要解决此问题,请分配更新数据的权限。

  • 如果查询包含多个表或一个查询,并且表或查询未由 设计 视图中的联接线联接,则无法更新查询中的数据。 若要解决此问题,必须正确联接表,以便可以更新它们。

  • 如果要更新的字段是计算字段,则无法更新查询中的数据。

  • 如果尝试更新的字段为只读、数据库以只读的形式打开,或者数据库位于只读驱动器上,则无法更新查询中的数据。 若要避免此问题,请不要以只读的形式打开数据库。 如果数据库位于只读驱动器上,请从驱动器中删除只读属性,或将数据库移动到非只读驱动器。

  • 如果尝试更新的记录中的字段被删除或被其他用户锁定,则无法更新查询中的数据。 锁定的记录可以在记录解锁后立即更新。

  • 如果查询基于具有一对多关系的表,则可能无法修改的字段类型如下所示:

    • “一”端的“联接”字段。
    • 数据表中不显示“多”侧联接字段。
    • 更新“一”端的数据后,从“多”端联接字段。
    • 具有外部联接的一对多关系的“一”端表中存在一个空白字段。
    • ODBC 表的整个唯一键不是输出。

    如果从以下列表中采取正确的操作,则可以解决其中任何一个问题:

    • 启用两个表之间的级联更新。
    • 将“多”端的联接字段添加到查询,以便添加新记录。
    • 保存记录。 可以更改“多”侧联接字段。
    • 在“多”侧表中的字段中输入值。 仅当“一”端的联接字段包含该记录的值时,才能执行此操作。
    • 选择 ODBC 表的所有主键字段以允许向其插入。

有关更新表单中的数据时可能发生的问题的故障排除信息

  • 如果表单基于具有多个表的存储过程,则不能更新表单中的数据。

  • 如果窗体基于 ActiveX 数据对象 (ADO) 记录集,则无法更新窗体中的数据。 如果 ADO 记录集是使用 MSDataShape 和 SQL Server OLEDB 提供程序的组合创建的,则访问表单允许编辑 ADO 记录集中的数据。