2008-10-30 41 views
4

我在一个客户端上做一些快速修复他们的访问应用程序。我有一段时间可以进入,但我很快就恢复了。但是,我发现了一个有趣的问题:如何解决可能的数据库损坏?

对于某些报告,我收到“记录被删除”错误。我检查了这些报告,看起来好像有一张桌子有问题。打开该表时,我发现所有列都标记为“#deleted”的记录。显然,这一行似乎是罪魁祸首。但是,当我尝试删除该行时,没有发生任何事情。如果我重新打开表格,该行仍然存在。

db是否存在腐败?我该如何删除这个记录?

编辑:这是一个MS2000版本

解决方案:简单的压缩/修复没有工作。我将数据库转换为2003年的文件格式,而不是诀窍。我已经标出了第一个建议压缩/修复的答案,因为它指出了我的正确方向。谢谢!

+0

我在这个问题中添加了一些标签,以方便其他人在未来找到它。如果您认为他们不合适,请随时将其删除。 – 2008-10-30 12:42:56

+0

我记得在MSA-2000中确实存在一个这样做的错误,唯一的^ H^H^H^Heasiest解决方案是将它提升到2003年并压缩修复。从那里,你可以随时将它转换回2000年,如果需要的话。 – BIBD 2008-10-30 18:57:56

回答

4

您是否尝试过使用Access compact/repair工具?这应该从数据库中刷新已删除的记录。

确切位置因您所运行的Access版本而异,但在Access 2003中,它位于“工具”>“数据库实用程序”>“压缩和修复数据库”下。一些早期版本的Access有两个单独的工具 - 一个用于压缩,一个用于修复 - 但是他们是从类似的位置访问的。如果它们在客户端版本上是分开的,则需要同时运行这两个版本。

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

4

托尼·托斯,访问MVP,有一个全面的指南腐败:

Corrupt Microsoft Access MDBs FAQ

  • 一些腐败症状
  • 确定造成损坏的工作站
  • 损坏导致
  • 要检索数据

顺便说一句,decompile是编码时整理奇发生的事情和提高启动时间是非常有用的。

+0

我完全忘记了Tony的东西。谢谢! – 2008-10-30 12:32:09

2

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

3

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

相反,使用未结合的文本框,并且在窗体的成为当前事件,从所述表单的基础记录源分配当前的数据:

Me!txtMyMemo = Me!MyMemo 

要编辑内容保存到未结合的控制,使用控制的更新后事件:

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

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

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