操作必须是可更新的查询 - Access

时间:2015-07-23 15:00:36

标签: sql ms-access

我正在编写一个数据库,我只是想使用tblSchedule中的ItemNo更新tblStock,但在尝试运行时遇到错误:

  

操作必须是可更新的查询

我似乎无法弄清楚为什么它不起作用。

UPDATE [tblSchedule] 
SET [tblSchedule].ItemNo = 
         (SELECT DISTINCT Item 
          FROM [tblStock], [tblSchedule] 
          WHERE [tblStock].Bookcode=[tblSchedule].[PartCode]
         )`;

真的很感激任何帮助

3 个答案:

答案 0 :(得分:0)

您在SQL中缺少结束括号。

UPDATE [tblSchedule] Set
  [tblSchedule].ItemNo = (
    SELECT DISTINCT Item 
    FROM [tblStock], [tblSchedule  -- Missing closing bracket
    WHERE ((([tblStock].Bookcode)=[tblSchedule].[PartCode]))
  )

尝试关闭tblSchedule上的括号。

我没有Access数据库来为你测试这个。

答案 1 :(得分:0)

我的猜测是你的内部SELECT返回2条记录而不是1条记录。

您可以执行此操作进行验证。

SELECT Items.ItemNo, count(*) total
FROM 
(
   SELECT DISTINCT Sc.ItemNo, St.Item
   FROM 
      [tblSchedule] Sc INNER JOIN
      [tblStock] St ON Sc.PartCode = St.Bookcode
) as Items
GROUP BY Items.ItemNo
HAVING count(*) > 1;

答案 2 :(得分:0)

由于我想要的简单性,我已经走下了成功运作的Dlookup路线。

UPDATE [tblSchedule], [tblStock] SET [tblSchedule].ItemNo = DLookUp("Item","[tblStock]","[tblStock].Bookcode='" & [tblSchedule].[PartCode] & "'")
WHERE (([tblStock].[Bookcode]=[tblSchedule].[PartCode]));

这可能不是最好的方法,但是由于它更新的记录数量很少(252),它可以完美地工作而不会有任何明显的时间延迟。

再次感谢! 克里斯