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

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

Обработка в приложении исключения, вызываемого в триггере. [D6, XP]


DROWSY ©   (2010-05-13 05:15:00) 

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

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


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

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

На таблицах 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;


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

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


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


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

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


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


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


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


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

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


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

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

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

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


turbouser   (2010-05-13 20:25:00) [7]


> DROWSY   (13.05.10 19:36) [5]

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


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

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

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


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


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


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


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


> DROWSY   (13.05.10 09:13) [2]

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

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

--
Regards, LVT.


DROWSY   (2010-05-13 09:13:00) [11]

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


Leonid Troyanovsky   (2010-05-13 08:55:00) [12]


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

OnDeleteError?

--
Regards, LVT.


Наверх

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