Delphi. FireDac. Обработка ошибок

Данная статья посвящена обработке ошибок и основана на официальной документации.

-старая версия

-новая версия

Введение

Класс  EFDDBEngineException является базовым для всех ошибок DBMS. Экземпляр класса представляет собой коллекцию ошибок БД, доступных через свойство EFDDBEngineException.Errors[], а также представленных классом  TFDDBError.

FireDAC подразумевает персонализацию и унификацию EFDDBEngineException исключений TFDDBError ошибок. “Персонализация” означает, что драйвер может иметь свои собственные исключения и классы ошибок, которые содержат информацию, специфичную для DBMS. Далее, в документации идет такая таблица

18

TFDDBError имеет свойство ErrorCode, которое содержит нативные коды ошибок DBMS

Унификация означает, что все классы исключения унаследованы от EFDDBEngineException – базового класса, который содержит независимую информацию о драйверах. Свойство этого класса Kind это независимая ошибка DBMS. В качестве примера, обработка ошибки уникальности ключа может быть следующей.

В справке указаны следующие TFDCommandExceptionKind

FireDAC.Stan.Error.TFDCommandExceptionKind

Информация об ошибках содержится в следующих свойствах класса EFDDBEngineException

  • Errors — коллекция TFDDBError объектов.
  • ErrorCount — Число ошибок коллекции.
  • Kind — Независимые от DBMS ошибки.
  • Message — актуальное сообщение ошибки.

А также в свойствах TFDDBError

  • ErrorCode — Специфические ошибки DBMS.
  • Kind — Общие для всех DBMS ошибки.
  • Message — Сообщения об ошибках

Техника обработки ошибок

Собственно обработка ошибок может осуществляться несколькими способами

1) Традиционно try / except / end

2) Через обработку события TFDQuery.OnError

3) Через обработку события TFDConnection.OnError

Предыдущие 2 способа хороши для “логирования” исключений или настройки исключений, например

Пример из документации

4) Через обработку TFDQuery.OnExecuteError для специфических ошибок Array DML

5) Через обработку TFDQuery.OnUpdateError для обработки ошибок при инструкции Update

6) Через обработку событий TFDConnection.OnLost, OnRestored, OnRecover для обработки ошибок потери соединения.

GUI для конечного пользователя

FireDACErrorPicture

 

Чтобы воспользоваться этой возможностью, нужно сделать следующее – добавить на форму  TFDGUIxErrorDialog,

Диалог ловит событие TApplication.OnException и выдает всплывающее сообщение. Вкладка Query позволяет увидеть SQL команду, которая привела к ошибке. Ctrl+C копирует информацию об ошибке в буфер.

This entry was posted in Delphi, FireDAC. Bookmark the permalink.