Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.24;
Скачать: CL | DM;

Вниз

UDF   Найти похожие ветки 

 
MORA ©   (2003-11-06 08:27) [0]

Написал я UDF:
{
DECLARE EXTERNAL FUNCTION IBNow
DATE
RETURNS DATE
ENTRY_POINT "IBNow"
MODULE_NAME "funcBirthday.dll";

DECLARE EXTERNAL FUNCTION IBMonth
DATE
RETURNS SMALLINT BY VALUE
ENTRY_POINT "IBMonthOf"
MODULE_NAME "funcBirthday.dll";

DECLARE EXTERNAL FUNCTION IBDay
DATE
RETURNS SMALLINT BY VALUE
ENTRY_POINT "IBDayOf"
MODULE_NAME "funcBirthday.dll";
}
type
PIBDateTime = ^TIBDateTime;
TIBDateTime = record
Days, // Date: Days since 17 November 1858
MSec10 : Integer; // Time: Millisecond * 10 since midnigth
end;

const
MSecsPerDay10 = MSecsPerDay * 10;
IBDateDelta = 15018;

{$R *.res}

function IBtoDelphi(IBDateTime: TIBDateTime): TDateTime;
begin
with IBDateTime do
Result := Days - IBDateDelta + MSec10 / MSecsPerDay10;
end;

function IBDayOf(var IBDateTime: TIBDateTime): SmallInt; cdecl;
begin
Result := DayOf(IBtoDelphi(IBDateTime));
end;

function IBMonthOf(var IBDateTime: TIBDateTime): SmallInt; cdecl;
begin
Result := MonthOf(IBtoDelphi(IBDateTime));
end;

function IBNow(var ServerIBDateTime: TIBDateTime): PIBDateTime; cdecl;
var
DateTime: TDateTime;
DelphyDays : Integer;
begin
DateTime := Now;
DelphyDays := Trunc(DateTime);
with ServerIBDateTime do begin
Days := DelphyDays + IBDateDelta;
MSec10 := Trunc((DateTime - DelphyDays) * MSecsPerDay10);
end;
Result := @ServerIBDateTime;
end;


Вызываю для длинного запрса (около 1000 строк):
select FNAME, BIRTHDATE from schooler
where IBMonth(BIRTHDATE) = IBMonth(IBNow("1.1.1"))
/* IBNow("1.1.1") - параметр должен быть от фонаря, в нём возвращается значение Now */

Результат:
Кроме правильных значений выводятся NULL. Хотя при работе с идентичной ф-цией IBDay - всё отлично!

И еще одна проблема с этими примерами:
Делаю
select ibnow("1.1.1") from schooler
Результат:
первая часть запроса выводит правильную дату, а вторая - смещенную на несколько секунд, хотя сам запрос вполняется ~2 сек.


 
Johnmen ©   (2003-11-06 09:12) [1]

Зачем вообще все это писал ??? Все и так есть в IB.
NOW - текущая дата+время
TODAY - тек.дата
EXTRACT(DAY{или MONTH или YAER} FROM <MyValue>);



Страницы: 1 вся ветка

Текущий архив: 2003.11.24;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.026 c
4-79228
o2
2003-09-27 13:24
2003.11.24
Фокус окон и компонентов


1-79030
qwe
2003-11-13 17:21
2003.11.24
Invalid Pointer Operation


3-78792
DimChan
2003-11-05 13:25
2003.11.24
TTable


14-79124
Style
2003-10-28 16:13
2003.11.24
SM80, SM300


3-78839
Svin
2003-11-04 09:52
2003.11.24
Перехват исключительных ситуаций из MS SQL Server 2000