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

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

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2015, 09:21   #1
Constellation
Пользователь
 
Регистрация: 14.11.2007
Сообщений: 61
По умолчанию рано срабатывает триггер

Здравствуйте. Возникла проблема по работе триггера. При добавлении данных в форму и занесении их в БД, триггер должен проверять данные на соответствие определенным условиям и вносить изменения во вторую таблицу БД. Использую обработку события на insert. Тут вроде все ясно. НО: В форме ввода данных при добавлении новой информации она сохраняется дважды - сначала по кнопке "Сохранить", а потом "Подтвердить". И получается, что уже при нажатии на кнопку "Сохранить" начинает работать триггер, и когда я пытаюсь подтвердить внесенную информацию, программа выдает ошибку (см.скрин). Как в данном случае можно поступить?
Изображения
Тип файла: jpg error.JPG (24.8 Кб, 66 просмотров)
Constellation вне форума Ответить с цитированием
Старый 05.06.2015, 09:29   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

И что, дважды INSERT? А если 1-ый раз INSERT, а 2-ой UPDATE, то триггер на insert не при делах
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.06.2015, 09:58   #3
Constellation
Пользователь
 
Регистрация: 14.11.2007
Сообщений: 61
По умолчанию

вставляется только одна запись, но если не подтвердить, она не сохраняется в таблице. меняла insert на update - треггер не работает, не видит изменения данных, все-таки это добавление новой записи, не изменение старых. Попробовав сделать на самом деле обновление данных, выдал ту же ошибку, что и при добавлении новых
Constellation вне форума Ответить с цитированием
Старый 05.06.2015, 10:11   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
вставляется только одна запись, но если не подтвердить
А что делается на подтверждении? Логично предположить, исходя из выше приведенного, что commit?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.06.2015, 11:21   #5
Constellation
Пользователь
 
Регистрация: 14.11.2007
Сообщений: 61
По умолчанию

думаю, что да. судя по ошибке AZI6 получается, что сначала, когда идет ввод данных в окно формы, происходит одна транзакция при обращении к БД, триггер запускает вторую транзакцию и из-за их конфликта происходит прерывание сохранения. может как-то можно отследить транзакцию сохранения и поставить выполнение триггера на задержку? возможен такой вариант?
Constellation вне форума Ответить с цитированием
Старый 05.06.2015, 12:20   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Гадать не буду, нужно точно знать что и как делается, начинку триггера и прочее
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 05.06.2015, 12:42   #7
Constellation
Пользователь
 
Регистрация: 14.11.2007
Сообщений: 61
По умолчанию

Код:
-- отслеживаем изменение данных в MSO420 и при соблюдении условий добавляем запись в MSF096_STD_VOLAT

CREATE TRIGGER Comments
  on MSF420 
  after INSERT
AS
begin 
DECLARE @comp_code char(4)
       ,@dt_code char(4)
       ,@key char(24)
select
      @comp_code = COMP_CODE, 
      @dt_code = DOWN_TIME_CODE, 
      @key=MSF420.SHIFT+' '+MSF420.DOWN_TIME_CODE+'01' -- составной ключ
from MSF420
if (@comp_code='МАРК' and @dt_code='ПП') 
begin
 insert into MSF096_STD_VOLAT values ('DT',@key,'0000','60','blablabla','','','','')

end
END
GO
Constellation вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рано умирает сессия CodeNOT ASP.NET 0 13.03.2015 12:53
Триггер 2 @ngel111 SQL, базы данных 0 24.12.2014 18:52
Триггер @ngel111 SQL, базы данных 2 23.12.2014 14:57
Триггер andresan SQL, базы данных 0 16.05.2011 16:29
триггер veter_s_morya SQL, базы данных 10 06.10.2008 21:58