Страница 1 из 1

unsuccessful execution caused by system error ...

Добавлено: 29 май 2008, 12:45
Crazy Bee
Собственно.

Сервер Firebird 1.5.4
ОС любая (пробовали)
набор UDF (rfunc)

Клиентское приложение (C++ Builder + FibPlus)
ОС тоже любая

Сервер и клиент ставим на одну станцию и подключение через localhost

Из клиентского приложения запускается некая хранимая процедура, выполняющая update/insert в некий набор таблиц.

На некоторых БД все отрабатывает правильно и без проблем.

Проблема в том, что на некоторых БД в процессе работы вылетает следующее сообщение:
unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements. Connection lost to database


Пробовали отработать процедуру из EMS SQL Manager, сообщения нет, но она не выполняется.

Открываем firebird.log
Читаем

IT-DEP-01 (Server) Thu May 29 12:25:54 2008
The user defined function: DIV
referencing entrypoint: fn_div
in module: rfunc
caused the fatal exception: Integer divide by zero.
The code attempted to divide an integer value
by an integer divisor of zero.
This exception will cause the Firebird server
to terminate abnormally.

IT-DEP-01 (Server) Thu May 29 12:25:54 2008
Integer divide by zero.
The code attempted to divide an integer value
by an integer divisor of zero.
This exception will cause the Firebird server
to terminate abnormally.

IT-DEP-01 (Server) Thu May 29 12:25:54 2008
Integer divide by zero.
The code attempted to divide an integer value
by an integer divisor of zero.
This exception will cause the Firebird server
to terminate abnormally.

IT-DEP-01 (Client) Thu May 29 12:25:54 2008
C:\Program Files\Firebird\Firebird_1_5\bin\fbserver.exe: terminated abnormally (4294967295)


IT-DEP-01 (Client) Thu May 29 12:25:55 2008
Guardian starting: C:\Program Files\Firebird\Firebird_1_5\bin\fbserver.exe


Действительно, в хранимой процедуре используется UDF DIV

НО. до каждого ее вызова (в нескольких точках) перепроверяются значения используемых ею переменных (нам достаточно выставить их в 1, если хоть один равен 0)

Кто может подсказать, где копать? и главное, какой лопатой?

Re: unsuccessful execution caused by system error ...

Добавлено: 29 май 2008, 13:28
stix-s
Crazy Bee писал(а):
Кто может подсказать, где копать? и главное, какой лопатой?
В исходниках UDF, вестимо

Re: unsuccessful execution caused by system error ...

Добавлено: 29 май 2008, 19:36
Merlin
Crazy Bee писал(а): НО. до каждого ее вызова (в нескольких точках) перепроверяются значения используемых ею переменных (нам достаточно выставить их в 1, если хоть один равен 0)
В ХП нулл не равен нулю, а внутри УДФ он 0.

Re: unsuccessful execution caused by system error ...

Добавлено: 30 май 2008, 10:28
WildSery
Merlin писал(а):В ХП нулл не равен нулю, а внутри УДФ он 0.
Это смотря какая UDF ;)