我正在尝试在我的数据库中获取日期,但是当日期少于12时,将切换月份和日期
示例:在数据库2012 - 02 - 10(2012年10月2日)中,我这样做时得到的值:
lastDateMill = Nz(DLookup("LastContactDate", "Mills", "MillID = " & lstMills.Column(0, i)), 0)
是
lastDateMill = "10/02/2012"
所以我认为那只是格式化的东西,但是当我做的时候
Format(lastDateMill, "Long Date")
等于“2月10-12”
这就是我更新日期的方式
DoCmd.RunSQL "UPDATE Mills SET LastContactDate = #" & SalesCallDate & "# WHERE MillID = " & lstMills.Column(0, i)
SalesCallDate = "2/10/2012"
所以好日期
那么为什么要切换日期和月份?
前端为ms-access-2010
,后端位于SQL SERVER 2012
答案 0 :(得分:1)
您的SalesCallDate
变量包含日期为文字:
SalesCallDate =“2/10/2012”
显然,您希望该字符串的日期格式为m/d/yyyy
,但它会被解释为d/m/yyyy
格式。
以yyyy/mm/dd
格式存储字符串值,以消除因语言环境问题引起的混淆...... 2012/02/10
由于SalesCallDate
实际上是一个包含日期值的文本框,因此请更改UPDATE
方法以避免因语言环境而导致的日期问题。
Dim strUpdate As String
Dim db As DAO.Database
strUpdate = "UPDATE Mills SET LastContactDate = " & _
Format(Me.SalesCallDate, "\#yyyy-m-d\#") & vbCrLf & _
"WHERE MillID = " & Me.lstMills.Column(0, i)
Debug.Print strUpdate
Set db = CurrentDb
db.Execute strUpdate, dbFailonerror
Set db = Nothing
答案 1 :(得分:1)
通过明确指定格式
来试试这个DoCmd.RunSQL "UPDATE Mills SET LastContactDate = #" & _
Format$(SalesCallDate,"yyyy/mm/dd") & "# WHERE MillID = " & _
lstMills.Column(0, i)
<强>更新强>:
也许有更好的方法可以做到这一点,这与任何格式都无关。我们的想法是将日期从一个表转移到另一个表,而不需要任何组合,列表或文本。因此,避免了从日期类型到字符串再转换回日期字段的任何转换。
如果表可以连接(假设MillID是列表框的绑定字段):
DoCmd.RunSQL "UPDATE Mills " & _
"INNER JOIN sourceTable ON Mills.MillID = sourceTable.MillID " & _
"SET LastContactDate = sourceTable.SalesCallDate " & _
"WHERE Mills.MillID = " & lstMills
否则
DoCmd.RunSQL "UPDATE Mills SET LastContactDate = " & _
"(SELECT SalesCallDate FROM sourceTable WHERE ID = " & sourceID & ")" _
"WHERE Mills.MillID = " & lstMills