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

Вниз

Помогите обработать ошибку   Найти похожие ветки 

 
ruslan_as ©   (2003-07-17 16:48) [0]

Помогите разобраться с обработкой ошибки. Клиентом заносится записи в базу данных Oracle. При нарушении уникальности выскакивает ошибка ORA-00001. Как обработать эту ошибку и запустить вместо нее свою процедуру (MyProcedure).

Спасибо всем отозвавшимся!


 
Skier ©   (2003-07-17 16:52) [1]

Наверняка есть какое-то событие у компонента для работы с Oracle, которое вызывается в случае ошибки.


 
Толик ©   (2003-07-17 16:56) [2]

Обработать ошибку где: на сервере, на клиенте? Запустить процеду где: на сереве, на клиенте? Как заносятся данные (через insert или через вызов stored procedure)? Вставка данных идёт непосредственно в таблицу или через updatable view? Ну и т.д.


 
ruslan_as ©   (2003-07-17 17:08) [3]

>>Толик
Ошибку обработать в приложении у клиента. Процедура (или какой-нибудь ShowMessage - потом придумаю) в приложении клиента. Вставка непосредственно в таблицу.


 
Skier ©   (2003-07-17 17:11) [4]

>ruslan_as © (17.07.03 17:08)
А try-except-end не подходит ?


 
Толик ©   (2003-07-17 17:11) [5]

Серверный вариант:

begin
insert into Table_Name(
Field_Name
)
values(
Some_Values
);
exception
when dup_val_on_index then
MyProcedure();
end;

Клиентский вариант:

var
ErrNo: longint;
TmpStr: string;
begin
try
Query1.ExecSQL();
except
on E: EDatabaseError do begin
Copy(E.Message, 4, 6); //используем то св-во оракловых сообщений, что все они начинаются с номера ошибки "ORA-XXXXX"
ErrNo := StrToInt(TmpStr)
if ErrNo = -00001 then
MyProcedure();
end;
end;
end;

код писал напрямую, так что возможны опечатки.


 
Толик ©   (2003-07-17 17:16) [6]

Сорри, не видел дальнейших сообщений, так что вариант 2.
А как передаётся запрос на сервер? Если через какие-то сторонние компаненты, то м.б. у них есть свои методы обработки ошибок? Например у Direct Oracle Access есть компонент TOracleEvent с событием возникновения серверных исключений.


 
ruslan_as ©   (2003-07-17 17:48) [7]

Спасибо Толик!
Там маленькая помарка TmpStr:=Copy(E.Message, 5, 5) а то ругается на StrToInt. А так уже работает.



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

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

Наверх




Память: 0.48 MB
Время: 0.012 c
1-10295
Edvard
2003-07-22 12:13
2003.08.04
Помогите с RichEdit !


6-10320
tv
2003-05-28 16:23
2003.08.04
Вопрос о печати из TWebBrowser


14-10353
Катерина
2003-07-18 11:02
2003.08.04
До свидания!


3-10092
LePeR
2003-07-13 19:49
2003.08.04
AACS или FE


6-10322
nemec
2003-05-27 21:18
2003.08.04
Сообщения в WebBrowser