2014-09-19 73 views
1

我有带有示例数据的格式如下列举了一系列的.csv文件随机中断小数:访问从txt文件插入时

ID,Lat,Long 
    1,-43.76120167,158.0299917 
    2,-43.76119833,158.03 
    3,-43.7612,158.0299983 
    4,-43.76120167,158.0299967 

值从文件到文件的变化,但他们总是相同的格式和相似的金额。你上面看到的就是它在.csv文件中的显示方式(当使用不在Excel中的texpad/notepad打开时 - 所以我们现在可以消除任何Excel问题)。

然而,当我运行下面的INSERT语句作为一个访问SQL查询:

INSERT INTO Table1 SELECT * FROM [Text;Database=C:\;Hdr=Yes].[ImportFile.csv]; 

这是我的Access数据库表中显示的内容:

ID,Lat,Long 
    1,-43,158 
    2,-43,158 
    3,-43,158 
    4,-43,158 

现在,我知道你'重新思考。我只是说我在Access中的表格设计是这样设置的,即ID是一个数字/长整数,并且我的纬度和长度字段都设置为4位小数位数的数字/双精度。我已经仔细检查了这一百万次,并且可以确认,因为并非所有输入文件都会共享此问题。

这是什么让我烦恼...小数点后的所有数字在哪里?我需要拥有它们。

更让我困惑的是,一些文件读取得很好,小数点保持在那里就好了......同样的表,相同的插入查询。每个文件都是从同一个源生成的,并且它的格式相同。

但是,如果我启动Access本身并从文本文件向导运行导入,则值结束就好了。访问自动使该字段与自动小数双(我也尝试使用自动小数在我所需的表,无济于事)。

任何人有任何想法是怎么回事?

谢谢!

+0

您正在使用哪种版本的Access?该查询适合我。是你的领域,还是你的默认数据类型是一个整数? – Arun 2014-09-19 01:06:58

+0

Hi Arun,Jet引擎根据前16(?)条记录分配了自己的数据类型。在这些有问题的随机文件的情况下,前16个记录是0而不是0.0。没有什么意义,因为它们本来应该是空的,但我认为这是我的代码在某处的另一个问题。谢谢! – nellywilson 2014-09-19 02:41:44

回答

1

这是众所周知的问题。

Jet数据库引擎确定数据源中的数据类型。其中一个解决方案是使用/创建Schema.ini文件。 另外,请记住,为了确定列的数据类型,只扫描前几行。

欲了解更多信息,请参阅here

+0

对不起凯南,我应该提到...我插入到的表已经创建,具有正确的数据类型(数字 - 双 - 小数点后4位)。 – nellywilson 2014-09-19 00:58:06

+0

这对Access中的表格没有问题,这是Jet引擎如何“理解”csv文件的问题。请阅读我的答案中的链接。 – 2014-09-19 01:01:20

+0

嗨凯南,谢谢你的帮助。你的文章让我走上了正确的道路。事实上,Jet Engine正在分配一种数据类型,而不管Access表中设置了什么。我认为在你的链接中提到的解决方案将工作,但对我来说,我只是在一个解决方案中对我的VB进行了硬编码(查找并用0.0替换空字段生成的0)。谢谢! – nellywilson 2014-09-19 02:40:01