[firebase-br] Criação de UDF (se ninguém souber, por Favor Cantu, me salva ...)

Geison C. Shida geison em uol.com.br
Qui Set 1 18:23:57 -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