Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Как поймать ошибку в OnDeleteError событии TOraQuery  [new]
AdamAry
Member

Откуда:
Сообщений: 117
При использовании ODAC (EhLib) на уровне события сессии TOraSession всё проcто:

procedure TForm1.OSessionError(Sender: TObject; E: EDAError; var Fail: Boolean);
var
  StrErrorCode: string;
begin
  StrErrorCode := IntToStr(E.ErrorCode);
  ShowMessage(StrErrorCode);
  ShowMessage('Ошибка на уровне БД: ' + E.Message);
end;


Как быть на уровне экземпляра TOraQuery
procedure TForm1.OMyQueryDeleteError(DataSet: TDataSet; E: EDatabaseError; var Action: TDataAction);


т.е. как поймать ошибку например?:
ORA-02292 
30 ноя 18, 12:44    [21749817]     Ответить | Цитировать Сообщить модератору
 Re: Как поймать ошибку в OnDeleteError событии TOraQuery  [new]
zinpub
Member

Откуда:
Сообщений: 294
AdamAry,

Ловите OraSession.OnError - там ошибка E:EDAError - в ней есть код оракловый
30 ноя 18, 13:16    [21749876]     Ответить | Цитировать Сообщить модератору
 Re: Как поймать ошибку в OnDeleteError событии TOraQuery  [new]
AdamAry
Member

Откуда:
Сообщений: 117
zinpub,
это я знаю, но мне нельзя использовать события TOraSession (OraSession.OnError).

Мне необходимо вытащить ошибку именно из
procedure TForm1.OMyQueryDeleteError(DataSet: TDataSet; E: EDatabaseError; var Action: TDataAction);
из E, если быть более точным.
30 ноя 18, 13:25    [21749893]     Ответить | Цитировать Сообщить модератору
 Re: Как поймать ошибку в OnDeleteError событии TOraQuery  [new]
devart
Member

Откуда: www.devart.com
Сообщений: 1111
AdamAry,

событие OnDeleteError возникает при ошибке удаления при вызове метода OraQuery.Delete.
Если в OraQuery вы задали явное удаление, т.е.

OraQuery.SQL.Text := 'DELETE FROM ......';


то ошибку нужно ловить либо в событии OraSession.OnError либо в блоке try...except

  try
    OraQuery.Execute;
  except
    on e: EOraError do
      ShowMessage(IntToStr(e.ErrorCode) + ': ' + e.Message);
  end;
30 ноя 18, 13:37    [21749922]     Ответить | Цитировать Сообщить модератору
 Re: Как поймать ошибку в OnDeleteError событии TOraQuery  [new]
AdamAry
Member

Откуда:
Сообщений: 117
devart,
удаление не явное, а через
HorzScrollBar, через ExtraPanel, nbDeleteEh.


Нельзя использовать событие
OraSession.OnError 


Надо использовать событие
TOraQuery OnDeleteError.
30 ноя 18, 14:14    [21750001]     Ответить | Цитировать Сообщить модератору
 Re: Как поймать ошибку в OnDeleteError событии TOraQuery  [new]
zinpub
Member

Откуда:
Сообщений: 294
AdamAry
devart,
удаление не явное, а через
HorzScrollBar, через ExtraPanel, nbDeleteEh.


Нельзя использовать событие
OraSession.OnError 


Надо использовать событие
TOraQuery OnDeleteError.


Объясните пожалуйста, просто в целях образования, почему Session нельзя использовать?
30 ноя 18, 14:26    [21750026]     Ответить | Цитировать Сообщить модератору
 Re: Как поймать ошибку в OnDeleteError событии TOraQuery  [new]
devart
Member

Откуда: www.devart.com
Сообщений: 1111
AdamAry,

При удалении через DBGridEh extraPanel, при возникновении ошибки событие OraQuery.OnDeleteError вызывается, и ошибка приходит корректно.
30 ноя 18, 15:14    [21750127]     Ответить | Цитировать Сообщить модератору
 Re: Как поймать ошибку в OnDeleteError событии TOraQuery  [new]
AdamAry
Member

Откуда:
Сообщений: 117
devart,
как получить номер ошибки из?:
procedure TForm1.MyOraQueryDeleteError(DataSet: TDataSet; E: EDatabaseError; var Action: TDataAction);

из
E: EDatabaseError

из
E
30 ноя 18, 15:34    [21750183]     Ответить | Цитировать Сообщить модератору
 Re: Как поймать ошибку в OnDeleteError событии TOraQuery  [new]
devart
Member

Откуда: www.devart.com
Сообщений: 1111
AdamAry,

Проверить что класс ошибки EOraError, привести E к EOraError, и смотреть свойство ErrorCode

procedure TForm1.OraQueryDeleteError(DataSet: TDataSet; E: EDatabaseError; var Action: TDataAction);
begin
if E is EOraError then
  ShowMessage(IntToStr(EOraError(E).ErrorCode))
end;
30 ноя 18, 15:46    [21750207]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить