修复FOXPRO25数据库

戴立群

  作为一个FOXPRO程序员或数据库维护人员,当碰到数据库损坏 的情况时,肯定会非常恼火,也许幸好手头还有备份文件,然而当好不 容易把它恢复时,却发现这一天或一段时间内的数据全部泡汤了,怎么 办?只好重来。其实,在大部份情况下,这些数据还在被损坏的数据库 里。经分析,大多数时候,数据库的损坏是由于真实记录个数和数据库 表头所记载的记录个数不符引起的,只要把数据库中对应的记录数改为 真实记录数,就可以了。

  关于FOXPRO数据库的结构,有很多文献都进行了描述,它主要 由文件头,字段信息,和数据区构成。其中记录个数和记录长度在文件 头说明。下面是修复数据库的C源程序,它可带两个参数,第一个参数 是被损坏的数据库名,第二个参数是目标数据库名。运行该程序后,修 复好的数据放在目标数据库中。若只带一个参数时,程序只判断该数据 库是否被损坏。该程序对索引文件没有进行处理,当数据库修复后,可 在FOXPRO下对数据库进行重建索引,命令如下(假设该数据库名叫 D_NM):

/* DBFBU.CPP*/

/*修复数据库*/

#include<stdio.h>

#include<process.h>

#include<conio.h>

#include<malloc.h>

typedef struct{

char dbf_id;

char last[3];

long rec_num; //数据记录个数

unsigned offset; //数据区起始位置偏移值

unsigned rec_size; //单个记录长度

char filler[20];

}filehead; //文件头结构

}rec_stru;//描述字段内容的结构

main(int argc,char * argv[]){

}