搜索这个问题会返回很多搜索结果,但有很多偏离轨道的答案,所以我在这里发布一个简明的描述,并在下面回答。
该问题困扰 Microsoft Access 2010 和之前的某些版本。Access 2013 将备注类型重命名为长文本。我不知道它是否有同样的问题。
在某些特定情况下,根本问题与在具有备注字段的表上运行 UPDATE 查询有关。这可能是在可视化查询窗口中组成的 UPDATE 查询,或者是一些通过 DAO 或 ADO 或类似方式运行 SQL 的 VBA。或者它可能在通过表单更新时出现。
(当前的帖子只关注在 Access 数据库中发生的这种情况,尽管在其他地方你会发现当 Access 连接到外部数据库服务器时类似的问题的讨论。)
Access(或者可能是 Jet)不会立即生成明显的错误警报,而是将值 #Error(不仅仅是字符串“#Error”!)放入备忘录字段中。这可能很容易直到稍后才被注意到,从而导致可见的错误,例如:
-- 你使用 Compact 和 Repair。这似乎完成了,但 Access 悄悄地添加了一个包含几行的 MSysCompactError 表。一个错误 -1611 抱怨 Access 已停止并且无法完成操作。第二个看起来更具体的错误抱怨它找不到“描述”字段。这似乎是一个没有相关性的内部错误。
-- 您尝试将表复制到另一个数据库。Access 给出一个错误,抱怨另一个用户正在使用该表或已更新该表,并且不会完成该操作。
-- 对您没有注意到的、碰巧包含#Error 值的行的其他操作失败。
无论如何,根本问题是导致#Error 值首先放入备忘录字段的原因。
许多张贴者指出,如果 UPDATE 尝试将长度超过大约 2000 个字符的字符串放入备注字段,则会发生这种情况。这是一个惊喜,因为备忘录字段应该能够根据版本保存 1 个或更多的字符,即使它只允许通过 UI 显示 65k。
那么为什么在使用 >2000 个字符进行更新时会出现错误呢?