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

jean em i7tecnologia.com jean em i7tecnologia.com
Qua Set 11 16:35:50 -03 2013


Sandro primeiramente obrigado, mas sinto dizer que ainda não resolveu.

Alterei o nome da função da minha DLL em uppercase e mesmo assim manteve o erro.

From: Sandro Souza 
Sent: Wednesday, September 11, 2013 4:12 PM
To: FireBase ; jean em i7tecnologia.com 
Subject: Re: [firebase-br] Erro com UDF de inserção

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
  Para consultar mensagens antigas: http://firebase.com.br/pesquisa



Mais detalhes sobre a lista de discussão lista