Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.06.06;
Скачать: CL | DM;

Вниз

Возраст сотрудника   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.045 c
14-1085123065
MVova
2004-05-21 11:04
2004.06.06
Отношение к использованию with.


4-1082111100
sapsi
2004-04-16 14:25
2004.06.06
Получение хэндлов окон Word и Exсel


1-1084998259
greenrul
2004-05-20 00:24
2004.06.06
Удаление history+cache в Internet Explorer


14-1085033396
Serrrg
2004-05-20 10:09
2004.06.06
Программирование микропроцессоров


14-1085234701
Kolyan
2004-05-22 18:05
2004.06.06
Мы все учились понемногу.................