Главная страница
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
14-10383
Knight
2003-07-16 21:53
2003.08.04
Свободу действий модераторам!!!


11-10156
Gandalf
2002-12-01 11:37
2003.08.04
Пора обновить FAQ


8-10307
R2D2
2003-04-14 17:40
2003.08.04
TBASS 1.8 - последний релиз - как его устанавливать... ни единой


3-10099
N&N
2003-07-14 11:09
2003.08.04
Как присвоить полю Integer значение


7-10475
Lola
2003-05-22 20:38
2003.08.04
ShellExecute