Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

FAQ - Вопросы - ответы - советы - Базы данных

Вопрос:

Делаем APPLYUPDATES. Если при INSERT(UPDATE) произошла ошибка (поле NULL, сработал CHECK, ETC), то BDE всегда говорит "GENERAL SQL ERROR" вместо нормального сообщения об ошибке :-( Без CU все нормально, разумеется. Как бороть этот баг?

Ответ:

Используй нормальную трансляцию ошибок в APPLICATION.ONEXCEPTION. Вроде это.

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;

Оставить комментарий

Комментарий:
можно использовать BB-коды
Максимальная длина комментария - 4000 символов.
 
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог