Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2016, 20:50   #1
kata.m
 
Регистрация: 02.05.2016
Сообщений: 5
По умолчанию Firebird/IBExpert триггер

Здравствуйте.
Нужен триггер, который будет пересчитывать стоимость заказа при его Update или Insert. Причем некоторые данные нужно взят из других, связанных таблиц.
Вот такой ЗАПРОС работает, считает.

select orderr.tirag * (material.price_material + print_kind.price_print_kind)
from orderr,material, print_kind
where material.id_material = orderr.id_material
and print_kind.id_print_kind = orderr.id_print_kind
and orderr.id_order = 1

Вот такой ТРИГГЕР компилируется без проблем.

CREATE trigger orderr_biu0 for orderr
active before insert or update position 0
AS
begin
update orderr set

price = (select new.tirag * (material.price_material + print_kind.price_print_kind)
from orderr,material, print_kind
where material.id_material = new.id_material
and print_kind.id_print_kind = new.id_print_kind
and orderr.id_order = new.id_order);

end


НО при манипуляциях с orderr выводит ошибочки:
---------------------------------------
Too many concurrent executions of the same request.
Too many concurrent executions of the same request.
At trigger 'ORDERR_BIU0' line: 5, col: 1
At trigger 'ORDERR_BIU0' line: 5, col: 1
At trigger 'ORDERR_BIU0' line: 5, col: 1....

Как быть?
Буду очень благодарна за помощь!
kata.m вне форума Ответить с цитированием
Старый 16.11.2016, 22:05   #2
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

Код:
update orderr set

price = ........
вызывает срабатывание триггера, который вызывает срабатывание триггера, который.......
я не совсем в теме, и потестить не могу, но гугл предлагает:
Код:
CREATE trigger orderr_biu0 for orderr
active before insert or update position 0
AS
begin
if not update(price)
update orderr set price = (select new.tirag * (material.price_material + print_kind.price_print_kind)
from orderr,material, print_kind
where material.id_material = new.id_material
and print_kind.id_print_kind = new.id_print_kind
and orderr.id_order = new.id_order);

end
GreenWizard вне форума Ответить с цитированием
Старый 17.11.2016, 10:40   #3
kata.m
 
Регистрация: 02.05.2016
Сообщений: 5
По умолчанию

На ваш вариант тоже ругается(
Поэтому в состоянии отчаяния начала пробовать писать всякую ерунду.
И, о чудо, вот это работает:

CREATE OR ALTER TRIGGER ORDERR_BIU0 FOR ORDERR
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS

begin

new.price = (select new.tirag * (material.price_material + print_kind.price_print_kind )
from material, print_kind, orderr
where ((material.id_material = new.id_material) and (print_kind.id_print_kind = new.id_print_kind))
and (orderr.id_order = 1));

end


Спасибо!)
kata.m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создать Trigger IBExpert, Firebird 2.5 Lessy22 SQL, базы данных 3 03.11.2014 17:39
Начало работы Firebird + Delphi + IBExpert Uuuux БД в Delphi 4 20.07.2010 11:32
Триггер для Firebird Lait1989 Помощь студентам 0 16.05.2010 14:04
IBExpert Firebird и Delphi power61RUS БД в Delphi 15 09.12.2009 08:33
Редактирование с IBQuery. C++, IBExpert+FireBird Striderr Помощь студентам 1 22.11.2009 18:41