Главная страница
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.021 c
1-78951
lucky4me
2003-11-12 08:45
2003.11.24
из C++Builder в Delphi


3-78767
Кщд
2003-11-05 08:11
2003.11.24
Рассылка сообщений сообщений подключенным к БД пользователям


3-78752
lext
2003-11-03 15:31
2003.11.24
Здравствуйте уважаемые! У меня есть ряд вопросов. Очень просю.


1-78981
Алла
2003-11-14 14:42
2003.11.24
Будте добры, как с помощью GetDC


14-79154
Света
2003-10-31 07:35
2003.11.24
Фабрика