[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