Доступ по умолчанию формат даты SQL, независимо от локали, является mm/dd/yyyy. При использовании неправильного формата даты он 'услужливо' попытается преобразовать это в допустимую дату Вас.
Так, при использовании '30/09/2008' он распознает, что Вы используете dd/mm/yyyy и преобразовываете его соответственно. Однако значение как '10/01/2008' является допустимым значением mm/dd/yyyy для начала, таким образом, это не будет преобразовано и сохранено неправильно в случае, если Вы на самом деле имели в виду dd/mm/yyyy....
Решение состоит в том, чтобы всегда преобразовывать Ваши значения даты в строку mm/dd/yyyy до использования их в SQL-операторах Доступа. Необходимо быть немного осторожными здесь, поскольку использующий маски формата даты VBA может не работать полностью, как Вы ожидали бы на неамериканских локалях (например, 'услужливо' интерпретирующий "mm/dd/yyyy" как "локализованный короткий формат даты"), поэтому протестируйте тщательно использование Вашей конкретной версии Access/VBA.
Доступ требует, чтобы дата была однозначна. Обычно рекомендуется использовать yyyy/mm/dd, независимо от локали. Например:
strSQL="SELECT SomeDate FROM tblT WHERE SomeDate=#" & Format(DateVar, "yyyy/mm/dd") & "#"
Я очень успешно использовал функцию datevalue (). При получении дат из несвязанных элементов управления кажется достаточно умен, чтобы правильно интерпретировать формат «дд / мм / гггг». Таким образом, запрос Jet SQL, например
«Выбрать * из DateTable, где StartDate = datevalue (" & me! TxtStartDate & ");"
, кажется, работает каждый раз.