|
|
|
| Делаю запрос на выборку по полю форматаДата/время (краткий формат времени, маска ввода 00:00;0;_) в поле "условие отбора" ввожу вот это: Is Not Null And Between [Введите минимальное значение] And [Введите максимальное значение], но работает не так как нужно:
В таблице имеются значения 0:18, 0:20, 0:21,0:25, 0:26, если ввести и интервал 0:00-0:20, то выбирается только значение 0:18, если ввести 0:00-0:21, тогда выбираются значения 0:18 и 0:20 а если ввести интервал 0:00-0:26, то выбираются все значения
Подскажите, как сделать правильно | |
|
| |
|
|
|
| как вариант проверь на секунды - может они хвостом висят.
Second(проле) - может не 0
Добавлено
создал такое же поле но программно внес #4:15:59 PM#
в поле показывает 16:15 а Second (поле) = 59 и при написании такого условия 16:15 - данная запись не попадала - так что смотри секунды, или убирай их | |
|
| |
|
|
|
| Проверил, все секунды по нолям...
Дело в том, что это поле (поле Время на вызов) вычисляемое:
Автор Snipe
Private Sub Время_возвращения_AfterUpdate()
Dim zDate As Date
Dim mDate As Date
zDate = "23:59:00"
mDate = "00:01:00"
If Me![Время возвращения] < Me![Время принятия] Then
Me![Время на вызов] = (zDate - Me![Время принятия]) + Me![Время возвращения] + mDate
Else
Me![Время на вызов] = Me![Время возвращения] - Me![Время принятия]
End If
End Sub | |
|
| |
|
|
|
| попробуй замени Between на конструкцию <= And <= а еще проверь что оно пишет если вывести запрос с условием Where поле=#" & #0:18# & "#" что оно выдаст???
и еще для проверки в функцию добавь в конце,
Me![Время на вызов] =TimeSerial(Hour(Me![Время на вызов]), Minute(Me![Время на вызов]),0)
т.к. не факт что Me![Время возвращения] - Me![Время принятия] - дает время без секунд.
вариен еще в запрос попробуй поставить в условие не поле а TimeSerial(......) от поля | |
|
| |
|
|
|
| На сколько я помню время принятия вызова у вас ставится по умолчанию (т.е. в момент ввода инфы) отрабатывает функция) так что отсюда могут и появиться секунды | |
|
| |
|
|
|
| А можно подробнее объяснить как это проверить и если что отключить | |
|
| |
|
|
|
| в процедуре отрубать секунды - TimeSerial(час, минута, 0)
либо еще при вводе значений --- Me![Время возвращения] , Me![Время принятия] отрубать им секунды опять же можно использовать TimeSerial()
если ввести интервал 0:00-0:26, то выбираются все значения
|
т.е. получается запрос работает правильно только для значения 0:26 (он выбирает значение 0:26) - а для остальных (с меньшим интервалом) не работает - он же не человек, значит загводзка в значениях а не в запросе.
как проверить - дебагом чо получаем тут
If Me![Время возвращения] < Me![Время принятия] Then
Me![Время на вызов] = (zDate - Me![Время принятия]) + Me![Время возвращения] + mDate
Else
Me![Время на вызов] = Me![Время возвращения] - Me![Время принятия]
End If
|
как правило показывает полное значение 0:26:00 или добавить строки типа
T1=Second(Me![Время принятия])
T2=Second(Me![Время возвращения]) и вывести их значения на экран
скопируй оба столбца (принятие - возвращение) в пустую базу и покажи - посмотрим | |
|
| |
|
43 Кб. |
|
| Вот пример прицепил, дело действительно в секундах... В принципе работает если задать интервал вот так: 0:00:00-0:20:59, но теперь интересно стало на примере посмотреть, как сделать так 0:00-0:20 | |
|
| |
|
46 Кб. |
|
| видите ли - Between работает по принципу >=минимум and <=максимум
а вам надо >минимум-00:00:01 and <максимум+0:01
вывод - сделать отдельную форму в которой вводить интервал и в запросе опираться на эту форму | |
|
| |
|
|
|
| вот это работает!!!!
SELECT *
FROM Заболевания
WHERE (((TimeSerial(Hour([Время на вызов]),Minute([Время на вызов]),Second([Время на вызов])))=#12/30/1899 0:20:0#));
|
а это нет!!!!
SELECT *
FROM Заболевания
WHERE ((([Время на вызов])=#12/30/1899 0:20:0#));
|
дату сам конструктор вписал.
т.е. нужно использовать TimeSerial - везде!!!
вот рабочий вариант только добавь в первом условии Between преобразование TimeSerial
SELECT *
FROM Заболевания
WHERE (((TimeSerial(Hour([Время на вызов]),Minute([Время на вызов]),Second([Время на вызов]))) Is Not Null And (TimeSerial(Hour([Время на вызов]),Minute([Время на вызов]),Second([Время на вызов]))) Between [Минимальное значение] And TimeSerial(Hour([Максимальное значение]),Minute([Максимальное значение]),0)));
|
мое мнение - у Акса таже жопа с временем как и плав точкой типа 0,175 а у него 0,174999999 и результат иногда не сходится т.е. при сравнивании времени нужно пользоваться какми либо функциями у которых выходной результат - однозначно в формате времени | |
|
| |
|
|
|
| Всем большое спасибо, буду пробовать | |
|
| |