10

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

我尝试附加为 CSV。不工作。

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

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

更新:即使前几行中有虚拟数据,当我导入 Excel 文件时,Access 也会截断 10 个备忘录字段中的 3 个的数据(虚拟数据的字符长度为 785)。现在我真的无所适从。

4

8 回答 8

10

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

经过一番挖掘,我发现微软的奇妙世界是这样解释的

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

显然,这意味着当将 excel 文件附加到现有表时,即使列被格式化并保存为备注字段,如果 excel 文件中的所有 8 行都小于 256 个字符,Access 假定您实际上是要指定文本,从而在 255 个字符后截断剩余的行。我已经执行了几个测试,将“虚拟”行放在前 8 行中,每个测试都触发了超过 255 个字符的导入。

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

如果您可以覆盖表中已有的所有数据,那么导入新表会很方便。但是,如果您确实需要追加,我建议您导入临时表,然后从那里追加。一个简单的方法是保存导入,然后从 VBA 执行它,就像Elliot_et_al 想做的那样。然后,您也可以在 VBA 中运行附加查询。如果你正确设置你的桌子,你可能会逃脱

INSERT INTO [MyTable]
SELECT [MyTable_temp].*
FROM [MyTable_temp];
于 2013-12-30T19:10:51.123 回答
3

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

一位同事建议我链接电子表格而不是导入新表,问题就消失了。我还根据链接的表创建了一个新表,一切都很好。

编辑添加:在 Access 2013 中,如果您已经将 XLS 文件导入 Access 并且无法返回到它尝试首先链接,请尝试以下操作:

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

于 2015-01-11T16:02:14.803 回答
1

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

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

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

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

希望这可以帮助..?

于 2017-11-01T16:46:01.170 回答
1

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

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

我希望这有帮助。

于 2017-12-19T12:29:00.560 回答
1

我在 MS Access 2013 中遇到了同样的问题。当我导入一个列文本大于 255 个字符的 Excel 表时,它被截断了。我做了很多研究,终于找到了解决方法。实际上,MS Access 数据库如何根据第一条记录列的文本长度确定文本的大小并为后续记录固定该长度。如果它的长度 < 255,访问会自动将进一步的记录长度限制为 255 大小或第一个记录列的长度。我确保第一条记录具有所有记录文本列(已排序)的最大长度,然后导入它对我来说效果很好。

于 2018-05-29T22:50:24.403 回答
0

我在使用 Access 2010 时遇到了同样的问题。在发现 Access 查看前 25 条记录以确定导入时每列的数据类型后,我发现了两种不同的解决方法。

  1. 按列长度降序对导入记录进行排序。这意味着某些列中大于 255 个字符的记录将位于前 25 条记录中。然后,Access 能够在不截断的情况下导入这些记录。
  2. 创建了将列数据类型指定为备注的链接表,然后附加到表中。
于 2015-01-21T15:00:22.903 回答
0

过去我很幸运地使用了上面提供的富文本解决方案以及使用“虚拟行”作为导入的第一条记录。谢谢你!但是,今天我想我遇到了一个更有效/更一致的导入解决方案,你会重复很多次。我在 Access 2007 中试过这个。

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

当您到达最终的“这就是向导需要的所有信息...”屏幕时,请在左下方查找“高级...”按钮。这会弹出一个屏幕,总结您刚刚所做的一切。在右侧查找“另存为...”。使用有用的名称保存这些规范。(您可以通过单击下面的“规格...”来确认您已保存规格。)单击“确定”以离开高级屏幕。

如果您实际上不需要创建新表,现在可以取消向导。接下来——从现在开始,你每次都可以这样做以避免截断——使用“将记录的副本附加到表...”进入正常的导入向导,在向导中,你应该会看到相同的内容“高级...”按钮。打开它,单击“规格...”,然后双击您保存的规格。说“确定”退出“高级”并完成向导。这应该告诉 Access 将您的备注字段保留为备注字段!

将 CSV 导入现有表时,我发现在进入“高级”屏幕之前需要通过几个正常的向导屏幕(例如指定文本限定符)。不知道为什么这会让它开心,仅供参考。

我希望这可以帮助像我一样遇到字段截断导入错误的其他人!

于 2015-04-17T19:24:40.480 回答
0

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

于 2015-09-28T15:57:00.927 回答