请问ado有压缩access数据库的方法吗?(100分)

  • 主题发起人 handsome1234
  • 开始时间
H

handsome1234

Unregistered / Unconfirmed
GUEST, unregistred user!
请问ado有压缩access数据库的方法吗?
就像dao的compactdatabase一样的
 
当然有
Function Tfrm_zip.CompactAndRepair(sOldMDB : String; sNewMDB : String) : Boolean;
var
oJetEng : JetEngine;
sProvider:string;
begin
sProvider:='Provider=Microsoft.Jet.OLEDB.4.0;';
sOldMDB := sProvider + 'Data Source=' + sOldMDB+';Jet OLEDB:Database Password="yongshiok"';
sNewMDB := sProvider + 'Data Source=' + sNewMDB+';Jet OLEDB:Database Password="yongshiok"';

try
oJetEng := CoJetEngine.Create;
oJetEng.CompactDatabase(sOldMDB, sNewMDB);
oJetEng := Nil;
Result := True;
except
oJetEng := Nil;
Result := False;
end;
end;
必须导入microsfot jet and replication objects
 
没有密码时去掉
Database Password="yongshiok"'
 
要先引入ADOX类型库,我已经照李维的做了,project->import type library-->
rename--->create unit

来自:yzhshi, 时间:2002-8-4 16:50:00, ID:1242076
如果需要,就是uses你Import的那个pas。
建立数据库的我没有用过,我有一段压缩数据库的代码,其中之一就应该是使用那个的。
如下,供参考
Function CompactAndRepair(sOldMDB: String; sNewMDB: String): Boolean;
const
sProvider = 'Provider=Microsoft.Jet.OLEDB.4.0;';
var
oJetEng: JetEngine;
begin
sOldMDB := sProvider + 'Data Source=' + sOldMDB;
sNewMDB := sProvider + 'Data Source=' + sNewMDB;

try
oJetEng := CoJetEngine.Create;
oJetEng.CompactDatabase(sOldMDB, sNewMDB);
oJetEng := Nil;
Result := True;
except
oJetEng := Nil;
Result := False;
end;
end;
d;

 
xxx.mdb-你要压缩的数据库

begin
adoconnection1.Close; //压缩是以独占方式进行的;压缩前要关闭数据库连接。
screen.Cursor := crHourGlass;
try
dao := CreateOleObject('DAO.DBEngine.36'); //access2000要用dao3.6,在access97上用35和36都可以
dao.CompactDatabase('xxx.mdb', 'temp.mdb');
DeleteFile('xxx.mdb');
RenameFile('temp.mdb', 'xxx.mdb');
except
MessageBox(0, '压缩失败,没安装OFFICE2000或其它程序也打开了此数据库,请安装OFFICE2000或退出其它程序后再试。', '错误', MB_ICONERROR);
end;
adoconnection1.Open;
ADOQuery1.Active := true;
screen.Cursor := crDefault;
Showmessage('本地数据库压缩完成');
end;
 
多人接受答案了。
 
顶部