дд/мм автоматически изменились на мм/дд

Я что-то закодировал, используя оператор Date в Access VBA. Он работал нормально до начала этого месяца, но теперь я вижу, что дата автоматически изменила формат с dd/mm/yyyy на mm/dd/yyyy. Кто-нибудь еще сталкивался с такой же проблемой?


person Community    schedule 09.10.2008    source источник


Ответы (5)


Формат даты Access SQL по умолчанию, независимо от языкового стандарта, — мм/дд/гггг. Если вы используете недопустимый формат даты, он «услужливо» попытается преобразовать его в допустимую дату для вас.

Итак, если вы используете «30/09/2008», он распознает, что вы используете дд/мм/гггг, и преобразует его соответствующим образом. Однако значение типа «01.10.2008» является допустимым значением мм/дд/гггг для начала, поэтому оно не будет преобразовано и сохранено неправильно, если вы действительно имели в виду дд/мм/гггг....

Решение состоит в том, чтобы всегда преобразовывать значения даты в строку мм/дд/гггг, прежде чем использовать их в операторах Access SQL. Вы должны быть немного осторожны здесь, так как использование масок формата даты VBA может не работать полностью, как вы ожидаете, в локалях, отличных от США (например, «услужливая» интерпретация «мм/дд/гггг» как «локализованный краткий формат даты» ), поэтому тщательно проверьте его, используя вашу конкретную версию Access/VBA.

person mdb    schedule 09.10.2008
comment
Спасибо @mdb, вы правы. И я кодирую не в США. - person Varun Mahajan; 09.10.2008
comment
У Access нет версии SQL, но у Jet есть, поэтому вы имеете в виду формат даты Jet SQL по умолчанию.... - person David-W-Fenton; 12.10.2008
comment
Другим решением является использование однозначного формата даты, такого как гггг/мм/дд или дд-ммм-гггг. - person David-W-Fenton; 12.10.2008
comment
Я бы также выбрал формат год, месяц, день как самый безопасный. - person Fionnuala; 16.10.2008

Для доступа требуется, чтобы дата была однозначной. Обычно рекомендуется использовать гггг/мм/дд, независимо от локали. Например:

strSQL="SELECT SomeDate FROM tblT WHERE SomeDate=#" & Format(DateVar, "yyyy/mm/dd") & "#"
person Fionnuala    schedule 10.10.2008

Попробуйте этот код:

stLinkCriteria = "[ProjectDate] Between #" & Format(CDate(Me![txtDateFrom]), "mm/dd/yyyy") & "# And #" & Format(CDate(Me![txtDateTo]), "mm/dd/yyyy") & "#"

Меня устраивает.

person Community    schedule 24.02.2012

Я очень успешно использовал функцию datevalue(). При получении дат из несвязанных элементов управления кажется достаточно умным, чтобы правильно интерпретировать формат «дд/мм/гггг». Таким образом, запрос Jet SQL, такой как

"Select * from DateTable where StartDate = datevalue(" & me!TxtStartDate & ");"

кажется, работает каждый раз.

person Community    schedule 23.03.2010
comment
Это не будет так надежно, как DateSerial(Year(Me!TxtStartDate), Month(Me!TxtStartDate), Day(Me!TxtStartDate)). - person David-W-Fenton; 24.03.2010

Это работает:

sentenciaSQL = "UPDATE Numeraciones " & _
"SET Valor = " & Valor & ", " & _
"Fecha = #" & **Format(fecha,"mm/dd/yyyy HH:nn:ss") & "#, " &** _
"Id_Usuario = " & Id_Usuario & _
" WHERE Nombre = '" & Nombre & "'"
person Community    schedule 12.06.2015