Форум: "Базы";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];
ВнизВозраст сотрудника Найти похожие ветки
← →
Oxer (2004-05-15 22:14) [0]Доброй ночи, надеюсь не спите.
Не могу никак вычислить скоко лет сотруднику
Делаю
Vozrast.Value:=DateToStr(Date)-DateToStr(SotrTableBirthDate.Value);
Пишет
[Error] DataModuleUnit.pas(294): Operator not applicable to this operand type
← →
RayRom © (2004-05-15 22:20) [1]Что ты хочеш, из строки строку отнять не использу преобразования, дата - дата и все, а из строки строку не отнимеш, в смысле как строковый параметр.
← →
Oxer (2004-05-15 22:41) [2]Да я и сам знаю, что какую хр... пишу, как сделать можешь посоветовать?
← →
sniknik © (2004-05-15 23:29) [3]select sotrname, (date()-SotrBirthDate) \ 364 as sotrold from sotrtable
правда возможна погрешность при больших сроках ;о)
← →
Anatoly Podgoretsky © (2004-05-16 00:01) [4]365.25
← →
Oxer (2004-05-16 00:05) [5]>select sotrname, (date()-SotrBirthDate) \ 364 as sotrold from >
>sotrtable
Это что ч/з SQL? -(
А значение "скоко лет" как занести в поле.
← →
Oxer (2004-05-16 00:09) [6]Please!!!
← →
sniknik © (2004-05-16 00:27) [7]а иначе зачем в базах?
то же самое переделано из
> Vozrast.Value:=DateToStr(Date)-DateToStr(SotrTableBirthDate.Value);
Vozrast.Value:= trunc(Date() - SotrTableBirthDate.Value) div 365;
Anatoly Podgoretsky © (16.05.04 00:01) [4]
ну зачем такая точность? ;о) тем более операция целочисленная все одно обрежется.
← →
Anatoly Podgoretsky © (2004-05-16 00:32) [8]Без 365,25 на сто лет будет ощибка почти в месяц, а так только в один день в зависимости от високосного столения.
← →
Oxer (2004-05-16 00:52) [9]Что то я совсем уже запутался!ю!Юв.
Есть поле "BirthDate"-типа Дата/Время и "Vozrast" - числовое в SotrTable, как мне туда занести сколько человеку лет, когда пишу
>Vozrast.Value:= trunc(Date() - SotrTableBirthDate.Value) div
>365,25,
то Delph ругается на неправильные параметры,
если можно напишите полный текст SQL-запроса
Спасибо.
← →
Oxer (2004-05-16 00:59) [10]Не засыпайте!!!
ОЧЧЕНЬ НАДО!!!
← →
sniknik © (2004-05-16 01:03) [11]ну да, но с точки зрения лет (остальное все одно откидывается), дополнительный год накопится только на 365-й (если правильно посчитал), если только возраст мумий считать... ;о)
Oxer
ну так если поставил дробь то целочисленные операции уже не пойдут.
> если можно напишите полный текст SQL-запроса
полный текст запроса уже был, настолько полный насколько возможно при отсутствующей структуре таблици.
← →
sniknik © (2004-05-16 01:05) [12]упс > только на 365-й * 4
← →
sniknik © (2004-05-16 01:07) [13]точнее 1 год на 1460 лет.
← →
SpartakVC (2004-05-16 01:50) [14]Попробую следующий вариант
var
Birth: TDate;
Vozr: DWORD;
begin
Birth := StrToDate(Edit1.Text);
Vozr := YearOf(Now) - YearOf(Birth);
Edit2.Text := IntToStr(Vozr); // возраст в годах
end;
В SQL вместо Now используй date
← →
Fedia (2004-05-16 01:58) [15]Тебе уже вроде все сказали. Возможно, даже ты уже все сделал.
Но на дворе воскресенье. У нас самый разгар дня. Работать особой охоты нет... Вот и написал. Может быть пригодится.
Скопируй себе эту функцию.
function FindBirthDate(BirthDate: TDateTime): Word;
begin
Result:=Trunc((Date-trunc(BirthDate)) / 365.25);
end;
А значение поле возрат вычисляй так:
Vozrast.Value:= FindBirthDate(SotrTableBirthDate.Value);
← →
Oxer (2004-05-16 12:05) [16]На этот момент, пока ничего не сделал, только сейсас приступаю.
Вам всем БОЛЬШОЕ СПАСИБО, надеюсь разберусь дальше сам.
← →
sniknik © (2004-05-16 12:27) [17]SpartakVC (16.05.04 01:50) [14]
так нельзя, получится если кто родился под новый год то через минуты/час ему будет уже год...
Fedia (16.05.04 01:58) [15]
если так то round вместо trunc, иначе если в периоде нет высокосных годов (до 3 лет), или их меньше чем 1/4 от обшего, то год наоборот потеряется (будет небольшое оставание в дроби и оно обрежется).
← →
Anatoly Podgoretsky © (2004-05-16 14:55) [18]sniknik © (16.05.04 01:07) [13]
Дело хуже, уже на червертый год, год наступит раньше, правда через несколько дней положение исправится, но ситуация будет повторять каждый год, на границе. Поэтому надо делить на 365,25 и далее или оставлять дробное число или брать челую чать, как число исполнивших лет, но не в коем случае не округление.
← →
Term © (2004-05-16 15:24) [19]вроде если не ошибаюсь в RxLib есть функция которая определяет промежуток между датами DateDiff или чтото такое точно не помню
← →
roottim (2004-05-17 10:38) [20]переписал свою с PL/sql на делфи - для д6 подойдет
uses DateUtils;
function Age(ADof: TDateTime): Integer;
var d: integer;
begin
d := 0;
Result := (YearOf(Date)*12 + MonthOf(Date)) - (YearOf(ADof)*12 + MonthOf(ADof));
if (Result mod 12 = 0) and (DayOf(ADof) < DayOf(Date)) then d := -1;
Result := (Result div 12) + d;
end;
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.036 c