上次发表了一篇关于压缩和修复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” 。
2003-5-29 18:29:00
2003-5-29 18:32:42 压缩和修复MS Access 2000文件
我们知道,由于使用内部高速缓存和临时缓冲区,MS Access文件随着使用时间快速增加。这些多余的空间的浪费远超出它对性能的影响,并且备份时会需要很大的空间。解决它的办法是压缩,通过选择Access 2000的菜单“工具->数据库实用工具->压缩和修复数据库”完成,或者也可以在你的Delphi程序中完成。
procedure TMainFrm.CompressDB;
var
DaoVar: OLEVariant;
begin
screen.Cursor :=crHourGlass;
if dmfrm.ADOConnection1.Connected then dmfrm.ADOConnection1.Connected :=false;
try
DaoVar := CreateOleObject('DAO.DBEngine.36');
if FileExists('misdbnew.mdb') then deletefile('misdbnew.mdb'); //删除文件“misdbnew.mdb”
DaoVar.CompactDatabase('MisDB.mdb','misdbnew.mdb');//压缩“misdb.mdb” 到”misdbnew.mdb“
if deletefile('MisDB.mdb') then //删除文件“misdb.mdb” RenameFile('misdbnew.mdb','MisDB.mdb'); //将“misdbnew.mdb”改名为”misdb.mdb“
finally
screen.Cursor :=crDefault;
end;
end;
注意:
1- 在你的uses语句中必须加入ComCtrls单元。
2- 在压缩的过程中,其它人不能打开或使用数据库。
3- 修复压缩数据库时,若出现“类字符串无效”。
原 因 是:用户计算机中没有或者未注册“DAO360.DLL”文件。
解决办法:若$(system)目录中没有上述文件,则复制该文件到$(system)目录下;若$(system)目录有上述文件,那么在$(system)目录下执行下列命令:
regsvr32 dao360.dll
注:$(system)目录,即为用户计算机中操作系统的系统目录。如:“C:\Windows\System” 。
(出处:www.delphibbs.com)