Главная страница
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.031 c
1-79027
Torus
2003-11-12 20:10
2003.11.24
как прочитать


1-78886
Sewer
2003-11-13 11:49
2003.11.24
Запуск программы из другого приложения


3-78794
ruslan_as
2003-11-05 13:48
2003.11.24
Как сменить в уже созданной базе InterBase пароль


3-78816
licherep
2003-11-04 19:02
2003.11.24
как можно обойти не переименовывая поле?!


3-78763
Serg_KG
2003-11-02 18:42
2003.11.24
Поиск в базе