Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Сообщения об ошибках / 12 сообщений из 12, страница 1 из 1
11.10.2013, 15:28:46
    #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
11.10.2013, 16:37:43
    #38424685
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщения об ошибках
asviridenkov,

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

по п.1 присоединяюсь, периодически приходится вычислять "чья лужа"..
...
Рейтинг: 0 / 0
13.10.2013, 01:58:20
    #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
14.10.2013, 17:24:59
    #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
14.10.2013, 17:58:44
    #38427060
asviridenkov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сообщения об ошибках
Док,

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

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

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



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


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