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

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

Помогите с синтаксисом СКЛ [D6, FB]


axx ©   (2004-11-02 14:40:00) 

есть тригер ACTIVE BEFORE UPDATE POSITION 0. Подскажите каким оператором отменить обновление.


Deniz   (2004-11-03 07:05:00) [1]

> Sergey_Masloff   (02.11.04 17:24) [3]
>... Так тоже нельзя потому что %?;?*:%)');

А это что за регулярное выражение? ;-)


Sergey_Masloff   (2004-11-02 17:35:00) [2]

кстати автор Максим Доценко (Maxim Docenko) maxdoc@mail.ru


Sergey_Masloff   (2004-11-02 17:24:00) [3]

DSKalugin ©   (02.11.04 16:21) [2]
Лучше так:

CREATE EXCEPTION ERR 'Unknown Error';

CREATE PROCEDURE ERROR (
   E VARCHAR(2000))
AS
DECLARE VARIABLE EE VARCHAR(78);
BEGIN
/*-----------------------------------------------------------------------------+
|  Процедура
|    ERROR
|  Входные параметры
|    Текст сообщения об ошибке
|  Выходные параметры - нет
|
|  Назначение
|    Динамическое формирование текста EXCEPTION.
|  Примечание
|    78 это максимальная длинна сообщения в EXCEPTION в IntegBase
|  Автор
|    Неизвестен. Давно использую но написал не я. Сергей Маслов
+-----------------------------------------------------------------------------*/
  EE='';
  EE=:E;
  /*если входной параметр больше чем 78 то тут возникает ошибка
  которая успешно обрабатывается ниже*/
  UPDATE rdb$exceptions
  SET rdb$message=:E
  WHERE rdb$exception_name='ERR';
  EXCEPTION ERR;
  /*сюда попадаем только если входной параметр Е больше 78 символов*/
  /*EE - содержит 78 символов в обрезанных от E*/
when any do
  begin
     UPDATE rdb$exceptions
     SET rdb$message=:EE
     WHERE rdb$exception_name='ERR';
     EXCEPTION ERR;
  end
END


использовать так

CREATE TRIGGER SOMETABLE_BSOME FOR SOMETABLE
ACTIVE BEFORE DELETE POSITION 0
AS
begin
if SOMETABLE.SOMEFIELD in (1,2,8)) then
  EXECUTE PROCEDURE ERROR('Нельзя');
else if SOMECONDITION then
  EXECUTE PROCEDURE ERROR('Так тоже нельзя потому что %?;?*:%)');  
end


DSKalugin   (2004-11-02 16:21:00) [4]

Вызвать в нем исключительную ситуацию. Вот мой пример:

CREATE EXCEPTION "exc_DelSelf" 'Запрещено удалять наши фирмы';

CREATE TRIGGER "FirmsAttributes_BD0" FOR "FirmsAttributes"
ACTIVE BEFORE DELETE POSITION 0
AS
begin
 if ("FirmsAttributes"."f_ID" in (1,2,8))
 then exception "exc_DelSelf";
end


stud   (2004-11-02 14:42:00) [5]

а может проще вообще запретить обновление таблицы?


Наверх

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