Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > Расчет стажа


Автор: Anton3000 16.7.2007, 05:46
Народ помогите посчитать стаж (год месяц дни)

Автор: kapbepucm 16.7.2007, 08:15
Разность между конечной и стартовой датой

Автор: Akina 16.7.2007, 10:24
DateDiff()

Автор: Anton3000 18.7.2007, 09:44
Я понимаю что разность между джатами, но он года только считает тогда , а нодо что бы еще и месяцы с днями считал

Автор: Akina 18.7.2007, 12:52
Код

Sub test()
Dim dt1 As Date
Dim dt2 As Date
Dim y As Integer
Dim m As Integer
Dim d As Integer
dt1 = CDate("1/1/2005")
dt2 = Now()
y = DateDiff("yyyy", dt1, dt2)
m = DateDiff("m", DateAdd("yyyy", y, dt1), dt2)
d = DateDiff("d", DateAdd("m", m, DateAdd("yyyy", y, dt1)), dt2)
MsgBox "Interval between " & CStr(dt1) & " and " & CStr(dt2) & "is:" & vbNewLine & _
       CStr(y) & " years, " & CStr(m) & " months, " & CStr(d) & " days."
End Sub

Автор: Anton3000 18.7.2007, 15:10
У меня в таблице есть поле стаж, как мне сделать чтоб в эти поля результаты работы функции заносились !?

Автор: kapbepucm 18.7.2007, 15:23
Сделай функцию в VBA, ну дальше через запрос. Если конкретно в таблицу, то, например, Recordset умеет. Через запрос приятнее ;)) и работы меньше.

Автор: Akina 18.7.2007, 17:06
Цитата(Anton3000 @  18.7.2007,  16:10 Найти цитируемый пост)
У меня в таблице есть поле стаж, как мне сделать чтоб в эти поля результаты работы функции заносились !? 

Если у тебя в таблице есть поле даты начала работы, а стаж считается по текущую дату, то тебе не нужно считать и заносить в таблицу рассчитанный стаж. Делай это "на лету".

Или обоснуй, почему надо. Только по-серьезному обоснуй, детский лепет про "надо, и все" или "а вот хочу" не принимается - для создания переопределенной структуры нужны ОЧЕНЬ веские причины.

Автор: Anton3000 18.7.2007, 20:08
Когда делаю запрос на выбор инфы по определеному человеку мне надо чтобы вместе с инфой и стаж был его !
а если через запрос вызывать функцию эту то он просто стаж всех выводит.Как кто к полю ее привизать или еще как...незнаю прям

Автор: Akina 18.7.2007, 22:18
Цитата(Anton3000 @  18.7.2007,  21:08 Найти цитируемый пост)
Когда делаю запрос на выбор инфы по определеному человеку мне надо чтобы вместе с инфой и стаж был его !
а если через запрос вызывать функцию эту то он просто стаж всех выводит.

то есть как это??? как это понимать - стаж ВСЕХ??? я это даже представить не могу...

Автор: kapbepucm 19.7.2007, 08:28
выбор инфы по определеному человеку и стаж его (кроме Васи Пупкина никого не покажет точно ;)) )
Код

SELECT PersonInformation.Person, Staz(PersonInformation.StartDate) as STAZ
FROM PersonInformation
WHERE ((PersonInformation.Person)="Vasya Pupkin");

единственно надо определить, что и как будет рисовать функция Staz. В каком виде тебе приятнее воспринимать стаж человека?

Автор: Anton3000 19.7.2007, 09:26
У меня есть форма котороя открывается по запросу (по фамилии сотрудника), там есть поле стаж , есть дата начала договора и конца договора и мне надо чтоб он вывел в поле стаж разницу договора, я акцесс вторую неделю в глаза вижу вот и проблемы такие возникают  (

Автор: kapbepucm 19.7.2007, 09:50
-Создай Public функцию Staz(FirstDate,LastDate) в модуле VBA
-В свойствах поля стаж в Control Source напиши: =Staz([имя_поля_начала_контракта],[имя_поля_конца_контракта])
А тебе в поле стаж надо выводить строку типа "он работал 10 лет 3 месяца и 1 день"?

Автор: Akina 19.7.2007, 16:19
Цитата(Anton3000 @  19.7.2007,  10:26 Найти цитируемый пост)
У меня есть форма котороя открывается по запросу (по фамилии сотрудника), 

Как при этом формируется источник данных формы?

Цитата(Anton3000 @  19.7.2007,  10:26 Найти цитируемый пост)
я акцесс вторую неделю в глаза вижу 

Это целиком и полностью твои трудности, и на собственно проблему не влияют. Учите матчасть - и да воздастся.

Автор: Anton3000 19.7.2007, 19:56
Цитата(kapbepucm @ 19.7.2007,  09:50)

А тебе в поле стаж надо выводить строку типа "он работал 10 лет 3 месяца и 1 день"?

Да мне как раз так и надо (10 лет 3 месяца и 1 день)

Автор: kapbepucm 20.7.2007, 08:37
Цитата(Anton3000 @  19.7.2007,  19:56 Найти цитируемый пост)
как раз так и надо 

Ну, так изменим (о да простит меня Akina) код Test
Код

Public Function Staz(FirstDate As Date, LastDate As Date) As String
  Dim y As Integer
  Dim m As Integer
  Dim d As Integer
  y = DateDiff("yyyy", FirstDate, LastDate)
  m = DateDiff("m", DateAdd("yyyy", y, FirstDate), LastDate)
  d = DateDiff("d", DateAdd("m", m, DateAdd("yyyy", y, FirstDate)), LastDate)
  Staz = CStr(y) & " год(лет) " & CStr(m) & " месяц(ев) и" & CStr(d) & " день(дней)"
End Function

кинь в модуль VBA ну и дальше..., как я уже писал.

Автор: Anton3000 20.7.2007, 11:08
Спасибо большое !

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)