Access开发培训
网站公告
·Access专家课堂QQ群号:151711184    ·Access快速开发平台下载地址及教程    ·欢迎加入Access专家课堂微信群!    ·如何快速搜索本站文章|示例|资料    
您的位置: 首页 > 技术文章 > 综合其它

[转]如何诊断和修复的损坏的 Access 2002 或更高版本数据库

时 间:2012-10-29 08:17:28
作 者:金宇   ID:43  城市:江阴
摘 要:
正 文:


概要

有几种方法实现这一点,内部和外部访问,可能会使您的数据库文件已损坏 (损坏)。#Deleted 某些记录,您无法打开其中一个对象在数据库中,您无法完全在 Access 中打开的数据库文件中出现数据库损坏的症状的范围。在 Microsoft Access 中的压缩和修复实用程序是尝试优化或试图修复 Microsoft Access 数据库文件的有用工具。本文介绍此访问实用程序,并提供用于尝试修复损坏的数据库的其他替代方法。本文还提供了有关内容可能会导致数据库损坏的信息。

注意Microsoft Jet) 在 Microsoft Access 中使用的数据库引擎是一个共享数据库系统的文件。在多用户环境中使用 Microsoft Jet 时,多个客户端进程都使用文件读取、 写入和锁定共享数据库中的操作。因为多个客户端进程读取和写入到同一个数据库,因为 Jet 不使用事务日志 (如执行更高级的数据库系统如 SQL Server),不能可靠地防止任何和所有数据库损坏。如果您需要一个数据库系统运行在多用户环境中,每周 7 天、 每天 24 小时 Microsoft 建议使用支持持久事务如 Microsoft SQL Server),则返回 true 的客户端/服务器数据库系统。


尽管本文所述的步骤通常可成功地恢复已损坏的数据库文件,以保护您的数据,因此 Microsoft 建议,可以创建为通常数据库文件的备份副本。


压缩和修复实用工具的说明

压缩数据库

当您压缩数据库时,精简流程将回收在数据库中创建的对象和记录删除未使用的空间。它会通过创建新的目标数据库并将旧数据库中的每个对象复制到新数据库。如果您选择将数据库压缩到原始数据库名称 (而不是到新的数据库,压缩过程创建一个临时数据库、 将原始数据库中的所有对象都导出到临时数据库删除原来的数据库,然后将临时数据库重命名为原始数据库的名称。

下面是压缩进程执行的操作的列表:
  • 它将重组表的页面,使它们驻留在相邻数据库页。这可以提高性能,因为表不再散放在数据库内。
  • 回收未使用的空间创建的对象和记录的删除操作。当从数据库中删除对象或记录时,则它们占用的空间将被标记为可用于向数据库添加新项。但是,数据库的大小从不会缩小除非压缩该数据库。对于数据库中的对象和记录经常添加、 删除和更新,您应经常进行压缩。
  • 它将重置递增自动编号字段,以便下一步会的值分配一个比其余记录中的最大值。例如,如果在数据库中的所有记录已被都删除,压缩数据库后,自动编号字段中的值将为 1,添加下一条记录时。如果在数据库中剩余的最大自动编号值为 50,则压缩数据库后,自动编号字段中的值将 51 添加下一条记录时。请注意这真即使以前添加包含值大于 50 的记录,但在压缩之前被删除。
  • 它将重新生成查询优化过程中使用的表统计信息。随着时间的推移,这些统计信息可能会过期。这通常发生如果回滚的事务,或者如果数据库由于意外的断电没有正确关闭,或者因为之前关闭计算机正在使用 Microsoft Jet 的程序已更改完全退出。
  • 它标记所有查询,以便它们都重新编译下次运行该查询。这是重要的因为可以更改数据库统计信息和以前编译过的查询可能不准确的查询计划。
修复数据库

修复过程尝试修复只将表、 查询和数据库中的索引。它不会尝试修复损坏的窗体、 报表、 宏或模块。

要确保在运行压缩和修复实用工具之前的内容

数据库上运行压缩和修复实用工具之前,请确保以下:
  • 请确保您在原始数据库和 Access 数据库的压缩的版本在硬盘上有足够的可用存储空间。这意味着您必须有可用空间不足,无法至少两倍大小的 Access 数据库中,该驱动器上。如果您需要释放一些空间,请删除不必要的文件的驱动器中,或者,如果可能,请将 Access 数据库移动到具有更多可用空间的驱动器。
  • 请确保您有权限打开/运行以及以独占方式打开 Access 数据库。如果您拥有该数据库,请确保设置这些权限。如果不拥有该数据库,请联系其所有者查找如果可以获取这些权限。
  • 请确保没有用户已打开 Access 数据库。
  • 请确保 Access 数据库不位于只读网络共享上,或已设置为只读的文件属性。

尝试修复损坏的数据库的步骤 

以下步骤概述了可用于尝试修复损坏的数据库的一般方法:

  1. 将已损坏的数据库 (.mdb) 文件的副本,以便有备份。
  2. 如果存在,请删除.ldb 文件。删除.ldb 文件之前,您必须关闭相应的.mdb 文件。

    .Ldb 文件用于确定共享数据库中,以及由谁锁定了哪些记录。以共享方式打开数据库时,如果被创建与相应的数据库 (.mdb) 同名的.ldb 文件。例如,如果在 C:\Msoffice\Access 文件夹中打开共享使用 Northwind.mdb 示例数据库,名为 Northwind.ldb 的文件是自动创建位于同一文件夹中。最后一位用户退出这两个例外与数据库后,.ldb 文件会自动删除--当最后一个用户不具有删除权限包含.mdb 文件的文件夹,或数据库已损坏。.Ldb 文件包含有打开的数据库的用户的列表。
  3. 运行压缩和修复实用工具。为此,请执行以下步骤:
    1. 如果数据库已打开,请将其关闭。
    2. 工具菜单上指向数据库实用工具,然后压缩和修复数据库
    3. 数据库来源 对话框中选择要压缩,该文件,然后单击 压缩
    4. 压缩数据库来源对话框中,选择您想要压缩,该文件,然后单击 $压缩

      如果压缩和修复不成功,您将收到一条消息,指出。这就意味着损坏严重不能更正它。
  4. 如果前面的步骤无法恢复已损坏的数据库,请尝试创建一个新数据库,然后从旧到新的数据库导入对象,一个由一个。然后重新创建关系。这种方法解决问题的数据库中的已损坏的系统表。

    注意您不能使用导入向导导入数据访问页。相反,在新数据库中打开现有的数据访问页。为此,请执行以下步骤:
    1. 在数据库窗口中,单击对象下的页面
    2. 单击新建
    3. 新建数据访问页 对话框中单击 现有的 Web 页,然后单击 确定
    4. 在 定位网页 窗口中浏览到数据访问页的位置。
  5. 如果损坏是在表中,并且前面的步骤不具有恢复表,请尝试以下操作:
    1. 在 Microsoft Access 将表导出为 ASCII (带分隔符的文本) 文件。有关详细信息查看主题"导出数据或数据库对象."Microsoft Access 帮助。
    2. 在 Microsoft Access 中的表导出到 ASCII (带分隔符的文本) 文件中。详细信息查看 Microsoft Access 帮助中的主题"导出数据或数据库对象."。
    3. 删除此表中,与相关联的任何关系,然后从数据库中删除表。
    4. 压缩数据库。
    5. 重新创建表和它有任何关系。
    6. 使用字处理程序,请检查错误或乱码数据的 ASCII 文件,并删除这些记录。在 ASCII 文本文件格式保存该文件。
    7. 重新 ASCII 文件导入到新重新创建表。有关此主题的详细信息,请搜索 Microsoft Access 帮助索引的单词"分隔",然后查看的主题,"导入或链接数据和对象。
  6. 如果损坏出现在窗体或报表,则损坏可能是在窗体或报表本身或在窗体或报表上的一个或多个控件中。可以删除窗体或报表,并从您的数据库的备份副本将其导入或使用以下选项之一:
    • 如果在窗体或报表本身损坏,创建一个新窗体或报表,然后复制原始窗体或报表中的控件。
    • 如果损坏出现在窗体或报表上的控件中,创建新窗体或报表,然后重新创建新窗体或报表上的控件。最好是重新创建的所有控件,因为无法判断哪些控件受到损坏。
  7. 如果宏或模块中的损坏,则损坏可能是在宏或模块本身或在宏或模块的内容。可以删除宏或模块,并从您的数据库的备份副本将其导入或使用以下选项之一:
    • 如果在宏或模块本身损坏,创建一个新的宏或模块,然后复制原始宏或模块的内容。
    • 这种损坏可能涉及嵌入到模块中的非 ASCII 字符。将模块保存为文本文件,删除任何错误或乱码数据,然后将此文本文件重新加载到一个新的模块。
    • 如果损坏出现在宏或模块的内容,您必须创建一个新的宏或模块,然后重新创建原始宏或模块的内容。
如果您不能修复这些步骤与数据库,数据库可能无法修复损坏。这种情况下,您应该还原上次备份的数据库或重新创建数据库。

作为最后的替代方法,某些顾问可能提供的 Microsoft Access 数据库修复服务。由于这是专门的服务,最有效的方法来查找一名顾问是发布一条消息,在 Microsoft Access"第三方和用户组"Internet 新闻组,新闻组地址如下:
microsoft.public.access.3rdpartyusrgrp
有关 Microsoft Access Internet 新闻组的其他信息,请参阅 Microsoft 知识库中相应的文章: 详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
287756压缩数据库后,不重置自动编号字段
为什么.mdb 文件可能会损坏 原因有三个主要原因.mdb 文件可能损坏,,如下所示:
  • 中断的写操作
  • 网络硬件故障
  • 打开和保存.mdb 文件,在另一个程序中

中断的写操作

您应始终正确退出 Access 时的文件菜单上单击退出关闭如果数据库是打开和写入数据的访问异常关闭时,Jet 数据库引擎可能会将数据库标记为置疑/损坏。如果您手动关闭计算机时如果不是第一个退出 Windows 或断电,则可以发生这种情况。其他情况下可能发生的没有关闭 Access,但是,仍可能会干扰 Jet 数据库处于打开状态时,将数据写入磁盘。这可能发生,例如,当网络遇到数据冲突或磁盘驱动器发生故障。如果发生任何这些中断,Jet 可能会将标记为可能已损坏的数据库。

当 Jet 开始写入操作时,它设置一个标志,并且它,然后在操作完成后重置标记。如果写操作被中断,保持该标志。当您尝试再次打开该数据库时,Jet 确定标志设置和报告的数据库已损坏。在大多数情况下,数据库中的数据实际上没有损坏,但设置标志提醒 Jet 可能已损坏。在这种情况下,压缩或修复数据库 (或两者) 通常可以恢复数据库。幸运的是,有种方法来确定哪些用户和工作站是负责将文件标记为可疑。与 Microsoft Visual Basic for Applications 在 Access 中,您可以将输出到特定的数据库登录的用户的列表。
208449在 Internet 上可用的 Microsoft Access 新闻组

有关如何执行此操作的详细信息,请参阅本文内下文中的"如何确定哪些用户/工作站导致文件被标记为置疑"一节。


网络硬件故障

有时不 Jet 数据库引擎所涉及的情况下可能会发生损坏。例如,网络硬件故障会导致文件损坏。原因可能是在一个或多个数据库所在的计算机和数据库的计算机之间的硬件链中的链接将打开。此列表包括但不限于网络接口卡、 电缆连接的网络、 路由器和集线器。

基于硬件的损坏通常不能通过使用压缩、 修复或 Jetcomp 还原的.mdb 文件的指示。修复或替换负责硬件之前,通常将重复发生硬件损坏。 

打开和保存.mdb 文件,在另一个程序中

没有要恢复的.mdb 文件已打开,然后再将其保存在其他程序中的方法。例如,可以打开和保存.mdb 文件,在 Microsoft Word 中,但如果这样做,可能永远不会恢复.mdb 文件,除非从备份副本。如果不小心在另一个应用程序中打开.mdb 文件,确保不将其保存。它真正用途不在另一个应用程序中打开.mdb 文件,因为如果这样做,您看到的是一系列随机字符。


如何确定哪些用户/工作站导致文件被标记为置疑 

当您解决以确定导致数据库损坏时,可能需要知道谁登录到数据库。与 Microsoft Visual Basic for Applications 在 Access 2002 或 Access 2003 中,您可以访问到特定的数据库登录的用户的列表。

有关如何执行此操作的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
285822如何确定登录到数据库在 Access 2002 或 Access 2003 中使用 Microsoft Jet UserRoster

为防止损坏所能采取的步骤

若要防止数据库的损坏:
  • 避免数据库写入过程中断电。数据库写入过程中失去电源会导致数据库处于置疑状态。
  • 避免网络连接断开。
  • 避免停电时,手动关闭,让任务管理器关闭应用程序,如 Microsoft Jet 连接异常终止,依此类推。
  • 当您编程时,关闭所有已打开的 DAO 和 ADO 对象。例如,记录集、 QueryDef、 TableDef数据库对象。
  • 致命系统错误几乎总是会导致异常终止。如果您的数据库是容易出现致命错误,您应在数据库因损坏打开或恢复之前解决这些错误。有关如何执行此操作和示例,您可以使用代码的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    285822如何确定谁登录到数据库中在 Access 2002 中使用 Microsoft Jet UserRoster
    有关致命系统错误的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
    294301ACC2002: 如何解决在 Microsoft Windows 2000 上运行 Access 2002 中的致命系统错误
  • 经常压缩数据库。
  • 不要运行 Microsoft Jet 数据库位于网络上的 Windows NT 服务器上的 IPX,并且客户端的 IPX/SPX 的 Microsoft Windows 95。改为运行在 Windows NT 服务器和 Win95 客户端上的 IPX 和 TCP IP 双协议堆栈上的 TCP IP。(Windows NT 到 Windows NT 有 IPX/SPX 将不会导致此问题,也将向任何客户端的 Novell。)
  • 避免大量 (超过 40000 连续的打开和关闭操作可能会导致损坏) 循环中的打开和关闭操作。

特别注意转换后的数据库

在版本的 Access 早于 Access 2002 中,如果没有出现错误时您已将数据库转换为当前版本中,没有难确定哪些对象造成影响,并可能包含明显损坏。

当 Microsoft Access 2002 或更高版本遇到错误,将转换 Access 文件时,可以通过在新的 Access 文件中打开转换错误表中查看这些错误的摘要。转换错误表包含以下列:

对象类型。数据库中的对象类型的访问时遇到错误,或者"数据库",如果访问时遇到一个错误,不是特定于特定类型的对象。

对象名。访问时遇到一个错误的对象的名称。如果 Access 在转换过程中遇到编译错误,但是,包含该错误的模块的名称未指定。

错误说明:如有必要,您可以按 SHIFT + F2 来查看完整的错误的说明。




Access软件网QQ交流群 (群号:54525238)       Access源码网店

常见问答:

技术分类:

相关资源:

专栏作家

关于我们 | 服务条款 | 在线投稿 | 友情链接 | 网站统计 | 网站帮助