MS Access"此记录集不可更新"在SELECT查询中

时间:2016-07-25 15:35:34

标签: sql ms-access sql-update subquery

我对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字段中没有主键或唯一索引。 没有唯一键字段,这可能是原因吗?

3 个答案:

答案 0 :(得分:2)

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\#")
            );

答案 1 :(得分:1)

汉斯,我注意到你删除了你的评论。我及时得到它,它完美无缺。现在,查询的运行时间不到一秒,而之前的查询时间为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\#")
            );

答案 2 :(得分:0)

您的查询包含聚合函数MIN,表应该使用JOIN子句连接,连接列也应该被编入索引,详细信息表应该使用具有唯一索引的列连接,通常它是' s主键。