WinXP SP3, FireBird 2.5 Version 5.2.1.26351, IBExpert 2012.04.18, Delphi 7.0 (Build 8.1)
Цель: Научиться писать собственные UDF функции. Например для начала написал две простые UDF функции для обработки даты.
Код: Выделить всё
function fDateOf (Value: double): double;
begin
Result := DateOf(Value);
end;
function fTimeOf(Value: double): double;
begin
Result := TimeOf(Value);
end;

Подключаю UDF в IBExpert
Код: Выделить всё
SET SQL dialect 3;
--/*
DROP external FUNCTION Date_Of;
DROP external FUNCTION Time_Of;
--*/
DECLARE external FUNCTION Date_Of
DOUBLE precision by DESCRIPTOR
returns DOUBLE precision by DESCRIPTOR
entry_point 'fDateOf' module_name 'date_time_udf';
DECLARE external FUNCTION Time_Of
DOUBLE precision by DESCRIPTOR
returns DOUBLE precision by DESCRIPTOR
entry_point 'fTimeOf' module_name 'date_time_udf';

Пробую запустить
Код: Выделить всё
select date_of((select current_date from rdb$database)) as "Дата"
,time_of((select current_time from rdb$database)) as "Время"
from rdb$database
rows 1

Тот же самый результат если
Код: Выделить всё
select date_of(0) as "Дата"
,time_of(0) as "Время"
from rdb$database
rows 1
- Delphi TDateTime = double
- FireBird
Код: Выделить всё
type
TIBDate = integer;
TIBTime = Cardinal;
TIBTimeStamp= packed record
Date: TIBDate;
Time: TIBTime;
end;
Если только в этом причина, то почему select date_of(0) as "Дата" возвращает null ?
В чем мои ошибки ? Буду рад прочитать замечания.
Статью http://www.ibase.ru/devinfo/udf_ok.htm читал, но что-то наверное не понял. Как говорится... если что, извините

Убедительно прошу "не мазать мордой лица по фейсу", типа: погугли, а слабо почитай доку и т.д.

Спасибо.
Николай.