Страница 1 из 1
Удобочитаемый Exception
Добавлено: 27 апр 2006, 10:31
Sikambr
В триггере генерю 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===
Добавлено: 27 апр 2006, 11:15
dimitr
вытягивай из IBX/FIB+ статус-вектор и парси его самостоятельно
Добавлено: 27 апр 2006, 12:11
Sikambr
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 распознавать.
Но тоже как-то криво.
Может есть какой-нибудь переключатель: не присылать служебную информацию?
Добавлено: 27 апр 2006, 14:48
dimitr
я не предлагал парсить результат isc_interprete. Я предлагал парсить статус-вектор самому, вместо вызова isc_interprete.
Добавлено: 27 апр 2006, 15:10
Sikambr
dimitr писал(а):я не предлагал парсить результат isc_interprete. Я предлагал парсить статус-вектор самому, вместо вызова isc_interprete.
Откровенное говоря, я не догоняю как из статус-вектора выдрать текст эксепшина.
Можно пример или ссылку, в каком направлении копать.
Добавлено: 28 апр 2006, 16:45
pastor
Sikambr писал(а):
Можно пример или ссылку, в каком направлении копать.
TpFibErrorHandler
Добавлено: 29 апр 2006, 10:40
kdv
Pastor - включи у себя в настройках bbcode в письмах. или включай его в ответах.
Добавлено: 03 май 2006, 12:42
Sikambr
pastor писал(а):Sikambr писал(а):
Можно пример или ссылку, в каком направлении копать.
TpFibErrorHandler
Спасибо! Тест уменьшился, но служебная инфа еще осталась:
===
CANNOT_DELETE_COUNTRY_0.
Нельзя удалять страну с кодом 0.
At trigger 'COUNTRIES_BEFORE'
At trigger 'VW$COUNTRIES_BEFORE'.
===
TpFibErrorHandler оставляет все, что остается после строк, в которых есть слово "EXCEPTION".
Для Interbase этого было бы достаточно, а вот для FireBird нет.
Жестко привязываться к серверу не хочется.
К тому же, в следующих версиях FireBird, разработчики могут поменять порядок строк EXCEPTION.
Какие еще есть идеи?