我试图找到一个解决方案,这几天没有任何成功。真的很感谢任何帮助选择查询截断大于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.dll
(wiki)
请提出任何的可能性来解决问题,而无需安装数据库
尝试使用[schema.ini](https://msdn.microsoft.com/en-us/library/ms709353(VS.85).aspx)文件来明确定义列类型应该是。它看起来像Text驱动程序假定该列是长整型并截断超过有符号32位整数(〜2.1E9)的最大值的值。 –
数据文件的列数不固定。所以我现在看到的唯一选项是基于此列以降序对文件进行排序,然后加载。但我想知道是否有可能从vba – xGen