Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
dalay_lama
82 / 82 / 50
Регистрация: 22.09.2012
Сообщений: 495
1

Как обновить запись использовав результат другого запроса

16.09.2013, 10:17. Просмотров 879. Ответов 9
Метки нет (Все метки)

Всем доброго времени суток, подскажите пожалуйста, вот мне необходимо обновить запись на результат другого запроса. Т.е. вот я например обычно обновляю записи вот так:
SQL
1
UPDATE materials SET count_mt = 20 WHERE id_materials = 20;
значение count_mt принимает 20. А если мне туда нужно подставить не просто число, а результат вычисления другого запроса, вот я пытаюсь делать так:
SQL
1
UPDATE materials SET count_mt = (SELECT SUM(count_st) FROM stockroom WHERE id_material = 20) WHERE id_materials = 20;
Но access на меня ругается, мол синтаксически не правильно, ещё пытался перед скобкой поставить IN, но также ругается. В общем, подскажите пожалуйста, как правильно запрос построить?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2013, 10:17
Ответы с готовыми решениями:

Как результат запроса другого результата запроса запихнуть в массив?
Как результат запроса другого результата запроса запихнуть в массив? Здравствуйте, у меня такая вот...

Редактирование текущей записи базы, если запись результат запроса Query
Здравствуйте! Такая ситуация: есть форма, созданная через мастер форм с элементом Query. В Query...

Как правильно обновить таблицу jtable из другого jframe
Добрый день, проблема такая, у меня есть jframe package Forms; import javax.swing.*; import...

Как записать в массив результат запроса если результат-массив данных а не 1 значение
Здравствуйте , подскажите пож-та как организовать в 2010-ом бэйсике работу с запросами,...

9
Agapov_stas
3342 / 1760 / 83
Регистрация: 05.08.2010
Сообщений: 4,471
Завершенные тесты: 1
16.09.2013, 10:28 2
Функция Sum() используется при наличии группировки в запросе, которой у Вас нет, вот и ругается.
Попробуйте так:
SQL
1
UPDATE materials SET count_mt = (SELECT SUM(count_st) FROM stockroom GROUP BY id_material  HAVING id_material = 20) WHERE id_materials = 20;
1
dalay_lama
82 / 82 / 50
Регистрация: 22.09.2012
Сообщений: 495
16.09.2013, 10:36  [ТС] 3
Попробовал. Пишет "в операции должен использоваться обновляемый запрос". Попробовал результат в ковычки взять, т.е. вот так:
SQL
1
'(SELECT SUM(count_st) FROM stockroom WHERE id_material = 20 GROUP BY id_material )'
Пишет мол типа сейчас обновится 1 запись, я кликаю OK и вылазит такая штука:
Как обновить запись использовав результат другого запроса

Я перепроверил типы данных - они совпадают, оба одинарное с плавающей точкой, число после запятых 2.
0
dalay_lama
82 / 82 / 50
Регистрация: 22.09.2012
Сообщений: 495
16.09.2013, 10:43  [ТС] 4
и после добавления HAVING тоже самое
0
Agapov_stas
3342 / 1760 / 83
Регистрация: 05.08.2010
Сообщений: 4,471
Завершенные тесты: 1
16.09.2013, 10:46 5
Тип данных геморный, ИМХО.
Почему именно его выбрали?
Currency не подходит?
1
dalay_lama
82 / 82 / 50
Регистрация: 22.09.2012
Сообщений: 495
16.09.2013, 10:50  [ТС] 6
Цитата Сообщение от Agapov_stas Посмотреть сообщение
Почему именно его выбрали?
Ну, мне нужно было просто хранить количество материала на складе, а оно может принимать и дробные значения....т.к. с Access-ом я очень мало знаком, ответ наверное будет такой - "по причине не знания лучшей альтернативы", мне показалось выбрать такой тип данных очевидным.
Денежный лучше подойдёт для хранения просто дробного значения?
0
ltv_1953
Эксперт MS Access
14902 / 6390 / 1337
Регистрация: 21.06.2012
Сообщений: 11,722
16.09.2013, 11:00 7
Как вариант: сохраните SELECT SUM(count_st) AS Sum_Count FROM stockroom WHERE id_material = 20 как Запрос1, а в запросе на обновление используйте выражение DLookUp("Sum_Count";"Запрос1").
1
mobile
Эксперт MS Access
25802 / 13755 / 2963
Регистрация: 28.04.2012
Сообщений: 15,082
16.09.2013, 11:06 8
Вот если, как общепринято в БД, не хранить вычисляемые значения в таблицах, то и проблемы такой не возникнет. Зачем их хранить, эти расчетные величины? Их же всегда можно получить запросом. А при хранении их в таблице возникнет вопрос об их актуальности - если изменятся величины, входящие в сумму, то записанная в таблице расчетная величина станет неправильной. И значит нужно создавать немалое программное обеспечение, чтобы держать БД актуальной.

По сабжу.
dalay_lama, запросы на обновление в аксе не допускают необновляемых подзапросов. Поэтому вместо подзапроса используйте функцию DSum
SQL
1
UPDATE materials SET count_mt = Dsum("count_st", "stockroom", "id_material = 20") WHERE id_materials = 20;
И еще. Когда вы пытались подзапрос поместить в кавычки, то получали сообщение о неверном типе. Это потому, что числовой величине пытались присвоить строку. Выражение в кавычках это всегда строка, независимо от ее содержания
2
dalay_lama
82 / 82 / 50
Регистрация: 22.09.2012
Сообщений: 495
16.09.2013, 11:17  [ТС] 9
Добавлено через 1 минуту
И кстати ваш запрос отлично работает. Примногом благодарен
0
mobile
Эксперт MS Access
25802 / 13755 / 2963
Регистрация: 28.04.2012
Сообщений: 15,082
16.09.2013, 11:26 10
Цитата Сообщение от dalay_lama Посмотреть сообщение
скорее всего я просто изначально не правильно построил БД и саму логику приложения
В переводе с русского на русский это означает, что вы и дальше хотите наступать на грабли, вами же разложенные. Надо соблюдать правила системы в которой находитесь. В БД правильная структура данных это основное. Пока она не отлажена, не соответствует бизнес-правилам, дальнейшие телодвижения бессмыслены. Сначала структура, только потом все остальное.
2
16.09.2013, 11:26
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2013, 11:26

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как сохранить результат запроса?
Работает в IB формулировка SELECT поле AS имя_запроса FROM...? Или как-то по-другому надо, INTO...

Как вывести результат запроса
Подскажите как выводить результат на форме (ну допустив в edit) во время выполнения запроса ? ...

Как записать результат запроса?
Добрый день! спрошу глупую вещь, но спрошу 2 справочника: ЗагруженныеБилеты (нужный мне реквизит -...

Как получить результат переменной из другого потока
Потоки создаются при подключении нового пользователя. В потоке выполняются различные функции, а...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.