Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: два поля со временем по ним вычисляется третий
 
 автор: joka   (19.09.2007 в 22:32)   личное сообщение
 
 

имеется два поля со временем в форме, требуется чтобы при их заполнении в третьем поле просталялось время прошедшее с времени указанного в первом поле до времени указанном во втором.

попробовал назначить в третье поле выражение и там просто написал поле2-поле1. все великолепно работает если в полях 1 и 2 время одних суток, и соответственно время первого поля меньше времени второго поля. а если в первом поле например указано время 17:00 а во втором 3:00 других суток, то такая формула простая уже вычисляет время общее не правильно, как правильно решить задачу?

  Ответить  
 
 автор: joka   (20.09.2007 в 00:23)   личное сообщение
 
 

решил проблему так
на свойстве выход из фокуса поля со вторым временем выполняется код

Private Sub поле2_LostFocus()
Dim wt_start As Date
Dim wt_end As Date
Dim full As Date
Dim one As Date

wt_start = поле1
wt_end = поле2
If (wt_start > wt_end) Then
full = #11:59:00 PM#
one = #12:01:00 AM#
поле3 = full - wt_start + one + wt_end
Else
поле3 = wt_end - wt_start
End If

End Sub

  Ответить  
 
 автор: joka   (20.09.2007 в 00:24)   личное сообщение
 
 

коректно? или есть более правильные решения?

  Ответить  
 
 автор: ГлазастыйМышь   (20.09.2007 в 08:18)   личное сообщение
 
 

если в этих полях заполняется только время и разница между ними не больше суток, то
в поле3 в данных прописать

=[поле2]-[поле1]+iif([поле1]>[поле2];24;0)


ЗЫ. Это при условии что разница может быть более суток нужно будет вводить даты в полном формате

  Ответить  
 
 автор: Анатолий (Киев)   (20.09.2007 в 10:16)   личное сообщение
 
 


Function TimeDiff(DateStart As Variant, DateEnd As Variant) As String
Dim v As Variant, h As Integer, m As Integer, s As Integer
    v = DateEnd - DateStart
 If Not IsNumeric(v) Then Exit Function
    h = Int(v) * 24 + Hour(v)
    m = Minute(v)
    s = Second(v)
    TimeDiff = h & ":" & Format$(m, "00") & ":" & Format$(s, "00")
End Function

Эта функция возвращает строку в виде: Ч:ММ:СС, или пустую, если любой из аргументов - Null.
Например (в окне отладки):
?TimeDiff(date,now)
9:13:40
?TimeDiff(date-1,now)
33:13:51

Ее можно кинуть в общий модуль, и использовать в запросе.

  Ответить  
 
 автор: joka   (20.09.2007 в 11:51)   личное сообщение
 
 

всем спасибо попробую и ваши варианты

  Ответить  
 
 автор: joka   (20.09.2007 в 11:56)   личное сообщение
 
 

всем спасибо попробую и ваши варианты

  Ответить  
 
 автор: joka   (25.09.2007 в 00:45)   личное сообщение
 
 

Анатолий в вашем варианте функция возвращает строковую величину, а если результат необходимо поместить в ячейку формы с типом Date, то необходимо еще преобразование типов? как это корректнее сделать?

  Ответить  
 
 автор: Анатолий (Киев)   (25.09.2007 в 10:25)   личное сообщение
 
 

Ну, это как в одесском анекдоте про таксиста: Вам шашечки, или ехать?
Вы спросили, как показать время более 24 часов, я дал вам функцию, которую можно использовать как источник строк 3-го поля. Если вы хотите тип Date для этого поля, то это не нужно. Если вы хотите сохранить значение в поле таблицы (тип Date), то просто сохраните разность значений (ИМХО, это лишнее, т.к. его всегда можно вычислить).
Не существует формата времени, возвращающего время 24 часа и более.

  Ответить  
 
 автор: joka   (25.09.2007 в 10:33)   личное сообщение
 
 

я не корректно выразился! первая задача действительно была вычислтельная. вторая задача вычесленное значение поместить в поле формы (с кратким форматом времени, а не с Date конечно), а третья задача я собираю данные по полям и вставляю с помощью insert в таблицу (а в таблице столбец уже Date)... вот я и спрашиваю если использовать эту функцию дополнительные преобразования будут нужны? а про лишний столбец мне тоже кажется что он лишний... но таблица не моя:) ее вообще нормализовать не мешало бы, но владелец хочет такую таблицу!

  Ответить  
 
 автор: joka   (25.09.2007 в 09:06)   личное сообщение
 
 

ГлазатыйМышь если использовать ваш вариант и не внести время, то при добавлении записи в таблицу с пустыми полями времени, выдается ошибка о невозможности присвоении значению третьему полю

  Ответить  
 
 автор: joka   (25.09.2007 в 10:19)   личное сообщение
 
 

ГлазастыйМышь... спасибо. ваш вариант работает, ошибка была у меня!

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList