Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как можно отменить в ставку в тригере в Фаерберде 1.5


Rule ©   (2005-01-20 17:19:00) 

Необходимо чтобы при какихто условиях вставки данных тригер рубил эту вставку ...
какую команду надо послать, ну типа если сделать так

declare variable usl smallint;
begin
  select count(id) from table 1
  where field_1=new.field_1
  and field_2=new.field_2
  into :usl;
if usl>0 then <оператор который рубит вставку>
end;

теперь собственно зачем мне это надо, мне надо сделать так чтобы не вставлялись дублирующие записи, причем не надо чтоб возникали ошибки, просто надо чтоб молча не вставлялось и все ... причем реализовать на тригерах ...


Rule   (2005-01-21 11:09:00) [1]

YurikGL ©   (20.01.05 20:02) [11]
Вариант, спасибо, подумаю ...

Deniz   (21.01.05 9:33) [13]
тоже вариант .... надо попробовать ...

midavik ©   (21.01.05 9:35) [14]
сомневаюсь ...

Johnmen ©   (21.01.05 10:31) [18]
вечером гляну, спасибо .... и не подумал ..
спасибо что послал :)


Johnmen   (2005-01-21 10:31:00) [2]

>Rule ©  

См. "DATA DEFINITION GUIDE"глава "Working with
Stored Procedures"
раздел "Exceptions"параграфы "Raising an exception in a stored procedure"и "Handling errors"


Deniz   (2005-01-21 09:59:00) [3]

Нет там такого


midavik   (2005-01-21 09:54:00) [4]

щас не помню точно как, но что, типо такого не прокатит?

declare variable usl smallint;
begin
  StartTransaction
 select count(id) from table 1
 where field_1=new.field_1
 and field_2=new.field_2
 into :usl;
if usl>0 then RollbackTransaction
else CommitTransaction
end;


Deniz   (2005-01-21 09:45:00) [5]

>midavik ©   (21.01.05 09:35) [14]
Это типа SavePoint?


midavik   (2005-01-21 09:35:00) [6]

А транзакция в триггере не подойдет?...


Deniz   (2005-01-21 09:33:00) [7]

1. Переименовать табличку
2. Сделать view(со старым именем таблицы) на эту табличку
3. Наставить триггеры на всякие действия
4. В триггерах принимать решение о вставке в таблицу.


Danilka   (2005-01-21 08:38:00) [8]

Как один из возможных вариантов, сделай вьюху с триггером и пусть работают с ней. А в триггере уже смотри - добавлять или нет запись.


YurikGL   (2005-01-20 20:02:00) [9]


> Rule ©   (20.01.05 19:18) [10]

А может написать триггер на после добавления, который бы удалял записи по нужному признаку?


Rule   (2005-01-20 19:18:00) [10]

YurikGL ©   (20.01.05 18:53) [8]
Несомненно, но смотри условия
Rule ©   (20.01.05 19:18) [9]


Rule   (2005-01-20 19:18:00) [11]

Соловьев ©   (20.01.05 18:16) [7]

Ну вобщем если утрировать, то получиться, что есть готовое приложение без исходников, и надо сделать так чтобы оно не вставляло дублирующих записей ... записи вставляются большими дозами, поэтому жать на каждой дублирующей записи кнопку - это не есть хорошо ... а по логике работы, 2 одинаковые записи несут дублирующую информацию ... что плохо сказывается на других приложениях, которые ведут подсчет по этим таблицам


YurikGL   (2005-01-20 18:53:00) [12]


> Rule ©   (20.01.05 17:19)  

Честно говоря, ИМХО БД все же должна сообщать вставилась запись или нет. Если нет - вызывается ексепшн.


Соловьев   (2005-01-20 18:16:00) [13]

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

не догнал...обясни нормально


Rule   (2005-01-20 18:06:00) [14]

LM2   (20.01.05 17:53) [4]
Соловьев ©   (20.01.05 17:54) [5]

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


Соловьев   (2005-01-20 17:54:00) [15]

>чтоб никто не знал :)
try
Insert;
except
//никто и не узнает
end;


LM2   (2005-01-20 17:53:00) [16]

>>Rule ©
ну так загони все в try..except
типа

try
 IBQuery.ExecSQL;
except
//ничего не выводим
end;


Rule   (2005-01-20 17:47:00) [17]

P.N.P. ©   (20.01.05 17:23) [1]
нет, эксепшены не катит, потомучто будет вываливаться сообщение, а мне надо тихо ... чтоб никто не знал :)


Rule   (2005-01-20 17:36:00) [18]

P.N.P. ©   (20.01.05 17:23) [1]

про хп думал, но не подходит а вот про
then exception nelza_vstavlat,
надо подумать


P.N.P.   (2005-01-20 17:23:00) [19]

Как вариант - соорудить хп, в ней и проверять.
или все-таки
then exception nelza_vstavlat;
и обрабатывать ошибки.


Наверх

Титульная страница Поиск, карта сайта Написать письмо