![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 05.12.2010
Сообщений: 4
|
![]()
Здравстуйте!
При попытке выполнить запрос появляется ошибка: "в операции должен использоваться обновляемый запрос". Выяснил, что проблема возникает в месте, где выполняем SET - ему не нравится результат подзапроса после знака равенства, хотя он возвращает единственное значение. Подскажите, что я делаю не так? Код:
Последний раз редактировалось Stilet; 05.12.2010 в 16:08. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
точно не скажу.
просто в рамках предположения: а что, в таблице Заказы всего одна запись, которую Вы и хотите обновить? Если не одна, то где задание ограничение на обновляемые записи (после последней скобки Where Заказы.ID = ....) или, если это не так - то нужно внутренний запрос связать с внешним... p.s. выложите в архиве небольшую тестовую базу, чтобы можно было проверить... |
![]() |
![]() |
![]() |
#3 |
Регистрация: 05.12.2010
Сообщений: 4
|
![]()
Да, потерял при копировании в конце строку:
WHERE Заказы.ндок=введите_ндок |
![]() |
![]() |
![]() |
#4 | ||
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
не знал, что в MS Access ещё и такое ограничение есть
![]() по советам с сайта sql.ru можно: Цитата:
Цитата:
например, как вариант: Код:
|
||
![]() |
![]() |
![]() |
#5 |
Регистрация: 05.12.2010
Сообщений: 4
|
![]()
Решение:
PARAMETERS введите_ндок Short; UPDATE Заказы INNER JOIN Заказы_данные ON Заказы.ндок=Заказы_данные.ндок SET Сумма_RUR = Сумма_RUR+Цена_RUR*Колво WHERE Заказы.ндок=введите_ндок; В Jet SQL при использовании UPDATE можно использовать либо конкретные значения, либо данные из изменяемой таблицы, поэтому применяется конструкция с INNER JOIN. |
![]() |
![]() |
![]() |
#6 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]() Цитата:
Вызовите этот запрос для, например, документа с ндок = 1 несколько раз! Если я правильно понял логику запроса - то значение Сумма_RUR всё время будет накапливаться... тогда уже надо предварительно её очищать (присваивать ноль). p.s. предположение о неверной работе запроса сделано прямо тут, на форуме, я в БД не проверял... p.p.s. а чем мой вариант выше не подошёл? |
|
![]() |
![]() |
![]() |
#7 |
Регистрация: 05.12.2010
Сообщений: 4
|
![]()
Насчет накапливания вы правы, просто в условиях моей задачи невозможен перерасчет для одной величины более чем один раз, если такое возможно, то просто вызываем перед этим запрос который выставляет значение на 0 и все
|
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
mark-iz, ладно. устраивает, значит хорошо.
так расскажите, а чем вариант через DSum не подошёл? я же тоже учусь (точнее узнаю новое ![]() может быть, он не всегда работает или ещё что-то нехорошее/скрытое есть в предложенном мною варианте? |
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Update | usmesn | PHP | 3 | 02.06.2010 17:23 |
directorylistbox1.update; | Leo20 | Общие вопросы Delphi | 2 | 13.12.2009 14:09 |
update | shad0w | SQL, базы данных | 3 | 27.10.2009 11:44 |
UPDATE с параметрами | QQmb | SQL, базы данных | 11 | 06.05.2009 15:20 |
c# and Access - update | MAcK | Общие вопросы .NET | 3 | 20.10.2008 12:58 |