利用ADO压缩和修复MSAccess2000数据库
上次发表了一篇关于压缩和修复MS Access 2000文件的文章,得到网友的好评,在此深表感谢。下面再奉献一篇利用 ADO 压缩和修复MS Access 2000文件的文章,希望能对您有所帮助。
首先定义一个函数:
function TForm1.compressdatabase:boolean;
const
sProvider = 'Provider=Microsoft.Jet.OLEDB.4.0;'; var
sOldMDB,sNewMDB:string; MyObj:variant; begin
result:=false;
OldFileName:='Delphi资料库.mdb'; NewFileName:='Delphi资料库.mdb1';
sOldMDB := sProvider + 'Data Source=' + OldFileName; sNewMDB := sProvider + 'Data Source=' + NewFileName; MyObj:=createoleobject('jro.jetengine.2.1'); try try
MyObj.CompactDatabase(sOldMDB, sNewMDB); result:=true; except
result:=false; MyObj:=null; end; finally
MyObj:=null; end; end;
调用示例:
Var
OldFileName,NewFileName:string; //全局变量
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin
ADOConnection1.Connected :=false; //调用之前必须先关闭数据库连接
if not n1.Checked then exit; //假若“关闭时压缩数据库”为假,则退出 try
if not CompressDatabase then begin
ShowMessage(' 压缩数据库失败! '); exit
else ShowMessage(' 压缩数据库成功! '); if DeleteFile(OldFileName) then
RenameFile(NewFileName,OldFileName); else ShowMessage('不能重命名文件'); finally
// OldFileName:=''; // NewFileName:=''; end; end;
注意:
1- 在你的uses语句中必须加入ComCtrls单元。
2- 在压缩的过程中,其它人不能打开或使用数据库。
3- 修复压缩数据库时,若出现“类字符串无效”。
原 因 是:用户计算机中没有或者未注册“MSJRO.DLL”文件。 解决办法:若$(system)目录中没有上述文件,则复制该文件到$(system)目录下;若$(system)目录有上述文件,那么在$(system)目录下执行下列命令:
regsvr32 MSJRO.dll
若还出现“类字符串无效” 请尝试将“MyObj:=createoleobject('jro.jetengine.2.1');”一句改为:
MyObj:=createoleobject('jro.jetengine'); 注:$(system)目录,即为用户计算机中操作系统的系统目录。如:“C:\\Windows\\System” 。