原始 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 记录集中的数据。