Удобочитаемый Exception

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Sikambr
Сообщения: 41
Зарегистрирован: 03 ноя 2005, 08:31

Удобочитаемый Exception

Сообщение Sikambr » 27 апр 2006, 10:31

В триггере генерю Exception.
На клиенте хотелось бы получить только текст Exception,
а получаю еще и служебную информацию.
Что можете посоветовать?

FIB или IBX вроде тут не причем,
точнее можно отключить ShowIBMessage из IBErrorMessages,
но тогда я и текст Exception не получу

Вот что FireBird присылает:
===cut===
Exception 268741261.
Exception 12.
CANNOT_DELETE_COUNTRY_0.
Нельзя удалять страну с кодом 0.
trigger 'COUNTRIES_BEFORE''
trigger 'VW$COUNTRIES_BEFORE'.
===cut===

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Сообщение dimitr » 27 апр 2006, 11:15

вытягивай из IBX/FIB+ статус-вектор и парси его самостоятельно

Sikambr
Сообщения: 41
Зарегистрирован: 03 ноя 2005, 08:31

Сообщение Sikambr » 27 апр 2006, 12:11

dimitr писал(а):вытягивай из IBX/FIB+ статус-вектор и парси его самостоятельно
Мне не нравится, то что нужно будет жестко привязываться к порядку возвращаемых строк. У FireBird одно количество строк, у Interbase другое.
IBX вытягивает строки так:

Код: Выделить всё

while (GetGDSLibrary.isc_interprete(local_buffer, @status_vector) > 0) do
begin
  [...]
  usr_msg := usr_msg + string(local_buffer);
end;
Можно в тексте Exception префикс использовать,
например: "xxxЭто ошибка", а потом этот xxx распознавать.
Но тоже как-то криво.
Может есть какой-нибудь переключатель: не присылать служебную информацию?

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Сообщение dimitr » 27 апр 2006, 14:48

я не предлагал парсить результат isc_interprete. Я предлагал парсить статус-вектор самому, вместо вызова isc_interprete.

Sikambr
Сообщения: 41
Зарегистрирован: 03 ноя 2005, 08:31

Сообщение Sikambr » 27 апр 2006, 15:10

dimitr писал(а):я не предлагал парсить результат isc_interprete. Я предлагал парсить статус-вектор самому, вместо вызова isc_interprete.
Откровенное говоря, я не догоняю как из статус-вектора выдрать текст эксепшина.
Можно пример или ссылку, в каком направлении копать.

pastor
Сообщения: 12
Зарегистрирован: 17 мар 2005, 16:27

Сообщение pastor » 28 апр 2006, 16:45

Sikambr писал(а): Можно пример или ссылку, в каком направлении копать.
TpFibErrorHandler

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 29 апр 2006, 10:40

Pastor - включи у себя в настройках bbcode в письмах. или включай его в ответах.

Sikambr
Сообщения: 41
Зарегистрирован: 03 ноя 2005, 08:31

Сообщение Sikambr » 03 май 2006, 12:42

pastor писал(а):
Sikambr писал(а): Можно пример или ссылку, в каком направлении копать.
TpFibErrorHandler
Спасибо! Тест уменьшился, но служебная инфа еще осталась:
===
CANNOT_DELETE_COUNTRY_0.
Нельзя удалять страну с кодом 0.
At trigger 'COUNTRIES_BEFORE'
At trigger 'VW$COUNTRIES_BEFORE'.
===
TpFibErrorHandler оставляет все, что остается после строк, в которых есть слово "EXCEPTION".
Для Interbase этого было бы достаточно, а вот для FireBird нет.
Жестко привязываться к серверу не хочется.
К тому же, в следующих версиях FireBird, разработчики могут поменять порядок строк EXCEPTION.

Какие еще есть идеи?

Ответить