📄 compactmdb.pas
字号:
Unit CompactMDB;
Interface
Uses
Windows, SysUtils, Math, ComObj, shellapi, Shlobj;
Function CompactDatabase(Const AFileName, APassWord: String): Boolean;
Implementation
Function CompactDatabase(Const AFileName, APassWord: String): Boolean;
Const
SConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;'
+ 'Jet OLEDB:Database Password=%s;';
Var
SPath : String;
SFile : Array[0..254] Of char;
STempFileName : String;
JE : OleVariant;
Function GetTempDir: String;
Var
Buffer : Array[0..MAX_PATH] Of char;
Begin
ZeroMemory(@Buffer, MAX_PATH);
GetTempPath(MAX_PATH, Buffer);
result := IncludeTrailingBackslash(StrPas(Buffer));
End;
Begin
result := false;
SPath := GetTempDir; //取得Windows的Temp路径
GetTempFileName(pchar(SPath), '~ACP', 0, SFile);
//取得Temp文件名,Windows将自动建立0字节文件
STempFileName := SFile; //PChar->String
If Not DeleteFile(STempFileName) Then Exit; //删除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
//压缩失败
End;
End;
End.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -