怎样执行access数据库工具下的压缩和修复数据库

解决方案 »

  1.   

    用原生对象
    参考
    http://zhidao.baidu.com/question/5484081.html
      

  2.   

    要引用ComObj单元function MyCompactDatabase(AFileName,APassWord:string):boolean;
    Const
     SConnectionString       = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;'
                                   +'Jet OLEDB:Database Password=%s;';
      function GetTempPathFileName():string;
        //取得临时文件名
        var
         SPath,SFile:array [0..254] of char;
        begin
         GetTempPath(254,SPath);
         GetTempFileName(SPath,'~SM',0,SFile);
         result:=SFile;
         DeleteFile(result);
        end;
        function CreateAccessFile(FileName:String;PassWord:string=''):boolean;
        //建立Access文件,如果文件存在则失败
        var
         STempFileName:string;
         vCatalog:OleVariant;
        begin
         STempFileName:=GetTempPathFileName;
         try
           vCatalog:=CreateOleObject('ADOX.Catalog');
           vCatalog.Create(format(SConnectionString,[STempFileName,PassWord]));
           result:=CopyFile(PChar(STempFileName),PChar(FileName),True);
           DeleteFile(STempFileName);
         except
           result:=false;
         end;
        end;
    //压缩与修复数据库,覆盖源文件
    var
     STempFileName:string;
     vJE:OleVariant;
    begin
     STempFileName:=GetTempPathFileName;
     try
       vJE:=CreateOleObject('JRO.JetEngine');
       vJE.CompactDatabase(format(SConnectionString,[AFileName,APassWord]),
           format(SConnectionString,[STempFileName,APassWord]));
       result:=CopyFile(PChar(STempFileName),PChar(AFileName),false);
       DeleteFile(STempFileName);
     except
       result:=false;
     end;
    end;
      

  3.   

    关键部分参考var
      Jet: OleVariant;
    begin
      //关闭Access数据连接,关闭文件
      try
        Jet := CreateOleObject('JRO.JetEngine');
        Jet .CompactDatabase('压缩前.mdb', '压缩后.mdb');
      finally
        Jet := Unassigned;
      end;