Как передать в UDF дату ?

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
vsimashko
Сообщения: 20
Зарегистрирован: 03 мар 2010, 10:33

Как передать в UDF дату ?

Сообщение vsimashko » 16 авг 2011, 00:11

Подскажите, как передать в UDF дату ? UDF написана на Делфи, пробовал такие варианты вызова:
function CsUkrDate2 ( var INDate : tDateTime; var InGenetive : Integer ) : PAnsiChar; cdecl; export;
function CsUkrDate2 ( var INDate : Double; var InGenetive : Integer ) : PAnsiChar; cdecl; export;
( в Делфи tDateTime == Double )
В базе функцию создавал так:
( DECLARE EXTERNAL FUNCTION CSUKRDATE2
DOUBLE PRECISION, INTEGER
RETURNS CSTRING(17) FREE_IT
ENTRY_POINT 'CsUkrDate2' MODULE_NAME 'SIMUDF' }
При вызове функции ошибка "conversion error from string "1-JAN-2000". Вызывать пробовал так:
csukrdate2( dbegin ,1)
csukrdate2(cast(dbegin as double precision),1)
csukrdate2(cast(dbegin as timestamp ),1)
Первый параметр при создании функции пробовал не DOUBLE PRECISION, а TIMESTAMP - аналогично

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Как передать в UDF дату ?

Сообщение kdv » 16 авг 2011, 13:09

что "аналогично"?
про передачу даты в udf написано тут
http://www.ibase.ru/devinfo/udf_ok.htm
нужно также учитывать, что это писалось для 1 диалекта, где DATE это в 3 диалекте уже TIMESTAMP, но те же 8 байт.

p.s. не выдумывайте самостоятельно всякую ерунду. читайте статьи и смотрите библиотеки функций с исходниками как примеры.

vsimashko
Сообщения: 20
Зарегистрирован: 03 мар 2010, 10:33

Re: Как передать в UDF дату ?

Сообщение vsimashko » 24 авг 2011, 13:58

Всё заработало, спасибо за ссылку, и за совет.

Ответить