SQL-запрос между датами в VBA

У меня проблема с созданием sql-запроса в VBA с использованием excel и базы данных доступа. В коде mi VBA у меня есть две переменные данных с этим содержимым:

ДатаМин = 07.01.2014 22:00:00

ДатаМакс = 08.01.2014 06:00:00

И у меня есть база данных доступа со многими данными с полем даты. Я пытаюсь извлечь из базы данных данные с датами между двумя моими переменными, и я кодирую это:

sql = "SELECT Date FROM Table WHERE Date BETWEEN #" & DateMin & "# AND #" & DateMax & "#

Но не работает. Результаты неверны, с датами, которые не находятся между двумя моими датами.

Однако, если я изменю предложение и закодирую это

sql = "SELECT Date FROM Table WHERE Date > #" & DateMin & "#

Оно работает! Дает данные с более высокими датами, чем DateMin, но у меня нет DateMax, чтобы остановить это. Я думаю, что проблема во второй части моего первого кода, потому что если я кодирую

sql = "SELECT Date FROM Table WHERE Date < #" & DateMax & "#

У меня нет данных! Почему не дает мне данные ниже, чем DateMax? Из-за этого я думаю, что предложение BETWEEN не работает.

Извините за мой английский, я пытаюсь объяснить лучше, я знаю. Спасибо.


person Monchou2    schedule 31.07.2014    source источник


Ответы (1)


Всегда следует использовать однозначный формат даты. Когда у вас есть дата в формате 00/00/0000, Access должен угадать, является ли это dd/mm/yyyy (британским) или mm/dd/yyyy (американским).

Ваш DateMin (31/07/2014 22:00:00) можно интерпретировать только как dd/mm/yyyy hh:nn:ss (31 — недопустимый месяц, поэтому это должен быть день), так что это формат, который будет использовать Access.

Однако ваш DateMax (01/08/2014 06:00:00) интерпретируется в американском формате — как 8th January 2014, а не 1st August 2014.

Самый простой способ обойти это — указать даты в формате ISO (yyyymmdd) или указать месяц в виде короткого слова (dd mmm yyyy hh:mm:ss — например, 01 Aug 2014 06:00:00).

person Kai    schedule 31.07.2014
comment
Спасибо за совет, я пытаюсь изменить поля даты и форматы переменных даты в excel и access, но пока не работает... :( - person Monchou2; 31.07.2014
comment
Извините, но я не могу это решить. В доступе в поле даты я изменил формат на дд / ммм / гггг чч: мм: сс, а в excel я кодирую дату, отформатированную в том же формате, и данные не отображаются :( - person Monchou2; 31.07.2014
comment
Вам нужно изменить формат даты в вашем запросе (sql = "SELECT Date FROM Table WHERE Date BETWEEN #" & DateMin & "# AND #" & DateMax & "#) - DateMin и DateMax должны быть отформатированы как dd/mmm/yyyy hh:mm:ss - person Kai; 31.07.2014