Announcement

Collapse
No announcement yet.

Dokument mit LZip packen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Dokument mit LZip packen

    Hallo,<P>
    ich möchte den Inhalt eines Olecontainers vor dem Speichern am SQL Server mittels ZLib packen. <BR>Leider komme ich mit den Funktionalitäten von ZLib nicht ganz klar. <BR>
    Kann mir jemand auf die Sprünge helfen ?<BR> Ein kleines Beispiel für die Komprimierung und die Dekomprimierung wäre prima.<P>
    Besten Dank <BR>
    Volker

  • #2
    Hallo,<br>such mal hier im Forum nach TCompressionStrea

    Comment


    • #3
      Hallo,<P>

      ich habe im Umgang mit ZLib folgendes Problem.<BR>
      Mit nachfolgender Funktion soll ein Worddokument aus dem Ole-Container<BR>
      in einer Serverdatenbank gespeichert werden. Die Funktion arbeitet anstandslos, wenn ich auf die Zip-Funktion verzichte.<BR>
      Das Problem besteht darin, daß der Ausgabestream offensichtlich immer leer ist.<BR>
      Kann es sein, daß ZLib Probleme mit ADOBlobStreams hat ??<P>

      Arbeite mit Delphi 5 und ZLIB 1.1.4<P>

      Danke<BR>
      Volker<P>
      *****************<P>
      function TSchriftwechselForm.OleDocumentWrite(const cSNR: string):Byte;<BR>
      var OutStream : TMemoryStream;<BR>
      InStream: TStream;<BR>
      CompressStream :TZCompressionStream;<BR>
      begin<BR>

      Result:=1;<BR>

      // wenn Olecontainer Dokument enthält, dann schreiben<BR>
      if OleContainerWord.State <> osEmpty then<BR>
      begin<BR>
      try<BR>
      try<BR>
      //ImportStream anlegen<BR>
      InStream:= TMemoryStream.Create;<BR>
      // Daten des OleContainers übergeben<BR>
      OleContainerWord.SaveToStream(InStream);<BR>
      //Länge des gelesenen Streams anzeigen <BR>
      MessageDlg(IntToStr(InStream.Size), mtInformation,
      [mbOK],0);<P>
      // bis hier alles i.O. Stringlänge größer 0 <P>

      try<BR>
      //Ausgabestream generieren<BR>
      OutStream:= TMemoryStream.Create;<BR>

      try<BR>
      //Komprimierungsstring anlegen<BR>
      CompressStream:=TZCompressionStream.Create(OutStre am);<BR>
      //Übernahme des komprimierten Streams<BR>
      CompressStream.CopyFrom(InStream, 0);<BR>
      //Länge des komprimierten Streams anzeigen<BR>
      MessageDlg(IntToStr(OutStream.Size), mtInformation,[mbOK],0);<P>
      // hier liegt das Problem Länge ist 0 <P>

      // Update des vorhandenen Datensatzes in der Datenbank<BR>
      if not lNeu then<BR>
      begin<BR>
      // Daten Speichern<BR>
      ADODokumentUpdate.Parameters[0].Value:= FormatKurzNummer(cSW_ID,2);<BR>
      ADODokumentUpdate.Parameters[1].LoadFromStream(OutStream, ftBlob);<BR>
      try<BR>
      ADODokumentUpdate.ExecProc;<BR>
      Result:=0;<BR>
      except<BR>
      Result:=1;<BR>
      end;<BR>
      end;<P>

      // Neuanlage des Datensatzes in der Datenbank<BR>
      if lNeu then<BR>
      begin<BR>
      // Daten Speichern<BR>
      ADODokumentInsert.Parameters[0].Value:= FormatKurzNummer(cSW_ID,2);<BR>
      ADODokumentInsert.Parameters[1].LoadFromStream<BR>(OutStream, ftBlob);<BR>

      try<BR>
      ADODokumentInsert.ExecProc;<BR>
      Result:=0;<BR>
      except<BR>
      Result:=1;<BR>
      end;<BR>
      end;<BR>

      finally<BR>
      CompressStream.Free;<BR>
      end;<BR>
      finally<BR>
      OutStream.Free;<BR>
      end;<BR>
      finally<BR>
      InStream.Free;<BR>
      end;<BR>

      // Alles in Ordnung<BR>
      Result:=0;<BR>

      except<BR>
      MessageBeep(MB_ICONHAND);<BR>
      MessageDlg('Fehler beim Schreiben des Dokumentes !',
      mtError,[mbOK],0);<BR>
      Result:=2;<BR>
      end;<BR>
      end;<BR>
      end;<BR&gt

      Comment

      Working...
      X