修复Access数据库? Access数据库用久了会莫名其妙的变大,越来越大。用Office里面的Access工具有一个“压缩和修复数据库”可以把数据库重新变小。但我总不能让用户安装Office....请问如何在程序中实现这个功能? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 自己写程序压缩function TfrmMain.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;if CompactDatabase(edtDatabaseFile.Text, edtPassword.Text) then SkinMessage.MessageDlg('压缩数据库成功', mtInformation, [mbOK], 0) else SkinMessage.MessageDlg('压缩失败,可能是您的计算机中没有安装 ADO 引擎,或者是数据库文件正被其它程序打开', mtError, [mbOK], 0); uses comobjvar dbe:OleVariant;begin dbe:=CreateOleObject('dao.dbengine.36'); dbe.CompactDatabase('D:\aaa.mb','d:\bb.mdb','',0,';pwd=ccc');end;//ccc为密码 如何改变ehlib滚动条颜色,默认的灰太难看了,求如何改成其它颜色 老菜的问题了 WIN2003中Delphi 7中的Project菜单中Options菜单打不开 谈谈delphi中Socket连接失败的异常处理方法 在线等啊.版主帮忙,如何压缩文件夹的所有文件到指定目录?解决给100分 求帮助 Delphi 中如何使用 xsl? 一个关于FTP的问题! 我怎么觉得DEPHI的调试功能很差呀? 如何将一个picture插入到SQL的'insert into …………'中 报表问题,高分求救!! 如何拷贝文件到已知目录下 条件限制
function TfrmMain.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;if CompactDatabase(edtDatabaseFile.Text, edtPassword.Text) then
SkinMessage.MessageDlg('压缩数据库成功', mtInformation, [mbOK], 0)
else
SkinMessage.MessageDlg('压缩失败,可能是您的计算机中没有安装 ADO 引擎,或者是数据库文件正被其它程序打开',
mtError, [mbOK], 0);
dbe:OleVariant;
begin
dbe:=CreateOleObject('dao.dbengine.36');
dbe.CompactDatabase('D:\aaa.mb','d:\bb.mdb','',0,';pwd=ccc');
end;//ccc为密码