Dlookup检索错误的日期

时间:2012-10-02 16:16:02

标签: ms-access ms-access-2010 sql-server-2012

我正在尝试在我的数据库中获取日期,但是当日期少于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

2 个答案:

答案 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