0

因此,我使用 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)。当我在输入数据后查看 access 数据库时,日期显示为 12/03/2012。我只是不明白... .

4

1 回答 1

0

解决了!我以前将holddate 调暗为日期,所以无论我给它什么格式,它只是返回一个excel 日期。将其更改为Dim holdingdate as string已解决问题,并且日期现在作为字符串传递,Access 可以愉快地吃掉担心美国/英国日期的问题。

于 2012-12-03T16:34:18.380 回答