procedure Tmenu_w.N_ysyxfsjkClick(Sender: TObject);
var
vJE:OleVariant;
string1,string2,TempFileName,dataFileName:string;
begin
caption:=menu_caption+'-压缩与修复数据库';
StatusBar1.Panels[0].Text:='目前状态:压缩与修复数据库';
login_w.ADOConnection1.connected:=False;
try
TempFileName:=ExtractFilePath(Application.ExeName)+'temp.mdb';
dataFileName:=ExtractFilePath(Application.ExeName)+'syglmisku.mdb';
string1:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+datafilename+';Jet OLEDB:Database Password=''cxj'';';
string2:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+TempFileName+';Jet OLEDB:Database Password=''cxj'';';
vJE:=CreateOleObject('JRO.JetEngine');
vJE.CompactDatabase(string1,string2);
CopyFile(PChar(TempFileName),pchar(datafilename),false);
DeleteFile(TempFileName);
Application.messagebox('压缩与修复数据库完毕。','提示',MB_ICONINFORMATION);
except
login_w.ADOConnection1.connected:=True;
Application.messagebox('压缩失败。','提示',MB_ICONERROR);
Exit;
end;
end;
var
vJE:OleVariant;
string1,string2,TempFileName,dataFileName:string;
begin
caption:=menu_caption+'-压缩与修复数据库';
StatusBar1.Panels[0].Text:='目前状态:压缩与修复数据库';
login_w.ADOConnection1.connected:=False;
try
TempFileName:=ExtractFilePath(Application.ExeName)+'temp.mdb';
dataFileName:=ExtractFilePath(Application.ExeName)+'syglmisku.mdb';
string1:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+datafilename+';Jet OLEDB:Database Password=''cxj'';';
string2:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+TempFileName+';Jet OLEDB:Database Password=''cxj'';';
vJE:=CreateOleObject('JRO.JetEngine');
vJE.CompactDatabase(string1,string2);
CopyFile(PChar(TempFileName),pchar(datafilename),false);
DeleteFile(TempFileName);
Application.messagebox('压缩与修复数据库完毕。','提示',MB_ICONINFORMATION);
except
login_w.ADOConnection1.connected:=True;
Application.messagebox('压缩失败。','提示',MB_ICONERROR);
Exit;
end;
end;
var
AVariant: Variant;
begin
if FileExists(dbName + '.tmp') then DeleteFile(DbName + '.tmp'); //是否存在相同的.tmp的临时文件,有则删了
AVariant := CreateOleObject('JRO.JetEngine');
AVariant.CompactDataBase('Provider=Microsoft.Jet.OLEDB.' + JetId + ';Jet OLEDB:Database Password=hjp;Data Source=' +
dbName,
'Provider=Microsoft.Jet.OLEDB.' + JetId + ';Data Source=' + dbName + '.tmp');
DeleteFile(DbName);
ReNameFile(dbName + '.tmp', DbName); //把文件名改回来
end;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;
JE: OleVariant;
begin
GetTempPath(40, SPath); //取得Windows的Temp路径
GetTempFileName(SPath, '~CP', 0, SFile); //取得Temp文件名,Windows将自动建立0字节文件
STempFileName := SFile; //PChar->String
DeleteFile(STempFileName); //删除Windows建立的0字节文件
try
JE := CreateOleObject('JRO.JetEngine'); //建立OLE对象,函数结束OLE对象超过作用域自动释放
OleCheck(JE.CompactDatabase(format(SConnectionString, [AFileName, APassWord]),
format(SConnectionString, [STempFileName, APassWord]))); //压缩数据库
//复制并覆盖源数据库文件,如果复制失败则函数返回假,压缩成功但没有达到函数的功能
result := CopyFile(PChar(STempFileName), PChar(AFileName), false);
DeleteFile(STempFileName); //删除临时文件
except
result := false; //压缩失败
end;
end;