【问题标题】:Import error for large negative numbers from CSV to Access using TransferText使用 TransferText 从 CSV 到 Access 的大负数导入错误
【发布时间】:2013-08-08 03:12:57
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: ms-access vba


    【解决方案1】:

    不要让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 正在将记录附加到此表 - 我仍然遇到类型转换失败。
    • 我在目标表中使用 Long 而不是 Double 进行了尝试,得到了相同的 i9mport 错误。
    • 好的 - 我试过了。第一,我想我之前的记录是错误的——看起来有问题的值是-2.3E9,而不是-2.1E7。第二,我无法在一行中隔离违规记录 - 当我在 Excel 或记事本中编辑文件(以将其保留为文本)时,错误记录可以正常导入。当我加载整个文件时,我仍然得到错误。它被隔离到大约 55 条记录的输入文件中 - 哪里是上传它供您查看的好地方?顺便说一句 - 感谢您为我花这么多时间。
    • dropbox.com/s/sh654ym9nxq1hwc/IC_Y1301_LD10279_F25210001.CSV -- 第 50 行是给我转换错误的记录
    • 在第 1 行添加了一个字段名称并将目标字段更改为 TEXT - 不走运。我想我将迈出一步,将其作为 Excel 工作簿打开,然后将其导入。我无法找到解决 TransferText 内部进行的任何 LongInteger 转换的方法。感谢您为我工作。
    猜你喜欢
    • 1970-01-01
    • 2013-09-05
    • 2013-12-18
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 1970-01-01
    • 2013-01-21
    • 1970-01-01
    相关资源
    最近更新 更多