|
|
|
| имеется два поля со временем в форме, требуется чтобы при их заполнении в третьем поле просталялось время прошедшее с времени указанного в первом поле до времени указанном во втором.
попробовал назначить в третье поле выражение и там просто написал поле2-поле1. все великолепно работает если в полях 1 и 2 время одних суток, и соответственно время первого поля меньше времени второго поля. а если в первом поле например указано время 17:00 а во втором 3:00 других суток, то такая формула простая уже вычисляет время общее не правильно, как правильно решить задачу? | |
|
| |
|
|
|
| решил проблему так
на свойстве выход из фокуса поля со вторым временем выполняется код
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 | |
|
| |
|
|
|
| коректно? или есть более правильные решения? | |
|
| |
|
|
|
| если в этих полях заполняется только время и разница между ними не больше суток, то
в поле3 в данных прописать
=[поле2]-[поле1]+iif([поле1]>[поле2];24;0)
|
ЗЫ. Это при условии что разница может быть более суток нужно будет вводить даты в полном формате | |
|
| |
|
|
|
|
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
Ее можно кинуть в общий модуль, и использовать в запросе. | |
|
| |
|
|
|
| всем спасибо попробую и ваши варианты | |
|
| |
|
|
|
| всем спасибо попробую и ваши варианты | |
|
| |
|
|
|
| Анатолий в вашем варианте функция возвращает строковую величину, а если результат необходимо поместить в ячейку формы с типом Date, то необходимо еще преобразование типов? как это корректнее сделать? | |
|
| |
|
|
|
| Ну, это как в одесском анекдоте про таксиста: Вам шашечки, или ехать?
Вы спросили, как показать время более 24 часов, я дал вам функцию, которую можно использовать как источник строк 3-го поля. Если вы хотите тип Date для этого поля, то это не нужно. Если вы хотите сохранить значение в поле таблицы (тип Date), то просто сохраните разность значений (ИМХО, это лишнее, т.к. его всегда можно вычислить).
Не существует формата времени, возвращающего время 24 часа и более. | |
|
| |
|
|
|
| я не корректно выразился! первая задача действительно была вычислтельная. вторая задача вычесленное значение поместить в поле формы (с кратким форматом времени, а не с Date конечно), а третья задача я собираю данные по полям и вставляю с помощью insert в таблицу (а в таблице столбец уже Date)... вот я и спрашиваю если использовать эту функцию дополнительные преобразования будут нужны? а про лишний столбец мне тоже кажется что он лишний... но таблица не моя:) ее вообще нормализовать не мешало бы, но владелец хочет такую таблицу! | |
|
| |
|
|
|
| ГлазатыйМышь если использовать ваш вариант и не внести время, то при добавлении записи в таблицу с пустыми полями времени, выдается ошибка о невозможности присвоении значению третьему полю | |
|
| |
|
|
|
| ГлазастыйМышь... спасибо. ваш вариант работает, ошибка была у меня! | |
|
| |