关于access数据库压缩!用delphi代码怎么实现啊??急

解决方案 »

  1.   

    var
     dbengine: variant;
    begin 
        dbengine := createoleobject('JRO.JetEngine');
        dbengine.CompactDataBase('Data Source=c:\1.mdb', 'Data Source=c:\2.mdb;Jet OLEDB:Engine Type=5');
    end;
      

  2.   

    procedure Tinfile.CompressFile(sSourceFile, sZipFile: string);
    var
      CompressLevel: TCompressionLevel;
      SourceFileStream: TFileStream;
      CompressStream: TCompressionStream;
      MemStream,DestMemStream: TMemoryStream;
      Buffer: PChar;
      Count,MemSize: Longint;
    begin
      CompressLevel:= clDefault;
      try
        SourceFileStream := TFileStream.Create(sSourceFile, fmOpenRead); //打开源文件
        Count := SourceFileStream.size;                                  //读出源文件大小
        GetMem(Buffer, Count);    MemStream := TMemoryStream.Create;
        DestMemStream := TMemoryStream.Create;
        CompressStream := TCompressionStream.Create(CompressLevel, DestMemStream);
        try
          SourceFileStream.ReadBuffer(Buffer^, Count);       //将源文件内容读到Buffer中
          MemStream.WriteBuffer(Buffer^, Count);             //将Buffer内容读到MemStream中
          MemSize := MemStream.Size;                         //记录原始文件尺寸
          MemStream.SaveToStream(CompressStream);            //将MemStream内容压缩保存在DestMemStream中
          CompressStream.Free;
          MemStream.Clear;                                   //清空MemStream内容
          MemStream.WriteBuffer(MemSize, SizeOf(MemSize));   //写入原始文件尺寸
          MemStream.CopyFrom(DestMemStream, 0);              //将压缩过的文件流DestMemStream内容拷贝到MemStream中
          MemStream.SaveToFile(sZipFile);                    //将MemStream内容写到文件
          showmessage('successful!')
          //result := true;
        finally
          FreeMem(Buffer);
          MemStream.Free;
          DestMemStream.Free;
          SourceFileStream.Free;
        end;
      except
          showmessage('failed!')
        //result := false;
      end;
    end;procedure Tinfile.UnCompressFile(sZipFile, sUnZipFile: String);
    var
      ZipStream: TFileStream;
      MemStream: TMemoryStream;
      DecompressStream: TDecompressionStream;
      Buffer: PChar;
      Count: Longint;
    begin
      try
        ZipStream := TFileStream.Create(sZipFile, fmOpenRead); //打开压缩文件
        ZipStream.ReadBuffer(Count, SizeOf(Count));            //将压缩文件的原始尺寸读到Count中
        GetMem(Buffer, Count);                                 //根据文件的原始尺寸大小给Buffer分配空间    MemStream := TMemoryStream.Create;
        DecompressStream := TDecompressionStream.Create(ZipStream);
        try
          DecompressStream.ReadBuffer(Buffer^, Count);         //将文件解压缩到Buffer中
          MemStream.WriteBuffer(Buffer^, Count);               //将Buffer内容写到MemStream中
          MemStream.SaveToFile(sUnZipFile);                    //将MemStream写到文件
         // result := true;
         // showmessage('successful');
        finally
          FreeMem(Buffer);
          DecompressStream.Free;
          MemStream.Free;
          ZipStream.Free;
        end;
      except
        //result := false;
        showmessage('failed');
      end;
    end;
      

  3.   

    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;