Обработка ошибок SQL-запросов в Delphi с помощью TAdoQuery: минимизация технических деталей для пользователя
При работе с базами данных в программировании на Delphi часто возникают ситуации, когда необходимо обработать ошибки SQL-запросов таким образом, чтобы пользователю была предоставлена только полезная информация, без технических деталей. В данной статье мы рассмотрим, как это можно сделать, используя компонент TAdoQuery.
Проблема
Пользователь столкнулся с проблемой, при которой при выполнении SQL-запроса с помощью компонента TAdoQuery в Delphi, в блоке try...except отлавливается ошибка, но сообщение, которое отображается пользователю, содержит множество ненужной информации, делающей его непонятным для обычного пользователя. Цель пользователя - показать только ту часть сообщения об ошибке, которая содержит полезную информацию, например, сообщение о том, что таблица уже существует.
Решение
Для решения данной проблемы можно использовать свойство Errors объекта TADOConnection, а именно свойство Description объекта Error. Создадим функцию ParseOBDCError, которая будет извлекать нужную часть сообщения об ошибке:
function ParseOBDCError(ErrorDescription: String): String;
var
Ps: Integer;
Pattern: String;
begin
Pattern := '%msg:';
Ps := Pos(Pattern, ErrorDescription);
if Ps > 0 then
begin
Result := Copy(ErrorDescription, Ps + Length(Pattern) + 1);
// Удаляем лишние символы
Result := StringReplace(Result, '<', '', [rfReplaceAll]);
Result := StringReplace(Result, '>', '', [rfReplaceAll]);
Result := Trim(Result);
end
else
Result := ErrorDescription;
end;
Теперь обновим код обработки ошибок, используя эту функцию:
AdoQuery := TAdoQuery.Create(self);
AdoQuery.Connection := AdoConnection;
AdoQuery.SQL.Add(sqlStr);
AdoQuery.Prepared := True;
try
AdoQuery.ExecSQL;
AdoQuery.Active := False;
except on E: Exception do
begin
if AdoConnection.Errors.Count > 0 then
ShowMessageFmt('Ошибка при создании таблицы: %s', [ParseOBDCError(AdoConnection.Errors[0].Description)])
else
ShowMessageFmt('Произошла неизвестная ошибка: %s', [E.Message]);
end;
Важные замечания
Убедитесь, что вы используете правильный класс исключения для обработки ошибок.
Не забывайте о логировании ошибок для удобства отладки.
Используйте Abort для корректного информирования программы об ошибке, но без показа сообщения пользователю.
Применяя этот подход, вы сможете минимизировать технические детали в сообщениях об ошибках для пользователя, делая их более понятными и дружелюбными.
При работе с базой данных в Delphi через `TAdoQuery` необходимо обработать ошибки SQL-запросов таким образом, чтобы пользователю предоставлялась информация без технических подробностей.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.