У меня есть база данных MySQL с интерфейсом Microsoft Access (2016). У меня есть несколько связанных таблиц в базе данных Access, которые содержат столбцы DateTime.
Я уже давно успешно использую эту БД как на своем домашнем ПК, так и на ноутбуке, но недавно мне пришлось заменить свой ноутбук, поэтому я только что установил (хорошо скопировал) новый ноутбук. В этом новом экземпляре ни один из моих фильтров даты не работает. При расследовании я заметил очень странное поведение: если я открою одну из связанных таблиц, щелкну любое значение в одном из столбцов даты и выберу параметр для фильтрации только по этому значению, ничего не отображается. Если я напишу запрос для фильтрации, например
WHERE [Date]=#01/01/2017#
ничего не возвращается. Если я перепишу это на
WHERE CDate([Date])=#01/01/2017#
он возвращает правильные записи (кстати, я выбрал эту дату, чтобы продемонстрировать, что это не проблема формата даты в Великобритании/США).
Столбец правильно отображается как столбец DateTime в связанной таблице во внешнем интерфейсе, и если я пишу запрос для отображения значений года, месяца и дня указанного столбца, он возвращает правильные значения.
Я использую Windows 10 Home, полностью обновленную, с Access 2016 MSO 16.0.7571.7063 и MySQL Connector/ODBC 5.3.6 на обеих машинах. Я не могу найти никаких других настроек в Access, которые различаются между двумя машинами, и, насколько я могу судить, мои региональные и языковые настройки также кажутся одинаковыми на обоих.
Я попытался преобразовать столбец MySQL в Date вместо DateTime, но это не имело никакого значения. Я также обновил, затем удалил и пересвязал таблицы версии на новом ноутбуке, и даже восстановил установку Office, но все равно без радости.
Кстати, если я скопирую связанную таблицу в локальную таблицу, она будет работать нормально.
Я понятия не имею, что может быть причиной этого. Поскольку все остальное кажется одинаковым, возможно ли, что какой-то параметр реестра на моем новом ноутбуке отличается от других моих компьютеров?
РЕДАКТИРОВАТЬ: я только что попробовал следующее предложение на ноутбуке
WHERE [Date]>=#01/01/2017# And [Date]<=#31/12/2016#
и он возвращает все записи!
ДОПОЛНИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ: я также попытался выполнить следующий запрос
Select count([date]) from daysworked where [date]>=#dd/mm/yyyy#
в некоторых VBA для диапазона дат. Всякий раз, когда dd находится между 1 и 20 (включительно), он возвращает 1753 (все строки). Всякий раз, когда дд равно 21 или больше, он возвращает ноль независимо от значений мм и гггг. Мне кажется, что это может интерпретировать dd как значение века. Поскольку даты MySQL представлены в формате гггг-мм-дд, я полагаю, что это может иметь какой-то смысл, но я ожидаю, что коннектор ODBC будет иметь дело с преобразованием из формата Access в формат MySQL. И это явно работает на всех других машинах, на которых я это запускал.