powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Использование Update
20 сообщений из 20, страница 1 из 1
Использование Update
    #33291469
Billingist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Возможно ли в Update в качестве выражения использовать запрос?

Result - это результирующая таблица в полях CComp и NameComp есть записи
в поле InvAbon пустое нужно чтобы оно заполнилось данными из таблицы efir
Вот текст запроса:

UPDATE Result SET InvAbon = (
SELECT Sum(efir.SDR)
FROM Result LEFT JOIN efir ON Result.CComp=efir.OperatorCode
GROUP BY Result.CComp, Result.NameComp);
...
Рейтинг: 0 / 0
Использование Update
    #33291591
Al_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно, но синтаксис не такой. К тому же будет зависить от СУБД.
что-то типа следующего:

UPDATE Result SET InvAbon = (
SELECT Sum(efir.SDR)
FROM efir WHERE Result.CComp=efir.OperatorCode);
...
Рейтинг: 0 / 0
Использование Update
    #33292404
Billingist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Access при таком запросе выдает сообщение "В операции должен использоваться обновляемый запрос" И естественно не модифицирует записи
...
Рейтинг: 0 / 0
Использование Update
    #33294168
Фотография adv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BillingistAccess при таком запросе выдает сообщение "В операции должен использоваться обновляемый запрос" И естественно не модифицирует записипочему бы на форуме акса счастье не поискать?


А вообще должно прокатить:
Код: plaintext
1.
UPDATE Result, (SELECT Sum(efir.SDR) as s FROM Result LEFT JOIN efir ON Result.CComp=efir.OperatorCode GROUP BY Result.CComp, Result.NameComp) as tbl SET Result.InvAbon = tt.s;
...
Рейтинг: 0 / 0
Использование Update
    #33294215
Фотография adv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adv BillingistAccess при таком запросе выдает сообщение "В операции должен использоваться обновляемый запрос" И естественно не модифицирует записипочему бы на форуме акса счастье не поискать?


А вообще должно прокатить:
Код: plaintext
1.
UPDATE Result, (SELECT Sum(efir.SDR) as s FROM Result LEFT JOIN efir ON Result.CComp=efir.OperatorCode GROUP BY Result.CComp, Result.NameComp) as tbl SET Result.InvAbon = tt.s;


тормознул, tt->tab.
Конечеый вариант:
Код: plaintext
1.
2.
3.
UPDATE Result, (SELECT Sum(efir.SDR) as s FROM Result LEFT JOIN efir ON 
Result.CComp=efir.OperatorCode GROUP BY Result.CComp, Result.NameComp) as 
tbl SET Result.InvAbon = tab.s;
...
Рейтинг: 0 / 0
Использование Update
    #33294226
Фотография adv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adv
блин, совсем плохой


Код: plaintext
1.
2.
3.
UPDATE Result, (SELECT Sum(efir.SDR) as s FROM Result LEFT JOIN efir ON 
Result.CComp=efir.OperatorCode GROUP BY Result.CComp, Result.NameComp) as 
tab SET Result.InvAbon = tab.s;
...
Рейтинг: 0 / 0
Использование Update
    #33294812
Billingist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
adv adv
блин, совсем плохой


Код: plaintext
1.
2.
3.
UPDATE Result, (SELECT Sum(efir.SDR) as s FROM Result LEFT JOIN efir ON 
Result.CComp=efir.OperatorCode GROUP BY Result.CComp, Result.NameComp) as 
tab SET Result.InvAbon = tab.s;



Это тоже не работает... сдается мне, что дело не в запросе....
...
Рейтинг: 0 / 0
Использование Update
    #33295196
Фотография adv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня в аксе похожий запрос работает без проблем.
Проверьте, что возвращает ваш селект.
...
Рейтинг: 0 / 0
Использование Update
    #33295255
Billingist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Расскажу подробнее: Есть таблица Result(Comp, CompName, InvComp, InvAbon) она пустая, ключевое поле CComp.
В эту таблицу вставляются записи из таблиц Company и ttf следующим запросом:

INSERT INTO RESULT ( CComp, NameComp, InvComp )
SELECT COMPANY.OperatorCode, COMPANY.OperatorName, Sum(ttf.CostCCC)
FROM COMPANY LEFT JOIN ttf ON COMPANY.OperatorCode=ttf.OperatorCode
WHERE (Company.DateEnd Is Null) And Company.OperatorCode Not In ('CCC')
GROUP BY COMPANY.OperatorCode, COMPANY.OperatorName;

Соответственно записи в поле InvAbon примут значение null

Все нормально вставляется...

Теперь необходимо заполнить поле InvAbon. Записи берутся из другой таблицы efir
Это я как раз пытаюсь сделать вот этим запросом, который дожен модифицировать записи InvAbon (null) на те, которые получатся в результате запроса:
UPDATE Result SET InvAbon = (
SELECT Sum(efir.SDR)
FROM Result LEFT JOIN efir ON Result.CComp=efir.OperatorCode
GROUP BY Result.CComp, Result.NameComp);

Скажу еще, что таблицы efir, ttf и company формата Paradox 7 и 4, я открыл их через Access. А таблица Result Access формата.
...
Рейтинг: 0 / 0
Использование Update
    #33295724
Фотография adv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BillingistРасскажу подробнее
...
Теперь необходимо заполнить поле InvAbon. Записи берутся из другой таблицы efir
Это я как раз пытаюсь сделать вот этим запросом, который дожен модифицировать записи InvAbon (null) на те, которые получатся в результате запроса:
UPDATE Result SET InvAbon = (
SELECT Sum(efir.SDR)
FROM Result LEFT JOIN efir ON Result.CComp=efir.OperatorCode
GROUP BY Result.CComp, Result.NameComp);

Ваш селект возвратит не более одной записи (что я и просил посмотреть). Даже если у вас всё заработало бы в том виде, который есть, в поле InvAbon для всех записей было бы внесено одно и то же значение.

Есть большое подозрение, что ваш синтаксис в аксе не прокатит. Если нужно вносить именно одинаковые значения, то обратите внимание на мой - он работает - проверено.

Если разные, что скорее всего, придётся ещё более подробно уточнять задачу.
...
Рейтинг: 0 / 0
Использование Update
    #33295867
Billingist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ваш я тоже конечно же попробывал, не получается таже самая ошибка, что и у меня.
...
Рейтинг: 0 / 0
Использование Update
    #33296402
Фотография adv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин.
Я пробовал без группировки.

С груповыми операциями у меня тоже не получается. Извините, что так долго парил мозг.

Можно сделать в два действия через vba.
...
Рейтинг: 0 / 0
Использование Update
    #33296582
Billingist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А нельзя ли запросом на "выборку" выбрать (без инсертов и апдейтов), просто Селектом, вот эту задачу какую я привел. Я думал думал не додумал...
Запрос вот такого типа подвисает систему:

SELECT Company.OperatorCode, Company.OperatorName, SUM( Efirdtl.SDR ), SUM( ttf.CostCCC )
FROM "COMPANY.DB" Company
LEFT OUTER JOIN "efirdtl.DB" Efirdtl
ON (Company.OperatorCode = Efirdtl.OperatorCode)
LEFT OUTER JOIN "ttf.db" ttf
ON (Company.OperatorCode = ttf.OperatorCode)
WHERE (Company.DateEnd IS NULL)
AND Company.OperatorCode NOT IN ('CCC')
GROUP BY Company.OperatorCode, Company.OperatorName
...
Рейтинг: 0 / 0
Использование Update
    #33296632
Фотография adv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а как вы открыли таблицы - через связь?
Просто не разу с парадоксовскими таблицами дело не имел.
Почему их названия в кавычках?

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

выборка из простого соединения 2х, потом 3х таблиц;
добавить условие
группировку
итоговые функции
...
Рейтинг: 0 / 0
Использование Update
    #33296739
Billingist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Таблицы открыты через компонент TQuery С++ Builder именно в этом запросе,
также я пробывал их открывать через ACCESS. Связи как вы видите я устанавливаю "внешние" в самом запросе. Если связывать по две таблицы: допустим Company и Efirdtl или Company и ttf, то все работает.

Также если убрать SUM(Efirdtl.SDR) и SUM(ttf.SDR) и GROUP BY соответственно,
а оставить просто
SELECT Company.OperatorCode, Company.OperatorName, Efirdtl.SDR , ttf.CostCCC
и оставить такую же связь то запрос сработает но не корректно, будет много дублей...
...
Рейтинг: 0 / 0
Использование Update
    #33297945
Фотография adv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если проблема только в дублях, то select distinct ... или группировка по всем полям.
...
Рейтинг: 0 / 0
Использование Update
    #33298840
Billingist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача решена 3 - мя запросами!!!!
Без INSERT и UPDATE в связки с SELECT !!!
Сейчас выложу решение.
...
Рейтинг: 0 / 0
Использование Update
    #33299026
Billingist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Итак:
Нужно получить таблицу с полями: Result(OpertorCode, OperatorName, ComInv, InvAbon, InvComp).
OpertorCode, OperatorName- код и имя компании соответственно берутся из справочника COMPANY
CompInv, InvAbon - расчетные данные из таблицы efir
InvComp - расчетные данные из таблицы ttf

Запрос 1

SELECT DISTINCT Company.OperatorCode, Company.OperatorName, 'ROUMOUT' tit, SUM( Efirdtl.SDR ) CompInv, SUM( Efirdtl.CostCCC ) InvAbon
FROM "COMPANY.DB" Company
LEFT OUTER JOIN "efirdtl.DB" Efirdtl
ON (Company.OperatorCode = Efirdtl.OperatorCode)
WHERE (Company.DateEnd IS NULL)
AND Company.OperatorCode NOT IN ('CCC')
GROUP BY Company.OperatorCode, Company.OperatorName
UNION ALL
SELECT Company.OperatorCode, Company.OperatorName, 'ROUMIN ' tit, SUM( ttf.CostCCC ) CompInv, SUM( ttf.CostCCC ) InvAbon
FROM "COMPANY.DB" Company
LEFT OUTER JOIN "ttf.DB" ttf
ON (Company.OperatorCode = ttf.OperatorCode)
WHERE (Company.DateEnd IS NULL)
AND Company.OperatorCode NOT IN ('CCC')
GROUP BY Company.OperatorCode, Company.OperatorName

Сохраняем получившуюся таблицу - Result

Запрос 2

UPDATE 'RESULT.DB' R
SET R.InvAbon = NULL
WHERE TIT IN ('ROUMIN')

Запрос 3

SELECT R.OperatorCode, R.OperatorName, R.CompInv, R.InvAbon, R1.CompInv AS InvComp
FROM 'result.db' R, 'result.db' R1
WHERE R1.TIT IN ('ROUMIN') AND R.OperatorCode = R1.OperatorCode AND
R.TIT IN ('ROUMOUT')

ВСЕ!
...
Рейтинг: 0 / 0
Использование Update
    #33299040
Billingist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так свою задачу я решил, но остался вопрос можно ли все таки в ACCESS в UPDATE в качестве выражения использовать запрос?
...
Рейтинг: 0 / 0
Использование Update
    #33299241
Фотография adv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня получалось, если запрос действительно являлся обновляемым. Зачем ему (аксессу) это надо, не знаю.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Использование Update
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]