2013-03-06 114 views
7

当我附加Excel文件时,访问将截断几个备注字段中的数据。 Access表中的字段已被设置为备注类型。我相信问题在于,我在某些备注字段的前几行没有任何条目。 Access假定数据是文本字段,即使我已经将其设置为备忘录类型。从Excel导入访问备注字段时的截断数据

我试着以CSV格式追加。不工作。

我已经将第一行中的虚拟数据放在超过255个字符的限制,并且数据不会被截断如果我这样做。

我不想在每次需要导入Excel文件时都需要输入虚拟数据。这是一个至少每两周完成一次的过程,可能会更频繁。我想建立一个简单的方法来为将来的员工使用同一个数据库导入数据。有任何想法吗?

更新:即使在第几排的假数据,访问被截断3将数据从10个备注精密组件,当我导入Excel文件(虚拟数据的字符长度是785)。现在我真的对创意不知所措。

+0

我们在Access 2010的“外部数据”选项卡中使用“导入电子表格向导”。我不确定如何从向导中获取SQL代码。有没有和简单的方法来做到这一点。 – RBSt 2013-03-07 18:10:27

回答

9

它已经有一段时间了,但我和你有同样的问题。

多挖后,我发现wonderful world of microsoft explains

为了避免出错导入过程,确保每个源列 包含了每一个行中的相同类型的数据。 Access扫描第一个 八个源行,以确定 表中的字段的数据类型。我们强烈建议您确保前八个数据源行不混合任何列中不同数据类型的值。 否则,Access可能不会将正确的数据类型分配给 列。

显然,这意味着当附加 Excel文件到现有的表,甚至当列被格式化并保存为备注字段,如果在Excel文件中的第一行的所有8少于256个字符,Access假设你实际上意思是指定文本,因此在255个字符之后截断剩余的行。我已经执行了几个测试,在前8行内放置“虚拟”行,并且每个测试都触发超过255个字符的导入。

现在,如果您将导入到新表,该向导允许您选择所有格式选项。

如果您可以覆盖表中已有的所有数据,则导入到新表格很方便。但是,如果您真的需要追加,我会建议导入到临时表,然后从那里追加。一个简单的方法是保存一个导入,然后从VBA执行它,如Elliot_et_al wanted to do。您也可以在VBA中运行追加查询。如果您设置表正确你可以逃脱

INSERT INTO [MyTable] 
SELECT [MyTable_temp].* 
FROM [MyTable_temp]; 
2

对于它的价值....我遇到了类似的问题与Access 2013 - 它是从进口截断为255个字符的字段即使导入向导选择LONG TEXT作为字段,甚至当我在前几行中有> 255个字符的字段时也是如此。

一位同事建议我将电子表格链接到新表格中,但问题就消失了。我还创建了一个基于链接表的新表,并且都很好。

编辑补充:在Access 2013,如果你已经导入的XLS文件导入Access,不能再回到它首先尝试链接,试试这个来代替:

转到设计视图该表,转到该屏幕底部的字段属性,并将长文本“文本格式”设置为“富文本”。就在今天,我发现这使我不必重新创建一个我从Excel几个月前导入的表格,并发现即使我已将“注释”列设置为长文本,仍然会截断我手动创建的文本无论如何输入255个字符。切换到Rich Text使此文本可见。

0

我与Access 2010有同样的确切问题。在找出访问先查看25条记录以确定导入时每个列上的数据类型后,我找到了两种不同的解决方法。

  1. 按列的长度按降序排列导入记录。这意味着某些列中大于255个字符的记录将成为前25个记录中的记录。然后,Access能够在不截断的情况下导入这些记录。
  2. 创建链接表指定列数据类型作为备忘录,然后附加到表。
0

我以前用上面提供的Rich Text解决方案运行过以及使用“虚拟行”作为导入的第一条记录。谢谢你!但是,今天我认为我已经遇到了一个更有效/一致的解决方案,您可以多次重复这些解决方案。我在Access 2007中试过。

使用导入向导就好像你正在将数据导入新表一样。浏览所有设置您的规格的屏幕。最重要的是,在繁琐的字段选项/数据类型区域(对于我最近的文本文件,这是导入文本向导的第三个屏幕)检查或指定数据类型 - 确保在此处指定您的备注字段。 (别担心,你只需要做一次!)

当你到达最后的“这是向导需要的所有信息...”屏幕时,请查找“高级...”按钮在左下角。这会带来一个总结你刚刚做的所有事情的屏幕。在右侧寻找“另存为...”。用一个有用的名字保存这些规格。 (您可以直接点击下方的“规格...”来确认您保存了规格。)点击“确定”离开高级屏幕。

如果您实际上不需要创建新表,则现在可以取消该向导。接下来 - 这是您从现在起每次都可以执行的操作,以避免截断 - 使用“将记录的副本追加到表中......”转到常规导入向导中。在向导中,您应该看到相同的“高级...”按钮。打开它,点击“规格...”,然后双击保存的规格。说“确定”退出“高级”,然后完成向导。这应该告诉Access将您的备忘录字段保存为备忘录字段!

将CSV导入到现有表格时,我发现我需要在进入“高级”屏幕之前通过一些常规向导屏幕(例如,指定文本限定符)。不知道为什么这让它开心,只是FYI。

我希望这可以帮助别人谁像我这样的字段截断导入错误挣扎!

0

在很多情况下,你只需要改变备注字段的文本格式,从普通文本为RTF,现在如果你打开的表的数据可以看到所有导入的文本

1

我用Excel来与他们外部的合作伙伴和捕获报告交流进入访问数据库。我发现最好的办法是在工作表中插入一个“虚拟”第一行,在任何给定列中包含超过255个字符的用户填充数据可能超过255个字符。

通过这种方式,当我导入数据时,它总是导入所有文本,然后我可以简单地从数据库表中删除“虚拟”行。

我经常使用从导入数据库链接到的“导入模板”工作簿。在链接之前,我将模板页面设置为表格格式(以便导入包含所有数据,而不必每次都指定范围),并将第一个“虚拟”行隐藏在那里。

以这种方式,我可以简单地将数据复制并粘贴到导入模板中,然后运行数据库查询以将数据导入(并在必要时转换)到数据库中,第二个查询删除“dummy”事后记录。

希望这有助于..?

0

Excel和Access很古怪。显然,将Excel或CSV附加到具有长文本属性的现有Access表的末尾是个问题。追加数据将默认所有长文本为简短文本。解决方法是将数据输出到Excel,将数据附加到一个表中,然后在Access中将其作为新表导入。无论您做什么,访问都会将附加数据视为短文本而不是长文本。

确保在使用导入向导将列的属性更改为长文本时。

我希望这会有所帮助。