Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.106 c
15-1267539041
ocean
2010-03-02 17:10
2010.08.27
Как подешевле подключиться в Интернету


11-1221682651
siealex
2008-09-18 00:17
2010.08.27
KOL и Windows Mobile


2-1268082650
GoTo
2010-03-09 00:10
2010.08.27
Запись пути к файлу в БД


2-1273815100
tippa
2010-05-14 09:31
2010.08.27
алгоритм удаления дубликатов из списка


2-1273822573
ALI
2010-05-14 11:36
2010.08.27
Отключается привязка PopupMenu к ImageList





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский