【发布时间】:2012-12-03 13:39:03
【问题描述】:
所以我使用 VBA 生成的查询将一堆记录从 Excel 电子表格插入到 Access 数据库中。
我的查询基本上是这样的:
accName = r.Offset(x, 0)
AccNum = r.Offset(x, 1)
sector = r.Offset(x, 2)
holding = r.Offset(x, 3)
holdingvalue = r.Offset(x, 4)
holdingdate = CDate(r.Offset(x, 5))
sSQL = "INSERT INTO Holdings (AccName, AccNum, Sector, Holding, HoldingValue, HoldingDate)" & _
" VALUES ('" & Replace(accName, "'", "''") & "', '" & AccNum & "', '" & sector & "', '" & Replace(holding, "'", "''") & "', '" & holdingvalue & "', #" & holdingdate & "#)"
生成的查询示例如下所示:
INSERT INTO Holdings (AccName, AccNum, Sector, Holding, HoldingValue, HoldingDate)
VALUES ('Account 123', '472700', '', 'IShares S&P 500', '54379.15', #03/12/2012#)
错误功能位是查询中的日期已从英国日期 (dd/mm/yyyy) 变为美国日期 (mm/dd/yyyy)。我还尝试将电子表格上的日期格式化为 ISO 日期(yyyy-mm-dd),但始终作为美国日期,即使我不使用 cdate。 知道这里发生了什么吗?
编辑:当我单步执行代码并将鼠标悬停在 holdingdate 变量上时,它显示“03/12/2012”并且查询与上面相同(即日期为 dd/mm/yyy 格式,尽管我将holdingdate定义为holdingdate = Format(r.Offset(x, 5), "yyyy-mm-dd")。单元格中的日期也是连续的(即显示为数字时的41246)。
当我在输入数据后查看访问数据库时,日期显示为 12/03/2012。我只是不明白....
【问题讨论】:
-
CDate(Format(r.Offset(x,5), "dd/mm/yyyy")怎么样可能也和你的 excel 设置有关。 -
您的系统日期/时间是否设置为英国?您可能已将 excel 日期格式设置为英国,但将系统格式保留为美国。
-
是的,我的 excel 和系统时间都设置为英国。不知道为什么要这样做。上面试了Bmo的方法无效
-
尝试 "dd mmm yyyy" 这应该返回 '01 Jan 2012',那么无论你的设置是什么。
-
即使
holdingdate = Format(CDate(r.Offset(x, 5).Value), "dd mmm yyyy")holdingdate 仍然返回为 03/12/2012。格式化函数似乎什么都不做
标签: sql excel vba date ms-access