Как выбрать и обновить из той же таблицы в Msaccess 2007 - PullRequest
2 голосов
/ 28 марта 2012

Я хочу иметь возможность выбрать и обновить мою текущую таблицу запасов

Это мой запрос:

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;

Если я запускаю вложенный выбор без обновления, он работает нормально, ноиспользование его с оператором обновления всегда возвращает ошибку: операция должна использовать обновляемый запрос

Актуальная проблема:

Я хочу вычесть текущее количество запаса на требуемое поле количества в таблице 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 << Вот ссылка на изображение таблицы моих отношений </p>

Ответы [ 2 ]

2 голосов
/ 28 марта 2012

Агрегатные функции домена можно использовать, чтобы избежать ошибки «операция должна использовать обновляемый запрос».

В вашем случае кажется, что вы хотите заменить количество для stock_id = 1 количеством из stock_id = 2. Если я правильно понял, попробуйте этот запрос ОБНОВИТЬ.

UPDATE current_stock 
SET current_stock.quantity =
    DLookup("quantity", "current_stock", "stock_id=2")
WHERE stock_id=1;
0 голосов
/ 29 марта 2012

, если вы держите инвентарь, к которому относится ноутбук в таблице согласно этой модели данных

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"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...