Главная страница
    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.036 c
3-1084809413
юрок
2004-05-17 19:56
2004.06.06
Привязка 2 картинок к дбгриду


3-1084473656
BBCHa
2004-05-13 22:40
2004.06.06
Interbase


1-1085669662
IceClimber
2004-05-27 18:54
2004.06.06
Help me!!! Не могу очистить TList (TList.Clear-но память прибавл)


1-1085667943
smirnoff
2004-05-27 18:25
2004.06.06
замена в строке шаблона на его значение


14-1084644122
Rouse_
2004-05-15 22:02
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский