【问题标题】:Access randomly drops decimals when inserting from txt file从 txt 文件插入时,Access 会随机丢弃小数
【发布时间】:2014-09-19 08:52:08
【问题描述】:

我有一些格式如下的 .csv 文件,其中列出了示例数据:

    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/记事本打开时 - 所以我们现在可以消除任何 Excel 问题)。

但是,当我将以下 INSERT 语句作为 Access 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 是数字/长整数,并且我的 Lat 和 Long 字段都设置为具有 4 个小数位的数字/双精度。我已经仔细检查了一百万次,并且可以确认,因为并非所有输入文件都有这个问题。

这就是困扰我的问题...我的小数点后的所有数字都到哪里去了?我需要它们。

更让我困惑的是,有些文件读取得很好,小数点也很好地保留在那里……同一张表,同样的插入查询。每个文件都是从相同的来源生成的,并且根据其价值采用相同的格式。

但是,如果我启动 Access 本身并运行从文本文件导入向导,这些值最终会很好。 Access 会自动使该字段成为带有自动小数的双精度数(我也尝试在所需的表中使用自动小数,但无济于事)。

有人知道发生了什么吗?

谢谢!

【问题讨论】:

  • 您使用的是哪个版本的 Access?该查询适合我。您的字段是整数还是默认数据类型?
  • 嗨,Arun,Jet 引擎根据前 16 个(?)记录左右分配它自己的数据类型。对于这些有问题的随机文件,前 16 条记录是 0 而不是 0.0。不太有意义,因为它们一开始就应该为空,但我认为我的代码在某处存在不同的问题。谢谢!

标签: sql csv


【解决方案1】:

这是众所周知的问题。

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

更多信息,请查看here

【讨论】:

  • 抱歉,Kenan,我应该提到...我要插入的表已经创建,具有正确的数据类型(数字 - 双精度 - 4 位小数)。
  • 不是Access中的表格问题,而是Jet引擎如何“理解” csv文件的问题。请阅读我的回答中的链接。
  • 嗨,凯南,感谢您的帮助。你的帖子让我走上了正确的道路。事实上,Jet Engine 正在分配一种数据类型,而不管 Access 表中设置了什么。我认为您的链接中提到的解决方案会起作用,但对我来说,我只是将解决方案硬编码到我的 VB 中(查找并用 0.0s 替换从空字段生成的 0s)。谢谢!
猜你喜欢
  • 2016-05-07
  • 1970-01-01
  • 1970-01-01
  • 2019-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-28
相关资源
最近更新 更多