尽管区域设置正确,但 MS Access SQL "INSERT INTO" 语句生成的日期格式错误

MS Access SQL "INSERT INTO" statement produces date in wrong format despite correct regional setting

我电脑的区域日期设置是dd/mm/yyyy。我正在使用 MS Access。我想使用 SQL INSERT INTO 语句将记录插入数据库。当我尝试使用 #dd/mm/yyyy# 语法插入日期,并在 table 之后查看结果记录时,结果显示该记录以 mm/dd/yyyy 格式显示日期,但仅该月的前 10 天;如果从 11 日开始,记录将按预期显示 dd/mm/yyyy。

例如,如果在 SQL 代码中输入 #09/02/2022#,table 将显示日期为 02/09/2022 的记录。但是,如果我的 SQL 代码是 #11/02/2022#,那么记录中会显示正确的订单 11/02/2022。

请帮忙。

好的,这是怎么回事?

您不必关心、了解或考虑用户的区域格式设置。

那么,如果您在窗体上放置一些控件?只需确保控件设置为日期类型格式即可。大功告成。

但是一个大弥天大谎:

在任何情况下,您基于字符串的日期格式必须是美国格式。或者您可以使用 ISO 日期格式。

 dim MyDate   as Date

 MyDate = me.InvoiceDate

所以,现在我们有了一个内部格式日期变量。如何插入table?

dim strSQL  as string

strSQL = "INSERT INTO tblInvoice (InvoiceNum, InvoiceDate, InvoiceAmount " & _
         "VALUES (1234, " & quDate(MyDate) & ",50)"

所以,您总是将日期值格式化为美国格式。

您可以一遍又一遍地键入该格式命令,但速度太快会很累。

所以,我使用了一些辅助函数:

Public Function quDate(dt As Date) As String

   quDate = "#" & Format(dt, "mm\/dd\/yyyy") & "#"

End Function

Public Function quDateT(dt As Date) As String
  
     ' return formatted date  with time
     
     quDateT = "#" & Format(dt, "mm\/dd\/yyyy HH:NN:SS") & "#"    
     
  End Function

所以,您不必关心日期和区域格式,但是对于您在代码中构建的 in-line SQL 插入命令?是的,您必须将 mm/dd/yyyy.

转换为美国格式

因此,您可以以任何格式显示日期。对于表格,对于报告 - 不是问题。

但是,这里唯一的例外是您构建插入语句的代码。该日期字符串格式必须是#mm/dd/yyyy#.

或者,ISO:

 #yyyy-mm-dd#

因此,两种格式都可以,但这是您必须遵守的硬性规定。

因此,从表单上的文本框开始,如果没有数据绑定,那么您要确保将文本框设置为日期类型文本框 (fomrat date)。

然后在代码中:

dim strSQL as string

strSQL = "INSERT INTO tblFun (BirthDate) " & _
        "VALUES (#" & format(txtDate,"mm/dd/yyyy") & "#)"

currentdb.Execute strSQL

或者,如果您有辅助函数,那么:

strSQL = "INSERT INTO tblFun (BirthDate) " & _
        "VALUES (" & qudate(txtDate) & ")"