原函数如下:
function ACompactDB(Afilename:string):boolean;
var
db:OleVariant;
TempFile:string;
begin
Result:=false;
try
TempFile:=ExtractFilePath(Afilename)+'TempName'+'.mdb';
db.CompactDatabase(Afilename,TempFile);
DeleteFile(Afilename);
RenameFile(TempFile,Afilename);
Result:=true;
except
on E:EOleException do
DisplayMessage('压缩没有成功,请检查文件后重新压缩!');
end;
为什么执行到db.CompactDatabase(Afilename,TempFile);时就报错:Invalid variant operation.请教是什么原因?
function ACompactDB(Afilename:string):boolean;
var
db:OleVariant;
TempFile:string;
begin
Result:=false;
try
TempFile:=ExtractFilePath(Afilename)+'TempName'+'.mdb';
db.CompactDatabase(Afilename,TempFile);
DeleteFile(Afilename);
RenameFile(TempFile,Afilename);
Result:=true;
except
on E:EOleException do
DisplayMessage('压缩没有成功,请检查文件后重新压缩!');
end;
为什么执行到db.CompactDatabase(Afilename,TempFile);时就报错:Invalid variant operation.请教是什么原因?
TempFile:=ExtractFilePath(Afilename)+'TempName'+'.mdb';
db:=createoleobject('JRO.JetEngine');
db.CompactDatabase('Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+afilename+'','Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+tempfile+'');
DeleteFile(Afilename);
RenameFile(TempFile,Afilename);
except
on E:EOleException do
showMessage('压缩没有成功,请检查文件后重新压缩!');
end;
SConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;'
+'Jet OLEDB:Database Password=%s;';
//=============================================================================
// Procedure: CompactDatabase
// Author : ysai
// Date : 2003-01-27
// Arguments: AFileName,APassWord:string
// Result : boolean
//=============================================================================
function CompactDatabase(AFileName,APassWord:string):boolean;
//压缩与修复数据库,覆盖源文件
var
STempFileName:string;
vJE:OleVariant;
begin
STempFileName:=GetTempPathFileName;
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;
function GetTempPathFileName():string;
//取得临时文件名
var
SPath,SFile:array [0..254] of char;
begin
GetTempPath(254,SPath);
GetTempFileName(SPath,'~SM',0,SFile);
result:=SFile;
DeleteFile(result);
end;