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

Вниз

Обработка в приложении исключения, вызываемого в триггере.   Найти похожие ветки 

 
DROWSY   (2010-05-13 05:15) [0]

Как в можно проге перехватить, например, такое исключение в триггере

CREATE EXCEPTION NO_DELETE "Нельзя удалять строку, нужную другой таблице";

CREATE TRIGGER SCRN_SURF_FORM_BD0 FOR SCRN_SURF_FORM
ACTIVE BEFORE DELETE POSITION 0
AS
begin
 if (exists(select scrn_surf_form_code from screen where scrn_surf_form_code = old.code )) then
 exception no_delete;
end


 
Leonid Troyanovsky ©   (2010-05-13 08:55) [1]


> DROWSY   (13.05.10 05:15)
 
> Как в можно проге перехватить, например, такое исключение

OnDeleteError?

--
Regards, LVT.


 
DROWSY   (2010-05-13 09:13) [2]

Этот обработчик почему - то не вызывается.
При Database.ApplyUpdates генерируется исключение "User abort".


 
Leonid Troyanovsky ©   (2010-05-13 10:03) [3]


> DROWSY   (13.05.10 09:13) [2]

> Этот обработчик почему - то не вызывается.

Отсюда ж не видно, почему. Кроме того, у EDBEngineError есть Errors,
да и в партизанов играть недосук.

--
Regards, LVT.


 
Игорь Шевченко ©   (2010-05-13 10:24) [4]


> Этот обработчик почему - то не вызывается.


Больно слышать


 
DROWSY   (2010-05-13 19:36) [5]

BDE не используется.
База FireBird 1.5., IBX

Вопрос в том, как (какой компонент) отловить исключение, вызванное в триггере.


 
turbouser ©   (2010-05-13 20:25) [6]


> DROWSY   (13.05.10 19:36) [5]

на ibase.ru все есть


 
DROWSY   (2010-05-13 23:59) [7]

try

       Database.ApplyUpdates([DataSet as TIBCustomDataSet]);
       Transaction.CommitRetaining;
      { Always call CancelUpdates to remove any discard changes }
       CancelUpdates;
 except
 on E: EIBInterBaseError do begin
   ShowMessage(Format("ErrCode: %d, SQLCode: %d ",
   [E.IBErrorCode,E.SQLCode]));
   Raise;
 end;
 on E: EIBInterBaseRoleError do begin
   ShowMessage(Format("ErrCode: %d, SQLCode: %d ",
   [E.IBErrorCode,E.SQLCode]));
   Raise;
 end;
 on E: EIBClientError do begin
   ShowMessage(Format("ErrCode: %d, SQLCode: %d ",
   [E.IBErrorCode,E.SQLCode]));
   Raise;
 end;

 on E: EIBError do begin
   ShowMessage(Format("ErrCode: %d, SQLCode: %d ",
   [E.IBErrorCode,E.SQLCode]));
   Raise;
 end;
   on E: Exception do
   begin
     ShowMessage((PChar(E.Message + "   " + IntToStr(E.HelpContext)) ,PChar("Change Data"));
     Raise;
   end;
 end

Выдаёт:
ErrCode = 0
SQLCode = 56

Где есть "расшифровка" этих кодов?

Как добраться до исключения в триггере?


 
DROWSY   (2010-05-16 18:34) [8]

Удалено модератором


 
Сергей М. ©   (2010-05-16 23:05) [9]


> Где есть "расшифровка" этих кодов?
>


В документацмм к соответствующей СУБД соответствующей версии.


 
DROWSY   (2010-05-17 16:34) [10]


> Сергей М. ©   (16.05.10 23:05) [9]

В документации к Firebird 1.5 все SQLCode отрицательные.


 
DROWSY   (2010-05-17 16:38) [11]

... кроме SQlCode = 100 и 101.


 
DROWSY   (2010-05-19 22:48) [12]

Для мастеров это, конечно ламерские наблюдения, но таким "мученикам", как я,
может будет интересно.

На таблицах Main и Depend, связанных по foreign key
построены
ibMain, ibDepend : TIBDataSet;
upMain, upDepend : TIBUpdateSQL;

Что я "наковырял":
при удалении записи в ibMain, если есть зависимые записи:
1)
если ibMain.CachedUpdates := true, то
если обновление через upMain (ibMain.UpdateObject := upMain), то Database.ApplyUpdates выыдаёт исключение
E: EIBClientError, E.IBErrorCode = 0 , E.SQLCode = 56 ("user abort")


если ibMain.CachedUpdates := true, то
если обновление без upMain (ibMain.UpdateObject := nil), то Database.ApplyUpdates выыдаёт исключение
E: EIBInterBaseError, E.SQLCode = -530 (ошибка на сервере, типа "bad foreign key"

2)
событие OnDeleteError для ibMain вызывается только если ibMain.CachedUpdates := false;



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

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

Наверх




Память: 0.49 MB
Время: 0.06 c
3-1239773025
Spot
2009-04-15 09:23
2010.08.27
Interbase через BDE


2-1268719836
zergost
2010-03-16 09:10
2010.08.27
Очистка параметров ADOQuery


3-1240576232
Гарик
2009-04-24 16:30
2010.08.27
Пользователи в Oracle


2-1273502556
NoSilence
2010-05-10 18:42
2010.08.27
Обновление компонента сендмеседжом


11-1216809601
Dy1
2008-07-23 14:40
2010.08.27
утечки памяти. Помогите, пожалуйста