Главная страница
    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.47 MB
Время: 0.063 c
15-1274271369
XXL
2010-05-19 16:16
2010.08.27
Есть ли способ корректно рисовать анимацию под терминалкой ?


3-1238620116
ivanoff
2009-04-02 01:08
2010.08.27
как осуществить SQL выборку только по времини


4-1231256834
Xan
2009-01-06 18:47
2010.08.27
Получение Handle окон по их PID


2-1270922444
Evgeney
2010-04-10 22:00
2010.08.27
Процедура для открытия Child форм


15-1263853581
Германн
2010-01-19 01:26
2010.08.27
Потоконебезопасность VCL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский