uses
   Classes,SysUtils,VCLUnZip,VCLZip,EncdDecd,Forms,ComCtrls,Dialogs, DBAccess, MSAccess, MemDS;Function EnCodeMarc(MarcStr:String):String;  //Marc编码
var
  Mem,Mem1:TMemoryStream;
  VCLZip:TVCLZip;
  s:String;
  Size:Integer;
begin
  Result:='';
  if Trim(MarcStr)='' then
  begin
    Exit;
  end;
  Mem:=TMemoryStream.Create;
  Mem1:=TMemoryStream.Create;
  VCLZip:=TVCLZip.Create(nil);
  try
    Mem.WriteBuffer(Pointer(MarcStr)^, Length(MarcStr));
    Mem.Position:=0;
    VCLZip.Password:=PASS;
    VCLZip.ArchiveStream:=Mem1;
    VCLZip.ZipFromStream(Mem,PASS);
    Mem1.Position:=0;
    Size := Mem1.Size;
    SetString(S, nil, Size);
    Mem1.Read(Pointer(S)^, Size);
    Result:=EncodeString(s);
  finally
    Mem.Free;
    Mem1.Free;
    VCLZip.Free;
  end;
end;Function DeCodeMarc(MarcStr:String):String;  //Marc解码
var
  Mem,Mem1:TMemoryStream;
  VCLUnZip:TVCLUnZip;
  s:String;
  Size:Integer;
begin
  Result:='';
  if Trim(MarcStr)='' then
  begin
    Exit;
  end;
  s:=DecodeString(MarcStr);
  Mem:=TMemoryStream.Create;
  Mem1:=TMemoryStream.Create;
  VCLUnZip:=TVCLUnZip.Create(nil);
  try
    Mem.WriteBuffer(Pointer(s)^, Length(s));
    Mem.Position:=0;
    VCLUnZip.Password:=PASS;
    VCLUnZip.ArchiveStream:=Mem;
    VCLUnZip.UnZipToStream(Mem1,PASS);
    Mem1.Position:=0;
    Size := Mem1.Size;
    SetString(S, nil, Size);
    Mem1.Read(Pointer(S)^, Size);
    Result:=s;
  finally
    Mem.Free;
    Mem1.Free;
    VCLUnZip.Free;
  end;
end;end.