Форум: "Потрепаться";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];
ВнизПомогите обработать ошибку Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c