如何修复Foxpro数据库
经过工作实践,反复摸索,我发现可以利用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下测试通过,错误或不妥之处请指教。