Error: "Operation must use an updateable query" - MS Access

Error: "Operation must use an updateable query" - MS Access

我在 MS Access 中有一个 table Item,如下所示:

ID  ProductNumber   ItemNumber  Quantity    UnitPrice
1   P-0001          Item-001        5       .00
2   P-0001          Item-002        3       .00
3   P-0001          Item-003        2       .00
4   P-0002          Item-004        1       .00
5   P-0002          Item-005        6       .00
6   P-0002          Item-006        2       .00

我已经使用查询 Query1 来计算以上 table

的成本
SELECT [Quantity]*[UnitPrice] AS Cost, *
FROM Item;

在 运行 查询后 table 看起来像这样。

ID  ProductNumber   ItemNumber  Quantity    UnitPrice   Cost
1   P-0001          Item-001        5       .00       20
2   P-0001          Item-002        3       .00      36
3   P-0001          Item-003        2       .00       12
4   P-0002          Item-004        1       .00       8
5   P-0002          Item-005        6       .00      96
6   P-0002          Item-006        2       .00       14

我使用子查询 Query2 来计算 BatchCost

SELECT (Select Sum(T.Cost) 
From Query1 
AS T
Where T.ProductNumber = Query1.ProductNumber) AS BatchCost, *
FROM Query1;

在 运行 查询后 table 看起来像这样。

ID  ProductNumber   ItemNumber  Quantity    UnitPrice   Cost    BatchCost
1   P-0001          Item-001        5       .00         20    68
2   P-0001          Item-002        3       .00        36    68
3   P-0001          Item-003        2       .00         12    68
4   P-0002          Item-004        1       .00         8     118
5   P-0002          Item-005        6       .00        96    118
6   P-0002          Item-006        2       .00         14    118

我还有一个 table Prices 看起来像这样:

ProductNumber   CostPrice
P-0001          [=15=].00
P-0002          [=15=].00

我想从 Query2 table 中的 BatchCost 更新 Prices table 中的 CostPrice

我用过这个查询:

UPDATE Prices INNER JOIN Query2 ON Prices.ProductNumber=Query2.ProductNumber 
SET Prices.CostPrice =  Query2.[BatchCost]
WHERE (((Prices.ProductNumber)=[Query2].[ProductNumber]));

但是出现错误:Operation must use an updateable query

当我在查询中使用另一个字段(例如 UnitPrice 而不是 BatchCost 时,查询就可以工作了。问题出在 BatchCost 字段中。

同样,保存这些汇总数据可能不是一个好主意,但如果您必须...

打开记录集,遍历记录,运行 UPDATE 操作。类似于:

Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("SELECT ProductNumber, Sum(Quantity * UnitPrice) AS SumCost FROM Item GROUP BY ProductNumber;")

While Not rs.EOF
    CurrentDb.Execute "UPDATE Prices(CostPrice) VALUES(" & rs!SumCost & ") WHERE ProductNumber = '" & rs!ProductNumber & "'"
    rs.MoveNext
Wend

或者没有记录集,也没有循环:

CurrentDb.Execute "DELETE FROM Prices"
CurrentDb.Execute "INSERT INTO Prices(ProductNumber, CostPrice) SELECT ProductNumber, Sum(Quantity * UnitPrice) AS SumCost FROM Item GROUP BY ProductNumber"

第二个选项可以是查询设计器中内置的两个查询对象,然后手动 运行 或从代码调用(宏或 VBA)。

或者在查询对象中使用 DSum() 并调用该查询(在 VBA 中的 SQL 语句中使用条件条件构建域聚合是棘手的):

UPDATE Prices SET CostPrice=DSum("Quantity*Price", "Item", "ProductNumber='" & [ProductNumber] & "'")

现在决定要将代码放入哪个事件过程,也许是单击按钮。