Я что-то закодировал, используя оператор Date в Access VBA. Он работал нормально до начала этого месяца, но теперь я вижу, что дата автоматически изменила формат с dd/mm/yyyy
на mm/dd/yyyy
. Кто-нибудь еще сталкивался с такой же проблемой?
дд/мм автоматически изменились на мм/дд
Ответы (5)
Формат даты Access SQL по умолчанию, независимо от языкового стандарта, — мм/дд/гггг. Если вы используете недопустимый формат даты, он «услужливо» попытается преобразовать его в допустимую дату для вас.
Итак, если вы используете «30/09/2008», он распознает, что вы используете дд/мм/гггг, и преобразует его соответствующим образом. Однако значение типа «01.10.2008» является допустимым значением мм/дд/гггг для начала, поэтому оно не будет преобразовано и сохранено неправильно, если вы действительно имели в виду дд/мм/гггг....
Решение состоит в том, чтобы всегда преобразовывать значения даты в строку мм/дд/гггг, прежде чем использовать их в операторах Access SQL. Вы должны быть немного осторожны здесь, так как использование масок формата даты VBA может не работать полностью, как вы ожидаете, в локалях, отличных от США (например, «услужливая» интерпретация «мм/дд/гггг» как «локализованный краткий формат даты» ), поэтому тщательно проверьте его, используя вашу конкретную версию Access/VBA.
Для доступа требуется, чтобы дата была однозначной. Обычно рекомендуется использовать гггг/мм/дд, независимо от локали. Например:
strSQL="SELECT SomeDate FROM tblT WHERE SomeDate=#" & Format(DateVar, "yyyy/mm/dd") & "#"
Попробуйте этот код:
stLinkCriteria = "[ProjectDate] Between #" & Format(CDate(Me![txtDateFrom]), "mm/dd/yyyy") & "# And #" & Format(CDate(Me![txtDateTo]), "mm/dd/yyyy") & "#"
Меня устраивает.
Я очень успешно использовал функцию datevalue(). При получении дат из несвязанных элементов управления кажется достаточно умным, чтобы правильно интерпретировать формат «дд/мм/гггг». Таким образом, запрос Jet SQL, такой как
"Select * from DateTable where StartDate = datevalue(" & me!TxtStartDate & ");"
кажется, работает каждый раз.
Это работает:
sentenciaSQL = "UPDATE Numeraciones " & _
"SET Valor = " & Valor & ", " & _
"Fecha = #" & **Format(fecha,"mm/dd/yyyy HH:nn:ss") & "#, " &** _
"Id_Usuario = " & Id_Usuario & _
" WHERE Nombre = '" & Nombre & "'"