function CompactDatabase(AFileName,APassWord:string):boolean;
//压缩与修复数据库,覆盖源文件
const
SConnectionString='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;'+'Jet OLEDB:Database Password=%s;';
var
SPath,SFile:Array [0..254] Of Char;
STempFileName:string;
vJE:OleVariant;
begin
GetTempPath(40,SPath);//取得Windows的Temp路径
GetTempFileName(SPath,'~CP',0,SFile);//取得Temp文件名,Windows将自动建立0字节文件
STempFileName:=SFile;//PChar->String
DataTxRx.adoconnection1.ConnectionString:='';
DeleteFile(STempFileName);//删除Windows建立的0字节文件
try vJE:=CreateOleObject('JRO.JetEngine');
vJE.CompactDatabase(format(SConnectionString,[AFileName,APassWord]), format(SConnectionString,[STempFileName,APassWord])); //出错,,提示数据库为独占式打开
result:=CopyFile(PChar(STempFileName),PChar(AFileName),false);
DeleteFile(STempFileName);
except
result:=false;
end;
end;
//压缩与修复数据库,覆盖源文件
const
SConnectionString='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;'+'Jet OLEDB:Database Password=%s;';
var
SPath,SFile:Array [0..254] Of Char;
STempFileName:string;
vJE:OleVariant;
begin
GetTempPath(40,SPath);//取得Windows的Temp路径
GetTempFileName(SPath,'~CP',0,SFile);//取得Temp文件名,Windows将自动建立0字节文件
STempFileName:=SFile;//PChar->String
DataTxRx.adoconnection1.ConnectionString:='';
DeleteFile(STempFileName);//删除Windows建立的0字节文件
try vJE:=CreateOleObject('JRO.JetEngine');
vJE.CompactDatabase(format(SConnectionString,[AFileName,APassWord]), format(SConnectionString,[STempFileName,APassWord])); //出错,,提示数据库为独占式打开
result:=CopyFile(PChar(STempFileName),PChar(AFileName),false);
DeleteFile(STempFileName);
except
result:=false;
end;
end;
procedure CompactAccessDB(ADbFile: string);
const
FileNameTmp = 'temp.db';
JetConnStr = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;';
var
JetEngine: OleVariant;
ConnStr, ConnStrTmp: string;
f: file of Byte;
begin
//关闭数据库连接 AssignFile(f, ADbFile);
Reset(f);
try
ShowInfo('文件大小:' + FormatFloat('0.##', FileSize(f)/1048576)+ 'M', false);
finally
CloseFile(f);
end; ConnStr := Format(JetConnStr, [ADbFile]);
ConnStrTmp := Format(JetConnStr, [GetEnvironmentVariable('TEMP') + '\' + FileNameTmp]);
try
JetEngine := CreateOleObject('JRO.JetEngine');
JetEngine.CompactDatabase(ConnStr, ConnStrTmp);
CopyFile(PChar(FileNameTmp), PChar(ADbFile), false);
DeleteFile(FileNameTmp);
finally
JetEngine := Unassigned;
end; AssignFile(f, ADbFile);
Reset(f);
try
ShowInfo('压缩后文件大小:' + FormatFloat('0.##', FileSize(f)/1048576)+ 'M', false);
finally
CloseFile(f);
end;
end;
我上面已经删除连接了啊!!!
DataTxRx.adoconnection1.ConnectionString:='';
这个不叫删除连接,你只是删除了连接字符串而已。
试试DataTxRx.adoconnection1.active:=false;
Reset(f);
try
ShowInfo('文件大小:'+ FormatFloat('0.##', FileSize(f)/1048576)+'M', false);
finally
CloseFile(f);end; 这个是关闭数据库连接吧?我怎么看不懂啊?
嘿嘿,,不好意思啊!!
好人,你就解释一下吧!!
那用close算停止他工作了吧?
还是不行啊!!
或
DataTxRx.adoconnection1.Close;
库里面有十多万条的数据