我如何在VBA的访问表中分配一个值给datetime字段?



我有一个带有DateTime字段的Access表。从我到目前为止所尝试的,您不能将VBA日期变量分配给访问表日期时间字段。

当我分配一个CDATE()函数的返回值时,Access表中的DateTime字段是一个空日期。

readingSet.AddNew                              

readingSet!jobinstrumentimportid = jobInstImportId
readingSet!ReadingDate = CDate("10/13/2021 4:05:05 PM")
readingSet!readingTime = lineArray(1)
readingSet!decibelreading = CDbl(lineArray(2))

readingSet.Update
  • 如果我检查Day(CDate("10/13/2021 4:05:05 PM")),我得到13。
  • 如果我检查Hour(CDate("10/13/2021 4:05:05 PM")),我得到16。
  • 当我检查Day(readingSet!ReadingDate)时,我得到0。
  • 当我检查Hour(readingSet!ReadingDate)时,我得到0。

如果我分配CStr(CDate("10/13/2021 4:05:05 PM")):

  • reading!ReadingDateis6/29/2021.

如果我分配DateValue(CDate("10/13/2021 4:05:05 PM")) + TimeSerial(16, 5, 5)给readingSet!ReadingDate:

  • reading!ReadingDate6/29/2021.

是否有一种方法来分配一个VBA日期字段访问表DateTime字段?

我会仔细检查,并在设计模式下打开该表,并仔细检查该列的数据类型。

Dim rst        As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("tblhotels")
rst.Edit
rst!MyDate = CDate("10/13/2021 4:05:05 PM")
Debug.Print rst!MyDate
Debug.Print Hour(rst!MyDate)
Debug.Print Day(rst!MyDate)

rst.Update

输出:

2021-10-13 4:05:05 PM 
16 
13 

所以你在这里错过了一些重要的细节,因为你看起来很好。

也许这是一个链接表到一些外部数据源?但话又说回来,这将是一个史诗般的壮观细节。

因此,我会在设计模式下检查表,并查看该列的数据类型为see/view/。

从您发布的代码来看,该格式和列看起来很好。

你当然可以认为这是一个测试,但这并不是必需的。

rst!MyDate = DateSerial(2021, 10, 13) + TimeSerial(16, 5, 5)
Debug.Print rst!MyDate
Debug.Print Hour(rst!MyDate)
Debug.Print Day(rst!MyDate)

所以,另一种可能是你电脑上的区域设置混乱了。

作为一般规则,您希望将表单上的控件设置为格式化为日期或日期时间。

然后,在大多数情况下,您可以将控件分配给reocrdset中的列。

但是,到目前为止,您需要检查表中该列的日期、时间和设置。

但是,作为一般规则,如果要为日期指定字符串,则遵循如下ISO格式:

rst!MyDate = CDate("2021-10-13 4:05:05 PM")

这将工作和"远比"不受区域设置的影响。

因为问题变成了13是日期,还是13是不能存在的月份(只允许1-12)?

相关内容

  • 没有找到相关文章

最新更新