4

我在一个客户那里对他们的访问应用程序做一些快速修复。有一段时间我尝试了访问,但我正在迅速恢复。但是,我发现了一个有趣的问题:

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

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

编辑:这是一个 MS2000 版本

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

4

5 回答 5

4

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

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

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

于 2008-10-30T11:12:31.667 回答
4

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

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

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

顺便说一句,反编译对于整理编码时的奇怪事件和改善启动时间非常有用。

于 2008-10-30T12:30:20.293 回答
3

你也可以试试这个命令行实用程序

//安迪

于 2008-10-30T11:32:50.970 回答
3

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

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

  Me!txtMyMemo = Me!MyMemo

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

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

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

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

于 2008-10-31T01:27:34.453 回答
2

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

于 2008-10-30T13:05:18.227 回答