我正在为客户对其访问应用程序进行一些快速修复。我尝试访问已经有一段时间了,但我很快就恢复了。然而,我发现了一个有趣的问题:

对于某些报告,我收到“记录已删除”错误。我检查了报告,似乎有一张表有问题。打开该表时,我发现一条记录,其中所有列都标记为“#deleted”。很明显,这一行似乎是罪魁祸首。但是,当我尝试删除该行时,什么也没有发生。如果我重新打开表,该行仍然存在。

数据库中是否存在损坏?我怎样才能永久删除这个记录?

编辑: 这是MS2000版本

解决方案: 简单地压缩/修复不起作用。我将数据库转换为 2003 文件格式,这样就成功了。我已经标记了建议压缩/修复的第一个答案,因为它为我指明了正确的方向。谢谢!

有帮助吗?

解决方案

您是否尝试过内置的Access压缩/修复工具?这应该从数据库中刷新已删除的记录。

具体位置根据您正在运行的Access版本而有所不同,但在Access 2003上,它位于工具>下。数据库实用程序>紧凑和修复数据库。一些早期版本的Access有两个独立的工具 - 一个用于紧凑,一个用于修复 - 但是它们是从类似的位置访问的。如果它们在客户端的版本上是分开的,则需要同时运行它们。

这应该是一种非破坏性的操作,但最好在MDB文件的副本上进行测试(对于明显的陈述道歉)。

其他提示

Tony Toews,Access MVP,有一份全面的腐败指南:

损坏的 Microsoft Access MDB 常见问题解答

  • 一些腐败症状
  • 确定导致损坏的工作站
  • 腐败原因
  • 检索您的数据

作为旁白, 反编译 对于解决编码时出现的异常情况以及缩短启动时间非常有用。

您也可以尝试命令行实用程序

//安迪

压缩和导入不会解决报告的错误问题,这显然是备注字段的损坏指针。您唯一能做的就是删除并重新创建导致问题的记录。而且你需要找到编辑备忘录数据的方法(或消除备忘录字段 - 你真的需要超过255个字符吗?),这不会让你面临腐败风险。这意味着避免对备注字段的表单进行绑定控制。

相反,使用未绑定的文本框,并在表单的OnCurrent事件中,从表单的基础记录源中分配当前数据:

  Me!txtMyMemo = Me!MyMemo

要保存对未绑定控件的编辑,请使用控件的AfterUpdate事件:

  Me!MyMemo = Me!txtMyMemo
  Me.Dirty = False        ' save the whole record

为什么备忘录字段会受到损坏?因为它们不存储在与非备注字段相同的数据页中,而是记录的主数据页中的所有内容都是指向其他数据页的指针(如果它是一大块数据页,则指向一组数据页)数据)存储实际备忘录数据的位置。如果没有这样做,带有备忘录的记录将很快超过最大记录长度。

指针相对容易被破坏,最常见的是在绑定控件中编辑时出现致命问题。使用未绑定控件进行编辑并不能完全消除问题,但意味着您面临危险的时间非常非常短(即,在AfterUpdate事件中执行这两行代码所需的时间)

除了上面已经发布的选项之外,我还使用了另一种简单的方法:只需创建一个新的MDB文件并从损坏的文件中导入所有对象。当你走这条路时,不要忘记获取系统和/或隐藏物品。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top