[firebase-br] UDF(se ninguém souber,por Favor Cantu,me salva ...)
Geison C. Shida
geison em uol.com.br
Ter Set 13 03:30:29 -03 2005
Prezados senhores,
no site www.firebase.com.br eu encontrei um material falando sobre a criação de UDF'S com DLL. Explicava como criar a DLL pelo Delphi e como instalar a mesma no Banco.
A criação da DLL e a utilização da mesma no Delphi funciona perfeitamente, ou seja, testei usar a função declarando ela em um fonte meu do delphi e a função fez o calculo corretamente (essa função faz um cálculo de juro).
Porém quando instalo essa função no Banco, beleza instala legal, mas quando utilizo sempre retorna com o valor zero.
Exemplo:
select valor_titulo, f_calcula_juro(valor_titulo(100),percentual_juro(4),dias_atraso(30)) from titulo
obs.: os valores entre parenteses é só para ilustrar o conteúdo de cada uma das informações.
esse select deveria retornar os seguintes dados:
100, 104 - ou seja o valor original e o valor orignal acrescido de 4% de juro.
realmente gostaria que alguém me informasse o que pode estar errado com a minha função. Vou descrever ela abaixo para se houver algum "guru" que consiga criar uma DLL dessa função e essa função (UDF) funcione no banco ficarei eternamente grato.
unit xxx;
interface
uses math;
function calcula_juro(valor_original,percentual_juro: Double; numero_dias: integer): Double; cdecl; export;
implementation
function calcula_juro(valor_original,percentual_juro: Double; numero_dias: integer): Double;
var valor_futuro, taxa: Double;
dias_juro, i, dias_calculados, dias_mes: integer;
begin
dias_mes:=30;
percentual_juro:=percentual_juro/100;
taxa:=1+percentual_juro * frac(abs(numero_dias)/dias_mes);
taxa:=taxa / power(1 + percentual_juro,(abs(numero_dias) div dias_mes) * -1);
if numero_dias >= 0 then
valor_futuro:=valor_original * taxa
else valor_futuro:=valor_original / taxa;
Result:=valor_futuro
end;
Grato desde já,
Geison C. Shida
Mais detalhes sobre a lista de discussão lista