Советы по Delphi



         

Обработка исключений EDBEngineError - часть 2


/p>

В данной процедуре сделана попытка изменить значение поля таблицы и вызвать метод Post соответствующего компонента TTable. Ошибка при попытке отправить измененные данные перехватывается в секции try..except. В случае возникновения EDBEngineError, выполнение передается в секцию except, где происходит создание объекта EDBEngineError (E) и передача его процедуре ShowError. Обратите внимание на то, что в этой секции во внимание берутся только исключения EDBEngineError. В реальной программе код должен содержать проверку на другие типы исключений.

Процедура ShowError в качестве параметра получает ссылку на объект EDBEngineError и "опрашивает" его на предмет наличия информации об ошибках. В приведенном ниже примере информация об ошибках отображается в компоненте TMemo. В реальной жизни отображение ошибок может и не понадобится, но информация о них является логикой работы приложения, расширяющая его функциональность так, чтобы оно могло правильно реагировать на них. Первым шагом необходимо вычислить количество реально произошедших ошибок. Эта величина хранится в свойстве ErrorCounnt. Данное свойство имеет тип Integer и может использоваться для создания цикла, в теле которого можно по очереди получить информацию о каждой ошибке, содержащейся в объекте. В теле цикла поочередно ErrorCount-раз перебираются все содержащиеся в объекте ошибки (как вы помните, каждая ошибка представляет собой запись-элемент свойства Errors), "достается" о них вся информация и помещается в компонент TMemo.

procedure TForm1.ShowError(AExc: EDBEngineError);vari: Integer;beginMemo1.Lines.Clear;Memo1.Lines.Add('Количество ошибок: ' + IntToStr(AExc.ErrorCount));Memo1.Lines.Add('');{Перебираем все записи Errors}for i := 0 to AExc.ErrorCount - 1 do beginMemo1.Lines.Add('Сообщение: ' + AExc.Errors[i].Message);Memo1.Lines.Add(' Категория: ' +IntToStr(AExc.Errors[i].Category));Memo1.Lines.Add(' Код ошибки: ' +IntToStr(AExc.Errors[i].ErrorCode));Memo1.Lines.Add(' Субкод: ' +IntTooStr(AExc.Errors[i].SubCode));Memo1.Lines.Add(' Реальная ошибка: ' +IntToStr(AExc.Errors[i].NativeError));Memo1.Lines.Add('');end;end;

[000592]




Содержание  Назад