// 备份数据库: 将数据库复制(CopyFile)一份到其他目录即可.
// 压缩数据库
// user ComObj, ActiveX;
procedure CompressData(SrcConn: TAdoConnection; SrcFile, DstFile: TFileName);
var Jro: OleVariant;
var strCon1, strCon2: String;
begin
  strCon1 := SrcConn.ConnectionString;
  SrcConn.Close;
  strCon2 := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + DstFile + ';Jet OLEDB:Encrypt Database=True;';
  try
    Jro := CreateOleObject('JRO.JetEngine');
    Jro.CompactDatabase(strCon1, strCon2);
    DeleteFile(SrcFile);
    MoveFile(PChar(DstFile), PChar(SrcFile));  
  finally
    Jro := nil;
  end;
end;

解决方案 »

  1.   

    var 
      dao: OLEVariant; 
    begin 
      dao := CreateOleObject('DAO.DBEngine.35'); 
      dao.CompactDatabase('d:\yourDatabaseName.mdb', 
    'd:\yourNewCompactedDatabaseName.mdb'); 
    end; 
      

  2.   

    use ComObj;
    ....
    var X:OleVariant;
        sourcefiles,tempfiles:string;
    begin
      form_flat;
      if messagebox(mainform.handle,'确认要压缩数据库吗?','压缩',mb_yesno)<>idyes then exit;
      data1.Database1.Connected:=false;
      sourcefiles:=原数据库路径;
      tempfiles:=目标数据库路径;
      try
        X:=createoleobject('dao.dbEngine.36');
        x.CompactDatabase(sourcefiles,tempfiles,'',0,';pwd=');
        deletefile(sourcefiles);
        renamefile(tempfiles,sourcefiles);
        StatusBar1.Panels[5].Text:='压缩数据完毕,请重新启动程序!';
        if fileExists(sourcefiles) and FileExists(tempfiles) then
        if deleteFile(sourcefiles)then RenameFile(tempfiles,sourcefiles);
        showmessage('压缩数据完毕,请重新启动程序!');
      close;
      except
      Messagedlg('主数据库正在被他人或应用程序使用,请稍后再试!',mtwarning,[mbok],0);
      end;
    end;
      

  3.   

    我要ADO的压缩数据库代码。大虾帮帮忙了。