我有一个带有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!ReadingDate
is6/29/2021
.
如果我分配DateValue(CDate("10/13/2021 4:05:05 PM")) + TimeSerial(16, 5, 5)
给readingSet!ReadingDate:
reading!ReadingDate
是6/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)?