Страница 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.

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