Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 使用TransferText从CSV导入大负数访问时出错_Ms Access_Vba - Fatal编程技术网

Ms access 使用TransferText从CSV导入大负数访问时出错

Ms access 使用TransferText从CSV导入大负数访问时出错,ms-access,vba,Ms Access,Vba,我正在将数据从CSV文件导入Access表。这个数字有点像 -2100万(-2.1E7)。我正在使用TransferText进行导入 DoCmd.TransferText acImportDelim, , "matching report temp", Source_folder & "\" & Source 在“匹配报告温度”表中,该字段设置为双精度。导入生成类型转换失败。但是,当我在Excel中打开CSV文件并复制有问题的行时,我可以成功地使用“粘贴附加”将其手动添加到表中

我正在将数据从CSV文件导入Access表。这个数字有点像
-2100万(-2.1E7)。我正在使用TransferText进行导入

DoCmd.TransferText acImportDelim, , "matching report temp", Source_folder & "\" & Source
在“匹配报告温度”表中,该字段设置为双精度。导入生成类型转换失败。但是,当我在Excel中打开CSV文件并复制有问题的行时,我可以成功地使用“粘贴附加”将其手动添加到表中,这样数字就不会超过字段的容量

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


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

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

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

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

Reporting Unit,,$ Dollars,Offset Unit,,$ Dollars,Variance
这似乎是
DoCmd.TransferText
的一个复杂问题。因此,我从Access UI手动导入。这给了我第49行第3列和第6列的导入错误。在Access中,目标字段都创建为长整数。但是,CSV行中这些字段的值为2262169190和-2262169190。。。都超出了访问“长整数”的容量,-2147483648到2147483647

作为一种廉价的解决方法,我在导入时为这两列的数据类型选择了文本。这使得导入可以正常工作。一旦成功地将数据导入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

我就是这么做的—“Matching report temp”是一个具有适当字段定义的现有表,在本例中,是数字格式和双字段大小。TransferText正在将记录追加到此表中,但类型转换仍然失败。我在目标表中使用Long而不是Double进行了尝试,并得到了相同的i9mport错误。确定-我尝试了。首先,我想我之前的记录是错误的-看起来错误的值是-2.3E9,而不是-2.1E7。第二,我不能在一行中隔离出有问题的记录-当我在Excel或记事本中编辑文件(将其保留为文本)时,坏记录可以导入。当我加载整个文件时,仍然会出现错误。它被隔离到一个包含55条记录的输入文件中——哪里是上传它的好地方?顺便说一句,谢谢你为我花了这么多时间第50行是给出转换错误的记录,在第1行添加了字段名,并将目标字段更改为文本-不走运。我想我要把它作为excel工作簿打开,然后导入。我无法找到一种方法来解决TransferText内部的任何LongInteger转换。谢谢你帮我做这件事。