[fpc-pascal] Firebird UDF
Stephano
patspiper at yahoo.com
Thu Mar 13 20:08:47 CET 2008
Codebue Fabio - P-Soft wrote:
> nothing todo...
> ok restart:
> library pudf;
>
> {$mode objfpc}{$H+}
>
> uses
> Classes,
> p_func in 'p_func.pas';
>
> exports
> pround name 'p_round';
>
> {$R pudf.res}
>
> begin
>
> // DECLARE EXTERNAL FUNCTION pround
> // DOUBLE PRECISION, INTEGER
> // RETURNS DOUBLE PRECISION BY VALUE
> // ENTRY_POINT 'pudf_pround' MODULE_NAME 'pudf';
>
> end.
>
> and
>
> unit p_func;
>
> {$mode objfpc}{$H+}
>
> interface
> function p_round(var valore: double; ndec: integer): double; cdecl;
>
> implementation
>
> uses
> Classes, SysUtils;
>
> function p_round(var valore: double; ndec: integer): double; cdecl;
> var
> i: integer;
> risultato: double;
> ndivisore: integer;
> begin
>
> risultato:= valore;
> ndivisore:= 1;
> for i:= 1 to ndec do
> begin
> risultato:= risultato*10;
> ndivisore:= ndivisore*10;
> end;
>
> result:= round(risultato)/ndivisore;
> end;
> end.
>
> someone can compile and install?
>
> I can... but when I try to execute
>
> select round(123.1233, 2) as nrounded from rdb$database
>
> always some error!!!
You are exporting now the function as p_round. So I guess your entry
point should be pudf_p_round.
Furthermore, your sql includes round and not pround!
What is the error message you got?
More information about the fpc-pascal
mailing list