powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Сообщения об ошибках
12 сообщений из 12, страница 1 из 1
Сообщения об ошибках
    #38424589
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Неимоверно уже достали сообщения вида "Numeric overflow or что-то там еще or string truncation, string right truncation"
Типа - "Хозяин, какая-лажа случилась, может такая, а может вот такая, или вот еще такая... но наверное все же вот эта"
Нельзя выводить четко что произошло? Ну и то что не выводится имя поля, в котором проблема - отдельное удовольствие. Иди гадай какое из 30-ти полей обрезалось. 21 век на дворе...

2. Есть ли способ подменить красивые и понятные пользователю сообщения вида "violation of PRIMARY or UNIQUE KEY constraint "BLA-BLA" on table "BLA_BLA" на что-то другое?
Есть же механизм пользовательских исключений, почему бы не дать указывать исключение у PK, FK и.т.п. вместо того чтобы на клиенте все ловить, разбирать, подменять?
...
Рейтинг: 0 / 0
Сообщения об ошибках
    #38424685
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkov,

по второму вопросу был тикет. Первоначально был даже запланирован на FB3, но перед выходом альфы его исключили.
CORE-736
...
Рейтинг: 0 / 0
Сообщения об ошибках
    #38424699
mvb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkov,

по п.1 присоединяюсь, периодически приходится вычислять "чья лужа"..
...
Рейтинг: 0 / 0
Сообщения об ошибках
    #38425461
Евгений Болтик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkov
2. Есть ли способ подменить красивые и понятные пользователю сообщения вида "violation of PRIMARY or UNIQUE KEY constraint "BLA-BLA" on table "BLA_BLA" на что-то другое?
Есть же механизм пользовательских исключений, почему бы не дать указывать исключение у PK, FK и.т.п. вместо того чтобы на клиенте все ловить, разбирать, подменять?

Достало тоже и недавно сделал так в базе
Код: sql
1.
COMMENT ON TABLE D279 IS 'Заявки на обслуживание';


В ловушке ошибки
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
  S := '';
  i := pos('FOREIGN KEY', Text);
  if i > 0 then begin
    i := pos('on table', Text, i+1);
    if i > 0 then begin
      i := pos('"', Text, i+1);
      if i > 0 then begin
        j := pos('"', Text, i+1);
        if j > 0 then begin
          s := copy(Text, i+1, j-i-1);

        end;
      end;
    end;
  end;
{FormTree84562864.DBTV.Query34465248_74403344.DeleteQuery:
Violation of FOREIGN KEY constraint "".
Violation of FOREIGN KEY constraint "FKT002_D048" on table "T002".
Foreign key references are present for the record.
At trigger 'TRD009ADDRS_D048_D' line: 5, col: 3
At trigger 'TRVD009ADDRS_IED' line: 20, col: 1.}


  if (s <> '') and
     (DM_Navigator <> nil) and
     (DM_Navigator.DBNavigator <> nil) and
     DM_Navigator.DBNavigator.Connected then begin
    Q := TB_Query.Create(nil);
    try
      Q.SQL.Text := 'SELECT RDB$DESCRIPTION FROM rdb$relations WHERE rdb$relation_name = :TName';
      Q.ParamByName('TName').AsString := s;
      Q.Open;
      if not Q.IsEmpty and (Q.FieldByName('RDB$DESCRIPTION').AsString <> '') then
        Text := Format('Данные используются в таблице "%s"'#13#10'%s',
          [Q.FieldByName('RDB$DESCRIPTION').AsString, Text]);
    finally
      FreeAndNil(Q);
    end;
  end;



По крайней мере не надо объяснять пользователям почему же нельзя удалить.
...
Рейтинг: 0 / 0
Сообщения об ошибках
    #38426986
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkovХозяин, какая-лажа случилась, может такая, а может вот такая, или вот еще такая... но наверное все же вот эта
Можно вешать на триггерах пользовательское исключения, а на клиенте их анализировать.

У меня примерно так (использую ФИБовский ErrorHandlerFIBErrorEvent)в базе(в списке исключений оно третье по счету)
Код: sql
1.
CREATE EXCEPTION N3_NO_EMPTY_ANKETA_DELETE 'You can't remove the patient because there's a dependency on Tbl_VisitMain';



на клиенте
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Procedure TDMFIB.ErrorHandlerFIBErrorEvent(Sender: TObject;
  ErrorValue: EFIBError; KindIBError: TKindIBError; var DoRaise: Boolean);
var ErrMsg: String;
begin
case ErrorValue.IBErrorCode of
  //========================
  335544324: ErrMsg:= 'Не удалось подсоединиться к базе данных!';
......
//========================
  335544517: begin //пользовательские исключения самой базы данных
               case ErrorHandler.ExceptionNumber of
                 1: ErrMsg:= ...
                  ......
                 3: ErrMsg:= 'Вы не можете удалить этого пациента, пока в базе данных '
                       + 'есть сведения (жалобы, лабораторные анализы, УЗИ, прочие '
                       + 'исследования), связанные с посещениями врача данным пациентом!';


.....
...
Рейтинг: 0 / 0
Сообщения об ошибках
    #38427060
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,

да у меня в дельфовском коде вообще текстов не осталось
ни пользовательских ни SQL
да и форм почти нет))
точнее есть с 10-к, но они одни и те же на все проекты
...
Рейтинг: 0 / 0
Сообщения об ошибках
    #38427121
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asviridenkovда у меня в дельфовском коде вообще текстов не осталось
т.е.юзеры у тебя работают путем телепатического коннекта к серверу?

Ведь где-то же ты эти ошибки овеществляешь в виде текстового сообщения? Вот там, на клиенте, и анализируй GDSCODE. А уж какие компоненты доступа для этого использовать, имхо, никакой половой разницы
...
Рейтинг: 0 / 0
Сообщения об ошибках
    #38427163
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокВедь где-то же ты эти ошибки овеществляешь в виде текстового сообщения? Вот там, на клиенте, и анализируй GDSCODE. А уж какие компоненты доступа для этого использовать, имхо, никакой половой разницы

Все в базе
Дельфовый код вообще не подозревает о бизнес-логике
...
Рейтинг: 0 / 0
Сообщения об ошибках
    #38429215
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДокУ меня примерно так
Код: pascal
1.
2.
3.
case ErrorValue.IBErrorCode of
  335544324: ErrMsg:= 'Не удалось подсоединиться к базе данных!';
......



В целом хороший подход, но юзать в коде константы по значению... :-\ К тому же зачем нужен текст исключения в базе, если он все равно меняется?
...
Рейтинг: 0 / 0
Сообщения об ошибках
    #38430306
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutalзачем нужен текст исключения в базе
для правильной ориентации
...
Рейтинг: 0 / 0
Сообщения об ошибках
    #38430764
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так названия вполне хватает, + можно в комментах описать всё, что хочется
...
Рейтинг: 0 / 0
Сообщения об ошибках
    #38432101
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-BrutalТак названия вполне хватает
чти тут еще раз
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Сообщения об ошибках
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]