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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2012, 14:48   #1
Meri12
 
Регистрация: 21.09.2011
Сообщений: 6
По умолчанию Триггеры и исключения

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

SELECT COUNT(*) FROM protokol WHERE old.n_kod = protokol.kodeks_n_kod INTO X ;
if (x > 0) then
exception er;
где er - это исключение. в IBexpert все работает нормально, но при удалении через delphi выбивает из программы с текстом этого исключения, но от имени debugger exception notification. если сразу опять запустить программу, то выдается еще одно окно (которое и должно выдаваться) с текстом опять же этого исключения, но от имени моего проекта. И уже из программы не выбивает. Такое ощущение, что сначало работает без триггера, а при повторном запуске триггер подключается.
В делфи прописано следующее (используется две транзакции на write и read. Dataset1 - trRead. Dataset2- trWrite):

if MessageDlg('Удалить?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
Num := dataModul.dataset1.FieldValues['N_KOD'];
dataModul.dataset2.ParamByName('ID' ).AsInteger := Num;
dataModul.dataSet2.Open;
dataModul.dataSet2.Delete; // выбивает на этой строке
Как этого избежать?

P. S. такая же ситуация происходит при запуске другого триггера. Он уже используется на добавление. Сравнивает две строки. И если, опять же, используется исключение, то повторяется таже история.
Meri12 вне форума Ответить с цитированием
Старый 24.04.2012, 16:40   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

А вы попробуйте запустить программу не из среды (Delphi), а непосредственно ее Exe файл. и смотри темы 1 2
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 24.04.2012, 18:18   #3
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Интересно, а dataset2 из какого стада?
И почему, с какого-то перепугу, вначале dataSet2.Open;, а потом dataSet2.Delete?
Вначале открываем, затем удаляем? Забавно.
Скандербег вне форума Ответить с цитированием
Старый 24.04.2012, 22:44   #4
Meri12
 
Регистрация: 21.09.2011
Сообщений: 6
По умолчанию

убрала флаг Stop On Delphi Exceptions. Спасибо большое!!!! а Dataset2 со вкладке interbase IBDataSet (IBCustomDataSet). Просто один DataSet как бы только для чтения, а второй для записи. и стобы произвести какие-то действия с данными, необходимо открыть второй и удалить.
Meri12 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
триггеры brans SQL, базы данных 1 14.12.2011 10:18
Триггеры JoyStick 0_o Помощь студентам 4 01.06.2011 12:13
Триггеры JoyStick 0_o SQL, базы данных 0 01.06.2011 10:24
Триггеры МартинИ SQL, базы данных 4 23.12.2010 20:12
C++ Триггеры phantom4eg Помощь студентам 6 15.05.2010 14:49