2

我试图找到解决这个问题几天但没有任何成功。非常感谢任何帮助

我正在尝试将 csv 文件导入 Access 数据库,但数字列中的一些数据被截断。

我的机器上没有安装 MS Access(只有 Windows 预装了 jet 数据库引擎 ( msjet40.dll and msjetoledb40.dll))。但除了这个问题,其他一切都很好。我Provider=Microsoft.ACE.OLEDB.12.0在连接字符串中使用。

csv 文件在文件中包含数字列和非数字列。只要有问题的数字列的值小于周围的值,2140649050它就可以选择。

SELECT * into ds1 FROM [Text;FMT=Delimited;HDR=YES;DATABASE=" & LFPath & "].[" & LFName & "]

最初我假设在将数据加载到表时会发生数据截断。但是数据在选择本身时被截断。以下选择查询返回为 UPC 列截断的部分数据

SELECT HeadName,[upc code],len([upc code]) as maxlen  FROM [Text;FMT=Delimited;HDR=YES;DATABASE=" & LFPath & "].[" & LFName & "]

这是相同的输出

HeadName    upc code    maxlen
TOTAL U.S   2140649030  10
TOTAL U.S   2140649050  10
TOTAL U.S   2140649050  10
TOTAL U.S       
TOTAL U.S       
TOTAL U.S       
TOTAL U.S       
TOTAL U.S       

似乎它根据最初的几条记录设置了列的最大长度。我怎样才能阻止它这样做。

之所以选择 Access,是因为该工具无需额外设置即可在 Windows 中运行。

安装 MS Access 时数据不会被截断(使用 Access 2010 测试)。这是否意味着ACE.OLEDB.12与最新的 ACE egine ACECORE.dll( wiki )配合得更好

请提出解决问题的任何可能性,而无需安装其他版本的数据库的额外负担

4

2 回答 2

0

您可以尝试将单元格格式化为通用格式吗?那么可能是您的数据不会被截断。

于 2016-01-07T09:30:09.110 回答
0

据我所见和研究,我发现我们可以选择 2 个选项。两者都涉及一个额外的步骤。

第一个选项是按列的降序对 csv 文件进行排序。在我的情况下,只有一列被截断。所以我可以根据特定列按降序对列表进行排序,并且数据会被插入而不被截断。(找不到以编程方式对文件进行排序的自动化解决方案。因此我们需要手动对文件进行排序,然后加载到数据库中)

另一种选择是将 csv 文件转换为 excel 文件并使用它来加载数据。这是相同的SO帖子

于 2016-01-11T06:57:03.213 回答