24 / 22 / 9
Регистрация: 23.09.2014
Сообщений: 326
|
||||||
1 | ||||||
Обновляемый запрос или SET = (SELECT) - (value)09.11.2017, 14:28. Показов 685. Ответов 12
Метки нет (Все метки)
Есть 2 запроса. Выглядят следующим образом :
Кликните здесь для просмотра всего текста
1. Первый запрос отрабатывает адекватно. Рекорд заполняется всё хорошо. Второй запрос выводит ошибку ©"В операции должен использоваться обновляемый запрос". Погуглив эту ошибку пришел к выводу, что либо разделить второй запрос на два (SELECT и UPDATE). Либо использовать INSERT и DELETE. 2. Мне почему то кажется ,что это можно сделать гораздо меньшим количеством запросов. PS: что собственно требуется вообще этими запросами сделать: 1. Найти AlcCode,RegFormB,Kolichestvo FROM ContentSpisanie ( в общем смотрите 1ый запрос там всё просто) 2. Найти Kolichestvo в таблице ContentRest По AlcCode,RegFormB. 3. Вычислить разницу ContentRest.Kolichestvo - ContentSpisanie.Kolichestvo. 4. Обновить запись в таблице ContentRest.Kolichestvo на результат разницы.
0
|
09.11.2017, 14:28 | |
Ответы с готовыми решениями:
12
Обновляемый запрос 'В операции должен использоваться обновляемый запрос' в операции должен использоваться обновляемый запрос Выводит сообщение: В операции должен использоваться обновляемый запрос |
1134 / 615 / 129
Регистрация: 13.02.2009
Сообщений: 3,554
|
|
09.11.2017, 21:40 | 3 |
Вы как думайте, что при SELECT выполнять UPDATE это нормально ?
1) На каком СУБД вы создали БД ?! 2) Что у вас есть на это БД и что трбутся ?
0
|
24 / 22 / 9
Регистрация: 23.09.2014
Сообщений: 326
|
|
10.11.2017, 08:21 [ТС] | 4 |
qwertehok,
1. Хочу всё сделать минимальным количеством запросов. 2. Определенно кажется что : как минимум это можно сделать одним запросом .... только вот я не догоняю как) xxbesoxx, - Access. Создавал не я. Работать приходится мне. - там много чего есть и это собственно не важно - Минимальным количеством запросов хочу обойтись. С SQL знаком плохо ... но учуся потихонечку.
0
|
24 / 22 / 9
Регистрация: 23.09.2014
Сообщений: 326
|
|
10.11.2017, 09:25 [ТС] | 6 |
D1973,
Скорее не так. Ведь первый запрос по сути вложенный. Вполне он поддерживает. А вот конструкция UPDATE ... SET ... SELECT (...) - тут является бредом с точки зрения SQL так как SELECT теоретически (да и практически но не в моем случае) может вернуть несколько значений. Или я не прав? И такая конструкция например в MSSQL сработает? хотя как-то сомнительно...
0
|
1074 / 987 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
|
|
10.11.2017, 09:56 | 7 |
Второй запрос вполне может быть работоспособным.
Пара замечаний. Существенная ошибка - значения чисел в текст запроса не могут передаваться заключенными в кавычки (кавычки только для текста и в других СУБД для дат). Если, конечно, типы полей числовые. Если же не числовые, то тогда и выполнять арифметические действия в запросе невозможно. И следом, зачем вычислять разность в тексте запроса (не всегда и получится), когда лучше это сделать в переменной и это значение передать в текст запроса. Пусть даже для этого придется преобразовать текстовые представления чисел в числовые значения, а для передачи в запрос значение разности обратно в текст. Все равно в этом случае синтаксис запроса пострадает меньше
0
|
24 / 22 / 9
Регистрация: 23.09.2014
Сообщений: 326
|
||||||||||||||||
10.11.2017, 10:19 [ТС] | 8 | |||||||||||||||
Скандербег,
Оюъясню я же хотел обойтись минимальным количеством запросов. А соответсвенно не сделав
А вот тут я не понял... Да я добавляю так
Вот ShowMessage StrSQL. И да типа полей числовые. Так что моя вера в то что второй запрос работоспособен как то угасла)
0
|
1074 / 987 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
|
||||||||||||||||
10.11.2017, 11:15 | 9 | |||||||||||||||
Уточню.
Если передавать числовое значение в текст запроса, то оно НЕ ДОЛЖНО ОБРАМЛЯТЬСЯ КАВЫЧКАМИ.
--- Вот это выражение должно вычислять разность между двумя значениями, которые находятся в строковом представлении:
Примерно так:
0
|
24 / 22 / 9
Регистрация: 23.09.2014
Сообщений: 326
|
|
10.11.2017, 11:48 [ТС] | 10 |
Скандербег, Эммм.. нет. c RegFormB никаких вычислений не производится. RegFormB строковый. А вычитание я произвожу(Пытался произвести из SELECT`а).
Этого вот селекта : На скрине же видно что это текст
0
|
24 / 22 / 9
Регистрация: 23.09.2014
Сообщений: 326
|
|
10.11.2017, 12:06 [ТС] | 11 |
Ещё пожалуй добавлю: чтобы внести ясность Типы полей Все кроме полей [Kolichestvo] Строковые. Поля [Kolichestvo] числовые.
0
|
Скандербег
|
10.11.2017, 12:20
#12
|
Не по теме: Без пол-литра и без проекта с базой вряд ли разобрать, что к чему, зачем и в чем причина проблемы.
0
|
24 / 22 / 9
Регистрация: 23.09.2014
Сообщений: 326
|
||||||
10.11.2017, 13:40 [ТС] | 13 | |||||
В общем сделал 3мя запросами 2 из которых в цикле .
Кликните здесь для просмотра всего текста
0
|
10.11.2017, 13:40 | |
10.11.2017, 13:40 | |
Помогаю со студенческими работами здесь
13
В операции должен использоваться обновляемый запрос. Но он и так обновляемый Почему запрос не обновляемый и как переделать в обновляемый Запрос sql UPDATE .SET поле=м.поле FROM (SELECT.) AS м Обновляемый запрос в бд Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |