使用TransferText将大负数从CSV导入Access

时间:2013-08-07 15:57:57

标签: ms-access access-vba

我正在将CSV文件中的数据导入Access表。这个数字就像是 -21000000(-2.1E7)。我正在使用TransferText进行导入。

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

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

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

如何解决这个问题?我不想手动追踪导入错误并手动追加它们。

1 个答案:

答案 0 :(得分:2)

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

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

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

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

这似乎是DoCmd.TransferText的一个复杂因素。所以我从Access UI手动导入。这给了我第49行第3列和第6列的导入错误。在Access中,目标字段都创建为Long Integer。但是,CSV行中这些字段的值为2262169190和-2262169190 ......均超出Access'Long Integer,-2,147,483,648至2,147,483,647的容量。

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

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

如果您希望导入使用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 Import Specification