如何从Access Access 2007中的同一个表中进行选择和更新

时间:2012-03-28 17:08:49

标签: sql ms-access select

我希望能够选择并更新我当前的库存表

这是我的疑问:

UPDATE current_stock 
SET current_stock.quantity =
    (SELECT quantity 
      FROM (SELECT * FROM current_stock) As current_stock1 
    WHERE current_stock1.stock_id=2) 
WHERE stock_id=1;

如果我在没有更新的情况下运行嵌套选择它可以正常工作,但是将它与update语句一起使用总是会返回错误:操作必须使用可更新查询

实际问题:

我想根据相应的笔记本电脑ID从表Bom_dell中扣除当前库存数量所需的数量字段

语法错误:(缺少运算符)在查询表达Dlookup ..

我猜测嵌套的Dlookup无法正常工作

UPDATE current_stock 
SET current_stock.quantity =
    DLookup("quantity", "current_stock", "stock_id=1")-DLookup("req_quantity","Bom_dell","lap_id=DLookup("lap_id","laptop_info","model_name="Dell Inspiron"")")
WHERE stock_id=1;

根据您的建议,我将代码更改为包含SELECT语句,并且可以正常工作:

UPDATE current_stock 
SET current_stock.quantity =
    DLookup("quantity", "current_stock", "stock_id=1")-DLookup("req_quantity","Bom_dell","lap_id=(SELECT lap_id FROM laptop_info WHERE model_name='Dell Inspiron')")
WHERE stock_id=1;

我现在需要做的就是添加一个for循环来扣除当前库存表中的所有数量

http://tinyurl.com/7eghddq<<这是我的关系表图像的链接

2 个答案:

答案 0 :(得分:2)

Domain Aggregate Functions可用于避免“操作必须使用可更新查询”错误。

在您的情况下,您似乎想要将stock_id = 1的数量替换为stock_id = 2的数量。如果我理解正确,请尝试此UPDATE查询。

UPDATE current_stock 
SET current_stock.quantity =
    DLookup("quantity", "current_stock", "stock_id=2")
WHERE stock_id=1;

答案 1 :(得分:0)

如果按照此数据模型

按住笔记本电脑与表格相关的stockId

data model

然后您可以使用以下SQL

更新它
UPDATE (LaptopInfo INNER JOIN BomDell ON LaptopInfo.LaptopId = BomDell.LapTopId) INNER JOIN current_stock ON LaptopInfo.StockId = current_stock.StockId SET current_stock.Quantity = [Quantity]-[ReqQuantity] WHERE (((LaptopInfo.ModelName)="Dell Inspirion"));