如何修复Foxpro数据库

Author: 李景海 Date: 2000年 第6期

  随着计算机技术的迅速发展,计算机的应用与普及程度也越来越高。绝大多数单位已不同程度地将计算机技术应用于工作的某个方面。早期的数据库应用系统大多采用FoxBase+或Foxpro编程,由于这种数据库技术的局限性,缺乏对数据完整性、安全性和一致性方面的控制手段,没有大型数据库的“事务处理”的概念,在运行过程中,由于异常事件,如断电、网络故障、服务器、工作站锁死等因素,会造成部分使用中的数据库遭到破坏,当打开损坏的数据库时,将出现提示“不是dbf数据库”,导致数据不可用。
  经过工作实践,反复摸索,我发现可以利用Pctools或其他十六进制的编辑工具如WinHex等工具软件修复,将损失降到最小程度。下面,简述其修复过程。
  1.背景知识:数据库文件的前32个字节为数据库控制信息。其中,第5、6字节分别存放记录个数的低8位和高8位。例如:一数据库有2345(十六进制数为:929)条记录,则该数据库的第5、6字节分别存放29,09;以下每32个字节连续存放每个字段的定义,其中每32个字节的第17字节存放字段宽度;字段定义完后两字节为0d,20,之后连续存放记录数据(每字段宽度之和加1个字节即list stru命令显示出的“**total** xxx”个字节存放一条记录),最后,以1A结束。
  2.修复原理:数据库损坏后,多数情况为后面的几条记录损坏。通过直接修改数据库包含记录条数的方法使损坏的数据可用,然后,补录后几条记录即可。
  3.修复过程:①在DOS下,利用Pctools工具包中的filefix命令“预修复”(由程序自动审查完好记录的个数)损坏的数据库,在修复结果中查看并记录下已修复的记录个数,如:2343,换算为十六进制数为927;②利用Pctools或其他的十六进制的编辑工具如:WinHex等工具软件将该数据库的第5字节改为27;③将数据库的前四个字节修改为原文件的备份文件或同目录下完好数据库的前四个字节;④存盘退出。
  注:如果数据库包含备注型字段,对于FoxBase+数据库可以直接用filefix修复,但Foxpro数据库,由于其备注型字段内容存放在.fpt文件中,而filefix无法直接修复。
  以上方法在DOS6.22,Foxpro2.5 for DOS,Pctools 9.0下测试通过,错误或不妥之处请指教。