Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.11.28;
Скачать: CL | DM;

Вниз

Помогите с синтаксисом СКЛ   Найти похожие ветки 

 
axx   (2004-11-02 14:40) [0]

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


 
stud ©   (2004-11-02 14:42) [1]

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


 
DSKalugin ©   (2004-11-02 16:21) [2]

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

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


 
Sergey_Masloff   (2004-11-02 17:24) [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


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

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


 
Deniz ©   (2004-11-03 07:05) [5]

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

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



Страницы: 1 вся ветка

Текущий архив: 2004.11.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.069 c
1-1100338954
Balkon
2004-11-13 12:42
2004.11.28
Проблема с посылкой сообщения потоку.


4-1097838267
Wolffgang
2004-10-15 15:04
2004.11.28
Проблема с определением заголовка окна


3-1098961483
BigError
2004-10-28 15:04
2004.11.28
Что-то никак не соображу как правильно сделать..


14-1100007255
Holy
2004-11-09 16:34
2004.11.28
Странный глюк с сеткой


14-1099843388
Knight
2004-11-07 19:03
2004.11.28
Не могу настроить сеть на виртуальной машине под Virtual PC...