Страница 1 из 1
UDF DATE Firebird 1.5 -> 2.1
Добавлено: 10 мар 2011, 13:17
alex12389
Есть функция в UDF
Код: Выделить всё
DECLARE EXTERNAL FUNCTION IB_LAST_DATE_IN_MONTH
INTEGER,
INTEGER
RETURNS DATE
ENTRY_POINT 'IB_LAST_DATE_IN_MONTH' MODULE_NAME 'UDF.DLL';
В firebird 1.5 работала в 2.1 ошибка:
expression evaluation not supported.
value exceeds the range for valid dates.
Как в 2.1 правильно вернуть дату из UDF
Re: UDF DATE Firebird 1.5 -> 2.1
Добавлено: 10 мар 2011, 15:11
hvlad
Возвращать правильные даты. Механизм возврата не менялся.
Re: UDF DATE Firebird 1.5 -> 2.1
Добавлено: 10 мар 2011, 15:45
alex12389
Проблема в том, что я немогу найти правильного примера как вернуть дату из UDF в firebird 1.5 работал такой вариант
Код: Выделить всё
PIBDateTime = ^TIBDateTime;
TIBDateTime = record
Date, Time: Integer;
end;
IBDateDelta = 15018
function IB_LAST_DATE_IN_MONTH(var Months, Year:integer):PIBDateTime; cdecl; export;
var
ResultDateTime: TIBDateTime;
DateTime: TDateTime;
begin
DateTime := EncodeDate(Year, Months, MonthDays[IsLeapYear(Year)][Months]);
ResultDateTime.Date := Trunc(DateTime) + IBDateDelta;
ResultDateTime.Time := 0;
Result:= @ResultDateTime;
end;
Re: UDF DATE Firebird 1.5 -> 2.1
Добавлено: 10 мар 2011, 16:10
hvlad
В сети есть миллион примеров, как правильно писать удф. В том числе и на этом сайте.
Данная удф - крива до безобразия ибо нельзя возвращать локальную переменную.
Re: UDF DATE Firebird 1.5 -> 2.1
Добавлено: 10 мар 2011, 16:32
alex12389
Спасибо разобрался.