Текущий архив: 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.47 MB
Время: 0.063 c