这段程序,你试试,好用再给我分。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;
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;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货