在程序正在调用Access数据库时系统突然断电,重新启动电脑,运行程序再次连接Access数据库时出现连接失败,这时用鼠标双击打开Access数据库,出现数据库被破坏是否重新修复的对话框,选择‘是’,则access数据库会自动修复。请问:为什么数据库会被破坏?能否用程序自动修复数据库?谢谢

解决方案 »

  1.   

    DAO3.51里有RepairDatabase方法,用它可以修复
      

  2.   

    Microsoft Access数据库被损坏的原因
    Microsoft Access数据库文件(.mdb)在某些突发或不可预料事件中可能导致损坏。已知mdb文件损坏的常见原因主要有四个:
    ●由于写入操作被中断使数据库处于置疑/损坏状态 
    ●网络硬件故障 
    ●在另一个程序中打开和保存 mdb 文件 
    ●计算机病毒原因之一:由于写入操作被中断使数据库处于置疑/损坏状态
    强烈建议通过程序提供的“退出”或“关闭”来正常关闭数据库和结束程序运行。但是,如果非正常终止程序,即Access数据库不正常关闭时,数据库正处于打开状态并正在写数据,则数据库引擎就会将该文件标记为置疑/损坏。如果手动关闭计算机之前没有先关闭Windows 或者断电,也可能会出现这种情况。其它情形还包括:在打开数据库的同时,没有关闭相关程序,但仍干扰数据库引擎向磁盘写入数据。例如,当网络遇到数据冲突或者磁盘驱动器故障时,就会出现这种情况。如果发生任何此类中断,数据库引擎就会将数据库标记为可能已被破坏。 
    当数据库引擎(Jet)开始写操作时,将设置一个标记,并在操作完成时重新设置该标记。如果写操作被中断,标记保持不变。当您要再次打开数据库时,Jet确定标记是否已设置并报告数据库是否被破坏。在大多数情况下,数据库中的数据实际上没有被破坏,但设置的标记提醒Jet数据库可能已被破坏。如果是这种情况,压缩和/或修复数据库通常可以还原数据库。 原因之二:网络硬件故障 
    在这种情况下,数据库文件损坏与数据库引擎无关;文件损坏完全是由于外界原因造成的。原因可能是由于存放数据库的计算机和打开数据库的计算机之间的硬件链中的一个或多个链接出故障。此列表包括但不局限于网卡、网络电缆、路由器和集线器。 
    通常,mdb文件指示由硬件造成的损坏不能通过使用压缩、修复或Jetcomp来还原。直到出故障的硬件被修复或替换,硬件损坏才会被修复。原因之三:在另一个程序中打开和保存mdb文件 
    当打开一个mdb文件并在另一个程序中保存时,不能恢复该文件。例如,Microsoft Word 允许打开并保存Access数据库(顺便提一下,如果在另一个应用程序中打开MDB文件,这样做不起任何作用,因为您看到的都是扩展字符)。当这样保存mdb文件时,如果在Access中打开它,就会提示您输入数据库密码,即使文件在Access中从未使用密码保护也是如此。此处出现密码提示的原因是:当Access打开文件时,检查的第一个字节范围就是数据库密码所在的位置。如果该字节包含损坏的数据,Access就会认为该文件受密码保护。即使能够绕过此处的密码提示,数据库仍无法恢复,因为二进制结构是混乱的,Access根本无法读取。在这种情况下,恢复文件的备份副本是唯一的解决方法。有效防止数据库损坏的方法 
    ●在数据库写入过程中避免断电
    断电将使数据库处于置疑状态,建议为计算机备置不间断电源(UPS)
    ●避免网络连接异常断开 
      应当使用安全可靠的网络,有故障或时断时续的网络传输将导致数据库损坏
    ●避免不正常断开数据库连接
    应该避免突然如断电、手动关闭、使用任务管理器关闭终止应用程序等 
    ●经常压缩数据库
      经常压缩数据库可以保持数据库的最佳访问效率,减少受损机会
    ●不要在Windows网络上运行使用IPX/SPX网络协议
      在Windows网络上,应该使用TCP/IP协议,不要使用IPX/SPX协议。
    ●经常备份数据库
      当数据库遭受不可恢复的灾难性损坏时,可以使用备份来减少损失。
    ●避免感染病毒。电脑病毒可能会干扰网络、干扰数据库引擎的数据存取,导致错误。
      

  3.   

    请问如何调用RepairDatabase方法让程序在连接数据库前先修复数据库?谢谢。
      

  4.   

    原因三中真的没办法恢复了吗,我用dw替换了.asp格式的数据库.现在打开就要密码.