FB 2.0.3 Падает
-
- Сообщения: 44
- Зарегистрирован: 14 мар 2008, 21:01
FB 2.0.3 Падает
Для чтения из базы исполюзую транзакцию
read
read_committed
rec_version
Для записи
write
consistency
В 1.5 все работает, в 2.х падает сервер
Не удается найти описание для идентификатора события 281 из источника FirebirdGuardianDefaultInstance. Вызывающий данное событие компонент не установлен на этом локальном компьютере или поврежден. Установите или восстановите компонент на локальном компьютере.
Если событие возникло на другом компьютере, возможно, потребуется сохранить отображаемые сведения вместе с событием.
К событию были добавлены следующие сведения:
Abnormal Termination: C:\Program Files\Firebird\Firebird_2_0\bin\fbserver.exe: terminated abnormally (4294967295)
И сообщение об ошибке об ошибке Error reading data from the connection потом Error writing to the connection, после с этой таблицы ничего не читается.
Как быть?
read
read_committed
rec_version
Для записи
write
consistency
В 1.5 все работает, в 2.х падает сервер
Не удается найти описание для идентификатора события 281 из источника FirebirdGuardianDefaultInstance. Вызывающий данное событие компонент не установлен на этом локальном компьютере или поврежден. Установите или восстановите компонент на локальном компьютере.
Если событие возникло на другом компьютере, возможно, потребуется сохранить отображаемые сведения вместе с событием.
К событию были добавлены следующие сведения:
Abnormal Termination: C:\Program Files\Firebird\Firebird_2_0\bin\fbserver.exe: terminated abnormally (4294967295)
И сообщение об ошибке об ошибке Error reading data from the connection потом Error writing to the connection, после с этой таблицы ничего не читается.
Как быть?
-
- Сообщения: 44
- Зарегистрирован: 14 мар 2008, 21:01
После записи нельзя прочитать из ПО даже если сервер рестартануть,kdv писал(а):надо постараться идентифицировать место, где происходит ошибка. если при чтении таблицы, значит база битая.
но при этом IBExpert все читает. Базу создал новую залил все данные через IBExpert и тоже самое.
Запись при этом в таблице существует, но прочитать ее из ПО никак.
Выдает выше указанную ощибку
-
- Сообщения: 44
- Зарегистрирован: 14 мар 2008, 21:01
-
- Сообщения: 44
- Зарегистрирован: 14 мар 2008, 21:01
The user defined function: ROUNDTOhvlad писал(а):Читаем firebird.log, вслух
referencing entrypoint: RoundTo
in module: UdfRest
caused the fatal exception: Access violation.
The code attempted to access a virtual
address without privilege to do so.
This exception will cause the Firebird server
to terminate abnormally.
-
- Сообщения: 44
- Зарегистрирован: 14 мар 2008, 21:01
Тоесть тут чтото не так?kdv писал(а):вот и причина. а "работает в 1.5, а в 2.03 не работает" - значит, скорее всего, выделяет память через malloc, а не так как положено. Т.е. автор udf не читал faq на ibase.ru
Код: Выделить всё
function RoundTo(var Value: Double; var Digits: Integer):PDouble; cdecl; export;
begin
SetRoundMode(rmNearest);
Value := Math.RoundTo(Value, Digits);
Result := @Value;
end;
Последний раз редактировалось armagedon2007 21 мар 2008, 14:06, всего редактировалось 1 раз.
-
- Сообщения: 44
- Зарегистрирован: 14 мар 2008, 21:01
Почемуто без PDouble в 1.5 не так работало.WildSery писал(а):Зачем на выходе PDouble? Как процедура в БД объявлена?
Код: Выделить всё
DECLARE EXTERNAL FUNCTION ROUNDTO
DOUBLE PRECISION,
INTEGER
RETURNS DOUBLE PRECISION FREE_IT
ENTRY_POINT 'RoundTo' MODULE_NAME 'UdfRest';
Что "FREE IT"? Ты выделял память под переменную?
Возвращай как все люди, BY VALUE, и возврат соответственно просто DOUBLE в коде.
Hint: Срочно читать статью. Даже если уже "смотрел".
Возвращай как все люди, BY VALUE, и возврат соответственно просто DOUBLE в коде.
Hint: Срочно читать статью. Даже если уже "смотрел".
-
- Сообщения: 44
- Зарегистрирован: 14 мар 2008, 21:01
Прочитай лучше сам и скажи вчем отличее того, что я написал от того, что во втором примере указано? Или статья устарела для FB 2.xWildSery писал(а):Hint: Срочно читать статью. Даже если уже "смотрел".
Переделал все заработало.
Спасибо.
-
- Сообщения: 44
- Зарегистрирован: 14 мар 2008, 21:01
Это я читать умею. А в примере как написано?WildSery писал(а):Отличие в строкеКак научиться писать UDF для InterBase за 21 мин. писал(а):!!!Числовые переменные не рекомендуется возвращать by reference (по ссылке) или указывать для них FREE_IT. Возвращать числовые типы данных можно только by value (по значению).
Код: Выделить всё
function Add_B2(var iSmall: SmallInt; var iLong: Integer): PInteger; cdecl; export;
// ^^^ ^^^ ^^^^^^^^
// by reference by reference by reference
begin
iLong := iSmall + iLong;
Result := @iLong;
end;