大家好,
这一直困扰着我。 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;
答案 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
应具有ContactID
加BuildingID
的复合主键。