1

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

它等于“February-10-12”

这就是我更新日期的方式

DoCmd.RunSQL "UPDATE Mills SET LastContactDate = #" & SalesCallDate & "# WHERE MillID = " & lstMills.Column(0, i)

所以SalesCallDate = "2/10/2012"美好的约会

那么为什么要切换日期和月份呢?

前端是ms-access-2010,后端是onSQL SERVER 2012

4

2 回答 2

1

您的SalesCallDate变量包含一个日期作为文本:

SalesCallDate = "2012 年 2 月 10 日"

显然您希望该字符串的日期格式为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
于 2012-10-02T16:37:19.390 回答
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
于 2012-10-02T17:22:24.193 回答