1

我正在将 CSV 文件中的数据导入 Access 表中。该数字类似于
-21000000 (-2.1E7)。我正在使用 TransferText 进行导入。

DoCmd.TransferText acImportDelim, , "matching report temp", Source_folder & "\" & Source

在“匹配报表临时”表中,该字段设置为 Double。导入会产生类型转换失败。但是,当我在 Excel 中打开 CSV 文件并复制有问题的行时,我可以成功地使用 Paste Append 手动将其添加到表中 - 所以数字不会超过字段的容量。

据我所知,这只发生在大的负数上。较小的数字和相同大小的正数似乎可以很好地导入。我知道我可以在 TransferText 中指定导入规范,但我看不到将字段类型设置为 Double 的方法。

我怎样才能解决这个问题?我不想手动追踪导入错误并手动附加它们。

4

1 回答 1

2

不要让TransferText为您创建 Access 表。首先创建访问目标表并分配您需要的字段类型。

运行TransferText时,CSV 数据将附加到该现有表中。只要您为 Access 字段选择兼容的数据类型,它就应该可以正常工作。

我检查了您的 CSV 文件。标题行很麻烦,因为缺少一些字段名称:

Reporting Unit,,$ Dollars,Offset Unit,,$ Dollars,Variance

这似乎是一个并发症DoCmd.TransferText。所以我从 Access UI 手动导入。这给了我第 49 行第 3 列和第 6 列的导入错误。在 Access 中,目标字段均创建为长整数。但是,CSV 行中这些字段的值是 2262169190 和 -2262169190 ... 都超出了 Access 的长整数的容量,从 -2,147,483,648 到 2,147,483,647。

作为一种廉价的解决方法,我在导入时为这 2 列的数据类型选择了文本。这允许导入工作没有错误。成功将数据导入 Access 后,您可以在需要使用这些(字符串)值时将它们转换为数字类型。

当我选择 Double 作为这 2 列的类型时,它也有效。听起来这就是你真正想要的。

如果您想使用 导入DoCmd.TransferText,我认为您需要创建一个导入规范。如果可能,我还会先修改 CSV 文件的标题行,以便所有字段都有名称。

我实际上在不更改 CSV 文件的情况下测试了这种方法。在 Access UI 中创建导入规范后(请参见下面的屏幕截图),此TransferText操作在 Access 2007 中有效,没有导入错误。

DoCmd.TransferText acImportDelim, _
    "IC_Y1301_Specification", _
    "IC_Y1301_LD10279_F25210001", _
    "C:\Users\hans\Downloads\IC_Y1301_LD10279_F25210001.CSV", _
    True

TransferText 导入规范

于 2013-08-07T16:06:37.247 回答