Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Тpансляция ошибок

Delphi , Базы данных , Ошибки БД

Тpансляция ошибок

Автор: Nomadic

- Исправил ли ты ошибку в программе?
- В разумных пределах...

Делаем ApplyUpdates. Если пpи insert(update) пpоизошла ошибка (поле null, сpаботал check, etc.), то BDE всегда говоpит "General SQL Error" вместо ноpмального сообщения об ошибке :-( Без CU все ноpмально, pазумеется. Как боpоть этот баг?

Использyй ноpмальнyю тpансляцию ошибок в Application.OnException. Вpоде это.


procedure DBExceptionTranslate(E: EDBEngineError); 


function OriginalMessage: string;
var
  I: Integer;
  DBErr: TDBError;
  S: string;
begin
  Result := '';
  for I := 0 to E.ErrorCount - 1 do
  begin
    DBErr := E.Errors[I];
    case DBErr.NativeError of
      -836: { Intebase exception }
        begin
          S := DBErr.Message;
          Result := #13#10 + Copy(S, Pos(#10, S) + 1, Length(S));
          Exit;
        end;
    end;
    S := Trim(DBErr.Message);
    if S <> '' then
      Result := Result + #13#10 + S;
  end;
end;

begin
  case E.Errors[0].ErrorCode of
    $2204:
      E.Message := LoadStr(SKeyDeleted);
    $271E, $2734:
      E.Message := LoadStr(SInvalidUserName);
    $2815:
      E.Message := LoadStr(SDeadlock);
    $2601:
      E.Message := LoadStr(SKeyViol);
    $2604:
      E.Message := LoadStr(SFKViolation) + OriginalMessage;
  else
    begin
      E.Message := Format(LoadStr(SErrorCodeFmt), [E.Errors[0].ErrorCode]) +
        OriginalMessage;
    end;
  end;
end;

Перевод контента на русский язык:

Это код Delphi, который реализует перевод ошибок в приложении. Цель - поймать и перевести конкретные ошибки базы данных в более значимые сообщения, а не стандартное сообщение "Общая ошибка SQL".

Процедура DBExceptionTranslate вызывается, когда происходит исключение в операциях базы данных приложения (EDBEngineError). Она перебирает список ошибок, возвращенных движком базы данных, и проверяет на соответствие конкретным кодам ошибок. Если найден совпад, она задает новый текст ошибки, используя строку ресурса, загруженную из файла.

Правила перевода реализованы в виде серии case-запросов в процедуре. Код ошибки сравнивается с списком известных ошибок, и если найден совпад, соответствующее сообщение ошибка присваивается свойству Message исключения. Если не найден совпад, используется оригинальное сообщение об ошибке.

Некоторые наблюдения и предложения:

  1. Правила перевода ошибок seem to be specific to BDE (Borland Database Engine) errors. Если вы используете другой движок базы данных, эти правила могут не применяться.
  2. Код использует строки ресурсов (загруженные из LoadStr) для переведенных сообщений об ошибках. Это хороший практический подход, поскольку позволяет легко локализовать и поддерживать сообщения об ошибках.
  3. Код предполагает, что первый ошибок в списке ошибок, возвращенных движком базы данных, является наиболее важным. Если это предположение не всегда верно, вам может потребоваться изменить код для обработки нескольких ошибок или приоритизации их differently.
  4. Функция OriginalMessage используется для конкатенации переведенного сообщения с оригинальной ошибкой (если доступна). Это может помочь предоставить более контекстное описание, что пошло не так.

В целом, этот код обеспечивает хороший старт для реализации перевода ошибок в приложении, использующем BDE. Однако вам может потребоваться адаптация его к вашим конкретным требованиям и движку базы данных.

Некоторые потенциальные улучшения:

  1. Рассмотрите добавление более кодов ошибок в правила перевода.
  2. Если возможно, используйте более robust метод для определения наиболее важной ошибки (например, на основе степени или влияния).
  3. Добавьте более подробные комментарии в коде, чтобы помочь другим понять его цель и поведение.
  4. Тестирование кода тщательно с различными сценариями ошибок, чтобы убедиться, что он работает как ожидалось.

В статье описывается метод трансляции ошибок в программе Delphi с помощью обработчика Application.OnException, который позволяет заменять стандартное сообщение о генеральной SQL-ошибке на более детальное и информативное.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Ошибки БД ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:20:59/0.0051450729370117/1