[英]MS Access “This recordset is not updatable” in a SELECT query
关于MS Access给我的这条消息,我很难过。
我正在尝试运行SELECT查询,其中包含两个子查询。 所有表都是本地的。
有人可以向我解释为什么以下代码返回此错误?
SELECT S.SKU, S.Date, S.[Order No], P.WSP, P.Average_Cost, S.[Item Status]
FROM [Item Detail Temp] AS S, [FD Worksheets Temp] AS P
WHERE [P].[SKU]=[S].[SKU] AND [P].[Date to use]=(SELECT MIN(P2.[Date to use])
FROM [FD Worksheets Temp] P2
WHERE P2.[SKU] = S.[SKU]
AND P2.[Date to use] >= S.[Date]);
给它谷歌并没有特别的帮助。 我在安全性中启用了宏以确保它不存在,并且从我可以告诉我在上面的代码中没有任何可能导致错误的分组?
此外,我相信代码确实可以正常工作,但是加载栏的整个时间都是在屏幕的左下角显示消息。 它的运行速度也非常慢,而且我确信我在过去运行此查询时没有显示该消息,并且比目前更快。
非常感谢
编辑:看了一下之后,我发现了一些可能的原因:
“ - 它在SELECT子句中使用First(),Sum(),Max(),Count()等。聚合记录的查询是只读的。 - 有一个MIN()函数,可能导致它?
- 它在SELECT子句中有一个子查询。 取消选中子查询下的“显示”框,或使用域聚合功能代替。“
- JOIN中的字段未正确编制索引:JOINed字段上没有主键或唯一索引。 没有唯一键字段,可能是这个原因吗?
JOIN
表源并使用域聚合函数DMin
使您的查询可更新。
FROM
[Item Detail Temp] AS S
INNER JOIN [FD Worksheets Temp] AS P
ON [P].[SKU]=[S].[SKU]
WHERE
[P].[Date to use]=
DMin
(
"[Date to use]",
"FD Worksheets Temp",
"[SKU] = " & S.[SKU] & " AND [Date to use] >= " & Format(S.[Date], "\#yyyy-m-d\#")
);
汉斯,我注意到你删除了你的评论。 我及时得到它,它完美无缺。 现在查询运行时间不到一秒,而之前的查询时间为5-10分钟。
我使用以下方法管理:
SELECT S.SKU, S.Date, S.[Order No], P.WSP, P.Average_Cost, S.[Item Status]
FROM [Item Detail Temp] AS S, [FD Worksheets Temp] AS P
WHERE
[P].[SKU]=[S].[SKU]
AND [P].[Date to use]=
DMin
(
"[Date to use]",
"FD Worksheets Temp",
"[SKU] = " & S.[SKU] & " AND [Date to use] >= " & Format(S.[Date], "\#yyyy-m-d\#")
);
您的查询包含聚合函数MIN
,表应该使用JOIN
子句连接,连接列也应该被索引,详细信息表应该使用具有唯一索引的列连接,通常是它的主键。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.