Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.11.24;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.44 MB
Время: 0.009 c
14-79104
Yttrium
2003-11-03 01:01
2003.11.24
Lazarus, косяк при компоновке под Linux


14-79125
wnew
2003-11-01 17:08
2003.11.24
Resource Tuner


1-79039
Vitalik
2003-11-12 21:33
2003.11.24
Package?


3-78761
Aleksandr
2003-11-03 11:59
2003.11.24
Как бороться с открытой сессией Парадокса?


14-79143
ertong
2003-10-28 19:39
2003.11.24
Задача





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский