Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.038 c
3-1084522145
evgen
2004-05-14 12:09
2004.06.06
Инстоляция.


14-1084545685
solo
2004-05-14 18:41
2004.06.06
Не читаемый хелп


1-1085463562
Фагот
2004-05-25 09:39
2004.06.06
D6+ MS Office XP


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


1-1085684092
hgd
2004-05-27 22:54
2004.06.06
Вопрос про сообщения





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский