2015-10-20 74 views
-5

enter image description here为什么我的MS Access查询不可更新

家伙嗨,

这一直困扰着我为晚。 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

查询的图片没用。显示ACTUAL sql –

+0

这不是一个查询,这是一个ER图。即使它是一个查询,你也必须解释“不可更新”。 – patricksweeney

+1

@patricksweeney:访问用户知道“不可更新”意味着什么(来自痛苦的体验)。 – Heinzi

回答

0

Allen Browne组成,使查询不可更新的情况的列表:

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

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

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

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

  • 它涉及一个联盟。联合查询总是只读的。

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

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

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

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

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

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

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

  • 查询调用VBA函数,但数据库不在一个值得信赖的位置,所以代码无法运行。 (见的黄色框在此访问2007页的顶部。)

  • ,查询输出Calcluated领域(Access 2010中)的字段

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

正如您所看到的,这些条件无法通过单独查看ER图来验证。作为一种调试手段,我建议从查询中删除表并重新添加它们,直到查询变为不可更新。一旦发生这种情况,请检查上面列表中您添加的表格。

+0

谢谢,我知道这个列表。只有第七点可能适用于我的查询。你认为什么是一个很好的解决方法? –

0

这就是一个:在

的字段JOIN不正确索引:有在连接字段没有主键或唯一索引。

你有1:N的3间关系左的表格,但没有明确的关系tblMasterContracts1

所以你应该定义从tblMasterContracts1tblBuildings的外键。

此外,tblContactsBuildings应该有一个复合主键ContactIDBuildingID