access数据库的压缩,我可以直接调用access里面的那个应用程序吗??请赐教!,谢谢啊

解决方案 »

  1.   

    function TfrmMain.CompactAndRepair(sOldMDB, sNewMDB, psw: string;
      password: boolean): Boolean;
    const
      sProvider='Provider=Microsoft.Jet.OLEDB.4.0;';
    var
      oJetEng:JetEngine;
    begin
      if password then
        sOldMDB:=sProvider+'Data Source='+sOldMDB+';jet oledb:database password="'+psw+'"'
      else
        sOldMDB:=sProvider+'Data Source='+sOldMDB;  if password then
         sNewMDB:=sProvider+'Data Source='+sNewMDB+';jet oledb:database password="'+psw+'"'
      else
         sNewMDB:=sProvider+'Data Source='+sNewMDB;
      try
        oJetEng:=CoJetEngine.Create;
        oJetEng.CompactDatabase(sOldMDB, sNewMDB);
        oJetEng:=Nil;
        Result:=True;
      except
        oJetEng:=Nil;
        Result:=False;
      end;end;
      

  2.   

    function TFrmMain.CompactDatabase(const AFileName,
      APassWord: string): Boolean;
    const
      SConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;'
        + 'Jet OLEDB:Database Password=%s;';
    var
      SPath: string;
      SFile: array[0..254] of Char;
      STempFileName: string;
      JE: OleVariant;  function GetTempDir: string;
      var
        Buffer: array[0..MAX_PATH] of Char;
      begin
        ZeroMemory(@Buffer, MAX_PATH);
        GetTempPath(MAX_PATH, Buffer);
        Result := IncludeTrailingBackslash(StrPas(Buffer));
      end;begin
      Result := False;
      SPath := GetTempDir; //取得Windows的Temp路径
      GetTempFileName(PChar(SPath), '~ACP', 0, SFile); //取得Temp文件名,Windows将自动建立0字节文件
      STempFileName := SFile; //PChar->String
      if not DeleteFile(STempFileName) then Exit; //删除Windows建立的0字节文件
      try
        JE := CreateOleObject('JRO.JetEngine'); //建立OLE对象,函数结束OLE对象超过作用域自动释放
        OleCheck(JE.CompactDatabase(Format(SConnectionString, [AFileName, APassWord]),
          Format(SConnectionString, [STempFileName, APassWord]))); //压缩数据库
        //复制并覆盖源数据库文件,如果复制失败则函数返回假,压缩成功但没有到函数的功能
        Result := CopyFile(PChar(STempFileName), PChar(AFileName), False);
        DeleteFile(STempFileName); //删除临时文件
      except
        //压缩失败
      end;
    end;
      

  3.   

    ACCESS技巧集
    作者:ysai
    转载请保持文章完整并标明出处1.DELPHI中操作ACCESS数据库(建立.mdb文件,压缩数据库)
    以下代码在WIN2K,D6,MDAC2.6下测试通过,
    编译好的程序在WIN98第二版无ACCESS环境下运行成功.
    //声明连接字符串
    Const
     SConnectionString       = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;'
                                   +'Jet OLEDB:Database Password=%s;';//=============================================================================
    // Procedure: GetTempPathFileName
    // Author   : ysai
    // Date     : 2003-01-27
    // Arguments: (None)
    // Result   : string
    //=============================================================================
    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;//=============================================================================
    // Procedure: CreateAccessFile
    // Author   : ysai
    // Date     : 2003-01-27
    // Arguments: FileName:String;PassWord:string=''
    // Result   : boolean
    //=============================================================================
    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;//=============================================================================
    // Procedure: CompactDatabase
    // Author   : ysai
    // Date     : 2003-01-27
    // Arguments: AFileName,APassWord:string
    // Result   : boolean
    //=============================================================================
    function CompactDatabase(AFileName,APassWord:string):boolean;
    //压缩与修复数据库,覆盖源文件
    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;