尽管区域设置正确,但 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) & ")"
我电脑的区域日期设置是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) & ")"