【问题标题】:Truncated Data when Importing from Excel to an Access Memo Field从 Excel 导入到 Access 备注字段时截断的数据
【发布时间】:2013-02-21 09:15:48
【问题描述】:

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

我已尝试附加为 CSV。没用。

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

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

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

【问题讨论】:

  • 我们在 Access 2010 的“外部数据”选项卡中使用“导入电子表格向导”。我不知道如何从向导中获取 SQL 代码。有没有简单的方法可以做到这一点。

标签: excel ms-access truncate truncation


【解决方案1】:

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

经过一番挖掘,我发现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 中遇到了类似的问题 - 它在从 XLS 导入时将字段截断为 255 个字符,即使导入向导选择 LONG TEXT 作为字段,即使我有前几行中包含 > 255 个字符的字段。

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

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

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      希望这有帮助..?

      【讨论】:

        【解决方案4】:

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

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

        我希望这会有所帮助。

        【讨论】:

          【解决方案5】:

          我在 MS Access 2013 中遇到了同样的问题。当我导入一个列文本大于 255 个字符的 Excel 工作表时,它被截断了。我做了很多研究,终于找到了解决方法。实际上,MS Access 数据库如何根据第一条记录列的文本长度确定文本的大小并为后续记录固定该长度。如果它的长度

          【讨论】:

            【解决方案6】:

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

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

            【讨论】:

              【解决方案7】:

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

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

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

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

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

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

              【讨论】:

                【解决方案8】:

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

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-06-09
                  • 1970-01-01
                  • 1970-01-01
                  • 2017-12-11
                  相关资源
                  最近更新 更多