Имя: Пароль:
1C
 
Вопрос по работе запроса к Access
,
0 Alochka
 
13.11.14
12:57
В 1с7.7 пишу запрос к базе *.mdb. Все работает, за исключением одной странности. Запрос задается в интервале дат. Концовка запроса выглядит так:
WHERE (((CHECKINOUT.CHECKTIME) Between #12/11/2014 00:00:00# And #12/11/2014 23:59:59#));

Данные есть за 11, 12, 13 ноября. Так вот, если ставить только 12 число, то запрос пустой. Если ставить только 11 или только 13, запрос данные выдает, если с 10-12, то тоже выдает, а вот только за 12 число пусто и все.
1 Wobland
 
13.11.14
13:07
давай свой вопрос
2 Alochka
 
13.11.14
13:12
Почему за 12 число пусто? Причем только в том случае, когда запрос делается только за 12 число.
3 Wobland
 
13.11.14
13:13
ничего не попишешь, таковы данные
4 Alochka
 
13.11.14
13:14
ну так с 10 - 12 выдает массу данных за 12 число
5 Alochka
 
13.11.14
13:15
ха! с 12-13 тоже пустой
6 Wobland
 
13.11.14
13:20
> массу данных за 12 число
это сейчас про поле CHECKINOUT.CHECKTIME?
7 Alochka
 
13.11.14
13:21
да
8 Wobland
 
13.11.14
13:22
ну говори запрос
9 Alochka
 
13.11.14
13:23
Вот весь запрос:
SELECT USERINFO.Badgenumber AS ACNO, CHECKINOUT.CHECKTIME AS ONLYDATE, Format(CHECKINOUT.CHECKTIME,'hh:nn:ss') AS ONLYTIME, CHECKINOUT.CHECKTYPE
FROM USERINFO INNER JOIN CHECKINOUT ON USERINFO.USERID = CHECKINOUT.USERID
WHERE (((CHECKINOUT.CHECKTIME) Between #12/11/2014 00:00:00# And #12/11/2014 23:59:59#));
10 Wobland
 
13.11.14
13:24
>INNER JOIN
вот тут тоже фильтр
11 Alochka
 
13.11.14
13:27
я пробовала так:
SELECT USERINFO.Badgenumber AS ACNO, CHECKINOUT.CHECKTIME AS ONLYDATE, Format(CHECKINOUT.CHECKTIME,'hh:nn:ss') AS ONLYTIME, CHECKINOUT.CHECKTYPE
FROM USERINFO, CHECKINOUT WHERE (USERINFO.USERID = CHECKINOUT.USERID) AND (((CHECKINOUT.CHECKTIME) Between #13/11/2014 00:00:00# And #13/11/2014 23:59:59#));

Результат тот же.
12 hhhh
 
13.11.14
13:39
(11) может сначала месяц надо? Типа 11/12/2014 ??
13 hhhh
 
13.11.14
13:39
хотя тогда на 13 должно было ругаться.
14 Alochka
 
13.11.14
13:40
(13) Тогда бы оно не работало вообще, месяца 13 нет, а оно с 13 числом отлично работает
15 Alochka
 
13.11.14
13:41
от between тоже пробовала уходить, то же самое
это что-то именно в датах, в их формате, может, какой-то глюк аксеса
16 hhhh
 
13.11.14
13:45
а если без времени?
17 Alochka
 
13.11.14
13:50
(16) выдает все что есть за все даты
18 spectre1978
 
13.11.14
13:51
(0) литералы даты в джет пишутся по-американски, т.е.
#mm/dd/yyyy#
19 Alochka
 
13.11.14
14:00
(18) так и написано, только мне еще время нужно
20 Alochka
 
13.11.14
14:04
(18) кажется вы правы, сейчас еще проверю
21 Alochka
 
13.11.14
14:09
spectre1978, Вы меня спасли. Спасибо огромное!!!
Но почему-то в таблицах и в результатах запроса я вижу формат: #dd/mm/yyyy# это и сбило, скорее всего где-то настройка, а в sql запросе оно хочет именно #mm/dd/yyyy#
22 Alochka
 
13.11.14
14:11
И еще странно почему работает так:
Between #13/11/2014 00:00:00# And #13/11/2014 23:59:59#));
Такой себе списочек за 13 ноября
23 Alochka
 
13.11.14
14:16
WHERE (((CHECKINOUT.CHECKTIME) Between #11/13/2014 00:00:00# And #11/13/2014 23:59:59#));
И так списочек за 13 ноября :)
24 Alochka
 
13.11.14
14:17
я так понимаю, подождем 14 и 15 и все встанет на свои места :)
25 spectre1978
 
13.11.14
15:10
(22) в таблицах у вас отображается дата в соответствии с региональными настройками вашей винды. А литералы даты в JetSQL записываются не в соответствии с региональными настройками, а так, как в JetSQL полагается. Полагается - сначала месяц.
26 spectre1978
 
13.11.14
15:11
(22) Данный литерал записан с ошибкой, 13 месяца не бывает. Как в этом случае отрабатывает движок Jet, я не знаю.
27 Alochka
 
13.11.14
21:51
(25) Спасибо!
28 Jaap Vduul
 
14.11.14
00:20
(26)>> Данный литерал записан с ошибкой
Не совсем верно. Корректным литералом считается запись не только в us-формате, но также и в любых форматах, допустимых для текущих региональных настроек, главное "решётками"(#) огородить.
А вот в запросах действительно надо обязательно использовать us-формат, во избежание разночтений. В документации access это явно указано:
http://office.microsoft.com/en-us/access-help/where-clause-HP001032287.aspx
Соответственно и Jet сначала пытается интерпретировать литералы даты по американскому формату, а когда они в этот формат не укладываются, то используются региональные настройки.