【问题标题】:MS Access SQL Update Linked table column based on query基于查询的 MS Access SQL 更新链接表列
【发布时间】:2022-01-15 08:12:31
【问题描述】:

我有一个链接表,我需要在其中更新现有行中的列

当我(以编程方式)执行引用选择查询的更新查询时,它不起作用,但如果我执行引用填充查询的表的相同查询,它确实有效。下面的例子

我找不到这是为什么。我使用 Select 查询进行了访问更新查询,并弹出错误“操作必须使用可更新查询”。我查了一下,得到了不同的解释。有人对此有见识吗?是否有关于通过引用选择查询更新链接表的特殊规则?

UPDATE Table1, Query1 
SET Table1.Filename = Query1.Filename 
WHERE (Table1.Client = Query1.Client AND Table1.Id = Query1.Id);

UPDATE Table1, Table2 
SET Table1.Filename = Table2.Filename 
WHERE (Table1.Client = Table2.Client AND Table1.Id = Table2.Id);

【问题讨论】:

    标签: sql vba ms-access


    【解决方案1】:

    要使查询可更新,需要满足一长串条件。基本思想是查询中的所有数据必须干净地映射到一个真实对象,在显示时不进行任何计算。

    主键 ID 在查询中的所有表中必须是唯一且明确定义的。

    Alan Browne published a list 应该包含您需要查找的内容。

    为什么我的查询是只读的?

    如果您无法编辑查询中的数据,此列表可能会对您有所帮助 找出不可更新的原因:

    • 它有一个 GROUP BY 子句。 Totals 查询始终是只读的。

    • 它有一个 TRANSFORM 子句。交叉表查询始终是只读的。

    • 它在 SELECT 子句中使用 First()、Sum()、Max()、Count() 等。聚合记录的查询是只读的。

    • 它包含一个 DISTINCT 谓词。在查询的属性中将唯一值设置为否。

    • 它涉及一个 UNION。联合查询始终是只读的。

    • 它在 SELECT 子句中有一个子查询。取消选中子查询下的显示框,或使用域聚合函数。

    • 它在 FROM 子句中对多个表使用不同方向的 JOIN。删除一些表格。

    • JOIN 中的字段索引不正确:JOIN 字段上没有主键或唯一索引。

    • 查询的记录集类型属性是快照。在查询的属性中将记录集类型设置为“动态集”。

    • 该查询基于另一个只读查询(堆叠查询)。

    • 您的权限是只读的(访问安全性。)

    • 数据库以只读方式打开,或文件属性为只读,或数据库位于只读介质(例如 CD-ROM、网络 没有写权限的驱动器。)

    • 查询调用 VBA 函数,但数据库不在受信任的位置,因此代码无法运行。 (见黄色框 Access 2007 页面的顶部。)

    • 查询输出的字段是计算字段 (Access 2010.)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多