我试图找到解决方案几天没有任何成功。非常感谢任何帮助
我正在尝试将csv文件导入Access数据库,但是数字列中的某些数据会被截断。
我的机器中没有安装MS Access(只预装了Windows数据库引擎(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 & "]
最初我假设在将数据加载到表时发生截断数据。但是在选择本身时数据会被截断。以下select查询返回为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
似乎它根据最初的几条记录设置了列的最大长度。我怎么能阻止它这样做呢。
选择访问权限是因为工具无需额外设置即可在Windows中运行。
安装MS Access时未截断数据(使用Access 2010测试)。这是否意味着ACE.OLEDB.12
更适合最新的ACE egine ACECORE.dll
(wiki)
请提出任何可能解决问题的方法,而无需额外加载安装其他版本的数据库
答案 0 :(得分:0)
你可以尝试将单元格格式化为一般吗?然后可能是你的数据不会被截断。
答案 1 :(得分:0)
据我所知和研究,我找到了两个选项,我们可以选择。两者都涉及额外的步骤。
第一个选项是按列的降序对csv文件进行排序。在我的情况下,只有一列被截断。所以我可以按降序排列基于特定列的列表,并且插入数据时不会截断。 (无法找到以编程方式对文件进行排序的自动化解决方案。因此我们需要手动对文件进行排序,然后加载到数据库中)
另一个选项是将csv文件转换为excel文件并使用相同的方法加载数据。以下是同一
的SO Post