为什么我的MS Access查询不可更新

时间:2015-10-20 15:48:16

标签: sql database ms-access

enter image description here

大家好,

这一直困扰着我。 Access表示此查询不可更新。我怎样才能让它更新?

当我删除tblMasterContracts1时,它是可更新的,但这不符合我的目标。这一般是关系数据库的限制吗?

SQL:

SELECT tblBuildings.[Building Address]
FROM (tblBuildings INNER JOIN (tblContacts
    INNER JOIN tblContactsBuildings ON tblContacts.ContactID = tblContactsBuildings.ContactID)
        ON tblBuildings.BuildingID = tblContactsBuildings.BuildingID)
    INNER JOIN tblMasterContracts1 ON tblBuildings.BuildingID = tblMasterContracts1.BuildingID;

2 个答案:

答案 0 :(得分:0)

Allen Browne组成了一个使查询不可更新的条件列表:

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

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

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

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

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

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

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

  •   
  • JOIN中的字段未正确编制索引:JOINed字段中没有主键或唯一索引。

  •   
  • 查询的Recordset Type属性为Snapshot。在查询的属性中将Recordset Type设置为“Dynaset”。

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

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

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

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

  •   
  • 查询输出的字段是Calcluated字段(Access 2010。)

  •   

(引自http://allenbrowne.com/ser-61.html。)

如您所见,仅通过查看ER图无法验证这些条件。作为调试辅助工具,我建议从查询中删除表并重新添加它们,直到查询变为不可更新。一旦发生这种情况,请查看上面的列表,了解您添加的表格。

答案 1 :(得分:0)

那是那个:

  

JOIN中的字段未正确编制索引:JOINed字段中没有主键或唯一索引。

左边的3个表之间有1:n关系,但与tblMasterContracts1没有明确的关系。

因此,您应该将外键从tblMasterContracts1定义为tblBuildings

此外,tblContactsBuildings应具有ContactIDBuildingID的复合主键。