Date 如果开始日期和结束日期跨越一个或多个月,则在插入到表中时,日期格式会更改

Date 如果开始日期和结束日期跨越一个或多个月,则在插入到表中时,日期格式会更改,date,ms-access,ms-access-2013,Date,Ms Access,Ms Access 2013,我有一个Access 2013表单,它有两个未绑定的日期字段,FromDate和ToDate。我将它们插入到一个表(TblGuestBooking)中,该表有一个自动编号键字段,因此后面的SQL语句中没有这个功能 如果FromDate和ToDate在同一个月,则输入的日期为dd/mm/yy,即表单字段的格式。但是,如果起始日期在一个月内,而截止日期在下一个月或下一个月,则后续月份的格式将更改为mm/dd/yy 例如,2014年2月26日至2014年3月3日的结果如下表所示: 2014年2月26日

我有一个Access 2013表单,它有两个未绑定的日期字段,FromDate和ToDate。我将它们插入到一个表(TblGuestBooking)中,该表有一个自动编号键字段,因此后面的SQL语句中没有这个功能

如果FromDate和ToDate在同一个月,则输入的日期为dd/mm/yy,即表单字段的格式。但是,如果起始日期在一个月内,而截止日期在下一个月或下一个月,则后续月份的格式将更改为mm/dd/yy

例如,2014年2月26日至2014年3月3日的结果如下表所示:

2014年2月26日,
2014年2月27日,
2014年2月28日,
2014年1月3日,
2014年2月3日,
2014年3月3日

这是我用来将日期放入表中的代码片段(BookingID从表单中获得)


如果你已经读到这里,谢谢你的时间。如果您能帮助我,非常感谢。

在处理日期文字(用“哈希标记”括起来的文本值)时,Access SQL将始终将不明确的
xx-yy-zzzz
日期解释为
mm-dd-yyyy
,而不管计算机上的区域设置如何。因此,如果您的机器配置为将短日期显示为
dd-mm-yyyy
,并且您创建了一个使用
#04-02-2014#
的访问查询,则它将始终解释为4月2日,而不是2月4日

解决方案是始终将日期文字格式化为明确的
yyyy-mm-dd
值。在你的情况下,而不是

... VALUES (#" & BookingDate & "#" ...
你会使用类似于

... VALUES (#" & Format(BookingDate, "yyyy-mm-dd") & "#" ...

在处理日期文本(用“哈希标记”括起来的文本值)时,Access SQL将始终将不明确的日期解释为
xx-yy-zzzz
,而不管计算机上的区域设置如何。因此,如果您的机器配置为将短日期显示为
dd-mm-yyyy
,并且您创建了一个使用
#04-02-2014#
的访问查询,则它将始终解释为4月2日,而不是2月4日

解决方案是始终将日期文字格式化为明确的
yyyy-mm-dd
值。在你的情况下,而不是

... VALUES (#" & BookingDate & "#" ...
你会使用类似于

... VALUES (#" & Format(BookingDate, "yyyy-mm-dd") & "#" ...

在我的例子中,我使用以下代码创建和更新Access数据库中的日期字段的ASP页面

strDay = Request("Day")
strMonth = Request("Month")
strYear = Request("Year")

InputDate =  strYear & "-" & strMonth & "-" & strDay
if IsDate(InputDate) Then
    InsertDate = CDate(InputDate)
else
'if date typed wrong, use Todays Date
    InsertDate = Date()
end if

SQLUPD = "UPDATE MyDataBase SET DateField = '"& FormatDateTime(InsertDate, vbShortDate) &"'"
SQLINS = "INSERT INTO MyDataBase (DateField, Alist, Atype, Acomment) VALUES ('"& FormatDateTime(InsertDate, vbShortDate) &"', .....

然后所有的排序和输出操作都进行得很顺利。

在我的例子中,我使用了下面的代码来创建和更新Access数据库中的日期字段

strDay = Request("Day")
strMonth = Request("Month")
strYear = Request("Year")

InputDate =  strYear & "-" & strMonth & "-" & strDay
if IsDate(InputDate) Then
    InsertDate = CDate(InputDate)
else
'if date typed wrong, use Todays Date
    InsertDate = Date()
end if

SQLUPD = "UPDATE MyDataBase SET DateField = '"& FormatDateTime(InsertDate, vbShortDate) &"'"
SQLINS = "INSERT INTO MyDataBase (DateField, Alist, Atype, Acomment) VALUES ('"& FormatDateTime(InsertDate, vbShortDate) &"', .....

然后所有的排序和输出操作都进行得很顺利。

谢谢。我会试试看。我知道SQ-Date格式是midday,在其他地方有一个函数来管理构建sql字符串时的差异。让我感到惊讶的是,转换并不是发生在某些日期,而是发生在其他日期。如果我应用这个函数,它只会把错误换成正确,把正确换成错误。谢谢你对gobbledygook的回复。在智能手机上响应,这在预测文本方面并不太聪明!是的。成功了。不知道为什么,但是没有时间去关心。强加一种格式似乎已经治愈了这种不稳定的行为,这就是我现在所需要的。非常感谢,谢谢。我会试试看。我知道SQ-Date格式是midday,在其他地方有一个函数来管理构建sql字符串时的差异。让我感到惊讶的是,转换并不是发生在某些日期,而是发生在其他日期。如果我应用这个函数,它只会把错误换成正确,把正确换成错误。谢谢你对gobbledygook的回复。在智能手机上响应,这在预测文本方面并不太聪明!是的。成功了。不知道为什么,但是没有时间去关心。强加一种格式似乎已经治愈了这种不稳定的行为,这就是我现在所需要的。非常感谢。