这段程序,你试试,好用再给我分。procedure TForm1.NNNClick(Sender: TObject);
label lw;
var
  fd           :array[0..65] of byte;
  rl,lhb,dbs,nr,tb:longint;
  i,handle     :integer;
  Sof          :Longint;
  fn           :String;
  fi           :file;
begin
  if OpenDialog1.Execute then
    begin
      Fn:=OpenDialog1.Filename;
      AssignFile(fi,fn);
      reset(fi,1);
      Sof:=FileSize(fi);
      BlockRead(fi,fd[0],64);
      //计算总块数
      dbs:=fd[5]*1024;
      lhb:=fd[2]+fd[3]*256;
      tb:=ceil((sof-lhb)/dbs);
      //根据总块数计算总纪录数
      rl:=fd[0]+fd[1]*256;
      nr:=dbs div rl;
      nr:=nr*tb;
      //修改总的纪录数
      fd[6]:=nr mod 256;
      fd[7]:=nr div 256;
      fd[8]:=nr div (256*256);
      fd[9]:=nr div (256*256*256);
      //修改数据块数
      fd[10]:=tb mod 256;
      fd[12]:=fd[10];
      fd[16]:=fd[10];
      fd[58]:=fd[10];
      fd[11]:=tb div 256;
      fd[13]:=fd[11];
      fd[17]:=fd[11];
      fd[59]:=fd[11];
      fd[14]:=1;
      fd[15]:=0;
      seek(fi,0);
      blockwrite(fi,fd[0],64);
      if tb>1 then
        for i:=0 to tb-1 do
          begin
            if i=0 then
              begin
                fd[0]:=2;
                fd[1]:=0;
                fd[2]:=0;
                fd[3]:=0;
                goto lw;
              end;
            if i=tb-1 then
              begin
                fd[0]:=0;
                fd[1]:=0;
                fd[2]:=i mod 256;
                fd[3]:=i div 256;
                goto lw;
              end;
            fd[0]:=(i+2) mod 256;
            fd[1]:=(i+2) div 256;
            fd[2]:=i mod 256;
            fd[3]:=i div 256;
lw:         seek(fi,lhb+dbs*i);
            blockwrite(fi,fd[0],4);
          end;
      closefile(fi);
      showmessage('数据库'+fn+'修复完成!');
    end;
end;