0
Answered

Файл fb2lib.so

zhuravel 2 years ago • updated by Andrej Repin 2 years ago 10

Добрый день. Вычитал на форуме, что при ошибке-

invalid request BLR at offset 139
function UPPERCASE is not defined
No message for error code 335544932 found.

не хватает на сервере Firebird файла fb2lib.so .

Не могли бы Вы выложить данный файл?

Сервер установлен на Nas4Free ( FreeBSD), firebird25-server: 2.5.6_1.

Answer

Answer
Answered

Хоть исходник и не мой, но я думаю большого вреда не будет.


Файл fb2lib.pas, для компиляции использовался FreePascal 2.6.2


library fb2lib;
{$mode delphi}
{$H+}
uses
  SysUtils,
  Classes;
function UpperCase(InString:PChar):PChar;cdecl;export;
begin
  Result:=PChar(AnsiUpperCase(string(InString)));
end;
exports UpperCase;
begin
end.

Досталось в наследство от FbLibrarian, в настоящее время, если не нужна поддержка старой программы, лучше не использовать. Проще удалить из схемы БД использование этой функции.

Система 64 битная. Или могли бы Вы выложить исходник от fb2lib.so?

Answer
Answered

Хоть исходник и не мой, но я думаю большого вреда не будет.


Файл fb2lib.pas, для компиляции использовался FreePascal 2.6.2


library fb2lib;
{$mode delphi}
{$H+}
uses
  SysUtils,
  Classes;
function UpperCase(InString:PChar):PChar;cdecl;export;
begin
  Result:=PChar(AnsiUpperCase(string(InString)));
end;
exports UpperCase;
begin
end.

Досталось в наследство от FbLibrarian, в настоящее время, если не нужна поддержка старой программы, лучше не использовать. Проще удалить из схемы БД использование этой функции.

Доброе утро. Подскажите, как это удалить из схемы БД?

Подключиться к БД при помощи isql, и выполнить следующий скрипт:


SET TERM ^ ;
EXECUTE BLOCK AS BEGIN
if (exists(select 1 from RDB$PROCEDURES where rdb$Procedure_name = 'INSERT_TRANSL')) then execute statement 'drop procedure INSERT_TRANSL;';
if (exists(select 1 from RDB$PROCEDURES where rdb$Procedure_name = 'INSERT_SEQUENCE')) then execute statement 'drop procedure INSERT_SEQUENCE;';
if (exists(select 1 from RDB$PROCEDURES where rdb$Procedure_name = 'INSERT_DOCAUTHOR')) then execute statement 'drop procedure INSERT_DOCAUTHOR;';
if (exists(select 1 from RDB$PROCEDURES where rdb$Procedure_name = 'INSERT_AUTHOR')) then execute statement 'drop procedure INSERT_AUTHOR;';
DROP EXTERNAL FUNCTION "UPPERCASE";
END^

Что-то ругается на скрипт:

Invalid token.

Dynamic SQL Error. SQL error code = -104.

Token unknown - line 1, column 5.

TERM.


Ну значит выполнить поочередно следующие команды:


drop procedure INSERT_TRANSL;
drop procedure INSERT_SEQUENCE;
drop procedure INSERT_DOCAUTHOR;
drop procedure INSERT_AUTHOR;
DROP EXTERNAL FUNCTION "UPPERCASE";

Важно, чтобы последняя команда выполнилась без ошибок, остальные ошибки можно игнорировать.

После выполнения команд:


Dynamic SQL Error
SQL error code = -804
Function unknown
UPPERCAS


Замена функции UPPERCASE без внешних зависимостей:

CREATE PROCEDURE UPPERCASE (str VARCHAR(255)) 
 RETURNS (Result VARCHAR(255)) 
AS 
BEGIN 
    Result = Upper(:str);
END 

Выше указанная ошибка при добавлении в базу книг.

Хорошо, будем думать.