如果开始日期和结束日期跨越一个或多个月,则插入表格时日期格式会发生变化

Posted

技术标签:

【中文标题】如果开始日期和结束日期跨越一个或多个月,则插入表格时日期格式会发生变化【英文标题】:Date Format changes when inserting into table if start date and end date cross one or more months 【发布时间】:2014-02-11 22:26:21 【问题描述】:

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

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

例如 26/2/14 到 3/3/14 会产生下表条目:

26/02/14, 27/02/14, 28/02/14, 2014 年 3 月 1 日, 2014 年 3 月 2 日, 2014 年 3 月 3 日

这是我用来将日期放入表中的代码 sn-p(BookingID 是从表单中获取的。)

Dim BookingDate As Date

Dim SQLString As String

....

BookingDate = FromDate

Do
    SQLString = "INSERT INTO TblGuestBooking ([BookingDate], [BookingID])  VALUES (#" & BookingDate & "#" & "," & Me.GuestSuiteBookingID & ")"

    DoCmd.SetWarnings False
    DoCmd.RunSQL SQLString
    DoCmd.SetWarnings True
    BookingDate = BookingDate + 1
Loop Until BookingDate = ToDate + 1

如果您已经阅读到这里,感谢您抽出宝贵时间。如果你能帮助我,非常非常感谢。

【问题讨论】:

【参考方案1】:

在处理日期文字(由“哈希标记”# 括起来的文本值)时,无论在电脑。因此,如果您的计算机配置为将短日期显示为 dd-mm-yyyy,并且您创建了一个使用 #04-02-2014# 的 Access 查询,它将总是被解释为 4 月 2 日,而不是 2 月 4 日。

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

... VALUES (#" & BookingDate & "#" ...

你会使用类似的东西

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

【讨论】:

谢谢。我会试试看。我知道 SQ 日期格式是中午,并且在其他地方有一个功能来管理构建 sql 字符串时的差异。我的意思是转换并没有在某些日期发生,而是在其他日期发生。如果我要应用这个功能,它只会把错误换成正确,把正确换成错误。感谢您的回复 为 gobbledygook 道歉。在预测文本方面不太智能的智能手机上响应! 是的。有效。不知道为什么,但没有时间关心。强加一种格式似乎已经治愈了不稳定的行为,这就是我目前所需要的。非常感谢。【参考方案2】:

在我的例子中,我使用以下代码创建和更新 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) &"', .....

那么所有带有日期的排序和输出操作都很顺利。

【讨论】:

以上是关于如果开始日期和结束日期跨越一个或多个月,则插入表格时日期格式会发生变化的主要内容,如果未能解决你的问题,请参考以下文章

在包含多个开始和日期列表的表中查找日期,如果找到则返回默认值

Friendly Date Ranges

选择开始和结束日期跨越不同年份的每月小时数

为日期范围选择每个日期并插入

js-FCC算法Friendly Date Ranges

如果日期列介于开始日期和结束日期之间,则选择行 FMDB 请求