[firebase-br] Erro com UDF de inserção

Sandro Souza escovadordebits em gmail.com
Qua Set 11 16:12:33 -03 2013


Bom dia/tarde/noite Jean.

Tenha muito cuidado com os nomes das procedures, funções e ou variáveis
exportadas a serem acessadas de uma DLL, pois a função (da API do Windows)
que encontra esses símbolos é caso-sensitiva.

Resumindo, na DLL que foi feita em Delphi, o nome da função é "qryExec"
(apenas o primeiro E é maiúsculo, e as outras letras são minúsculas), mas
na declaração da função externa no Firebird, você informou que o nome da
função é "QRYEXEC" (todas as letras maiúsculas), e devido a isso, o
Firebird informa que não encontrou qualquer símbolo (procedure, função ou
variável) chamado "QRYEXEC" dentro da DLL informada.

Troque "QRYEXEC" por "qryExec" (como está no fonte em Delphi) e tente
novamente.

Espero ter ajudado mais que atrapalhado. :D


2013/9/11 <jean em i7tecnologia.com>

> Bom dia,
>
> Estou precisando criar uma UDF que insira informações em um outro banco
> externo, porém quando tento utilizar a função na minha procedure tenho o
> seguinte erro:
>
> “Invalid token. invalid request BLR at offset 55. function QRYEXEC is not
> defined. module name or entrypoint could not be found.”
>
> Estou declarando a UDF da seguinte forma:
>
>    DECLARE EXTERNAL FUNCTION QRYEXEC
>    CSTRING(9999),
>    CSTRING(9999)
>    RETURNS INTEGER FREE_IT
>    ENTRY_POINT 'QRYEXEC' MODULE_NAME 'UDF_DLL.dll';
>
>
> E abaixo o código da DLL:
>
>
> uses
>  DBXFirebird,
>  Dialogs,
>  SysUtils,
>  SqlExpr,
>  Classes;
>
> {$R *.res}
>
> function qryExec (strQry, strCon:PChar):integer; cdecl; export;
> var
>  vSqlCon: TSQLConnection;
>  vQry: TSQLDataSet;
> begin
>  try
>    Result:=1;
>    vSqlCon:= TSQLConnection.Create(nil);
>    vSqlCon.ConnectionName := 'FBCONNECTION';
>    vSqlCon.DriverName := 'FIREBIRD';
>    vSqlCon.LibraryName := 'dbxfb.dll';
>    vSqlCon.VendorLib := 'fbclient.dll';
>    vSqlCon.GetDriverFunc := 'getSQLDriverINTERBASE';
>    vSqlCon.Params.Add('User_Name=**SYSDBA');
>    vSqlCon.Params.Add('Password=**password');
>    vSqlCon.Params.Add('Database='**+strCon);
>    vSqlCon.LoginPrompt := False;
>    try
>      vSqlCon.Open;
>      vQry:= TSQLDataSet.Create(nil);
>      vQry.SQLConnection:= vSqlCon;
>      vQry.CommandText:= strQry;
>      vQry.ExecSQL(True);
>    except
>      Result:= 0;
>    end;
>  finally
>    FreeAndNil(vQry);
>    FreeAndNil(vSqlCon);
>  end;
> end;
> exports qryExec;
>
> begin
> end.
>
>
> Só lembrando que a DLL funciona normalmente na aplicação que criei de
> teste.
>
> Desde já muito obrigado!
>
> Jean Wetter
>
> ______________________________**________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/**artigo.php?id=1107<http://www.firebase.com.br/fb/artigo.php?id=1107>
> Para consultar mensagens antigas: http://firebase.com.br/**pesquisa<http://firebase.com.br/pesquisa>



Mais detalhes sobre a lista de discussão lista