2016-01-07 42 views
2

我试图找到一个解决方案,这几天没有任何成功。真的很感谢任何帮助选择查询截断大于10位的数字数据

我想导入一个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 & "] 

最初我假定在向表中加载数据时发生数据截断。但是数据在选择时会被截断。下面选择查询返回截断的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.dllwiki

请提出任何的可能性来解决问题,而无需安装数据库

+0

尝试使用[schema.ini](https://msdn.microsoft.com/en-us/library/ms709353(VS.85).aspx)文件来明确定义列类型应该是。它看起来像Text驱动程序假定该列是长整型并截断超过有符号32位整数(〜2.1E9)的最大值的值。 –

+0

数据文件的列数不固定。所以我现在看到的唯一选项是基于此列以降序对文件进行排序,然后加载。但我想知道是否有可能从vba – xGen

回答

0

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

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

的另一种选择是转换CSV文件导入到Excel文件,并使用相同加载数据。相同的SO Post

0

的其他版本,你可以尝试设置单元格一般的额外负载更好?那么可能是你的数据不会被截断。

+0

排序实际的csv文件本身该文件将有不同的列数,这限制了修复文件中的问题 – xGen