Запросы, планы, оптимизация запросов, ...
Модераторы: kdv, CyberMax
-
alex12389
- Сообщения: 3
- Зарегистрирован: 10 мар 2011, 13:08
Сообщение
alex12389 » 10 мар 2011, 13:17
Есть функция в 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
-
hvlad
- Разработчик Firebird
- Сообщения: 1244
- Зарегистрирован: 21 мар 2005, 10:48
Сообщение
hvlad » 10 мар 2011, 15:11
Возвращать правильные даты. Механизм возврата не менялся.
-
alex12389
- Сообщения: 3
- Зарегистрирован: 10 мар 2011, 13:08
Сообщение
alex12389 » 10 мар 2011, 15:45
Проблема в том, что я немогу найти правильного примера как вернуть дату из 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;
-
hvlad
- Разработчик Firebird
- Сообщения: 1244
- Зарегистрирован: 21 мар 2005, 10:48
Сообщение
hvlad » 10 мар 2011, 16:10
В сети есть миллион примеров, как правильно писать удф. В том числе и на этом сайте.
Данная удф - крива до безобразия ибо нельзя возвращать локальную переменную.