Форум: "Базы";
Текущий архив: 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.011 c