[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