现在可以把内容倒入到数据库,但是我也想把doc的格式也保存下来放入数据库,譬如(字体,字体颜色,)等。请各位指导,最好有代码,谢谢

解决方案 »

  1.   

    如果是SQL SERVER数据库,用IMAGE字段//保存:
    var
      MemStream: TMemoryStream;
      I: integer;
    begin
      if OpenDialog1.Execute then
      begin
        if not FileExists(OpenDialog1.FileName) then
        begin
          Application.MessageBox('您所添加的文件不存在!', '提示', MB_ICONINFORMATION);
          Exit;
        end;
        for I := 0 to OpenDialog1.Files.Count - 1 do     //添加文件
        begin
          MemStream := TMemoryStream.Create;              //创建流
          try
            MemStream.LoadFromFile(OpenDialog1.Files[I]);  //将文件读到流中去
            MemStream.Seek(0, soFromBeginning);
            Compress(MemStream);                 //压缩文件
            MemStream.Seek(0, soFromBeginning);
            with ADOQuery do
            begin
              Append;
              FieldByName('文件名').AsString := ChangeFileExt(ExtractFileName(OpenPictureDialog1.Files[I]), '');
              TBlobField(FieldByName('文档正文')).LoadFromStream(MemStream);
              FieldByName('文件扩展名').AsString := ExtractFileExt(OpenPictureDialog1.Files[I]);
              ADOQuery.Post;
            end;
          finally
            MemStream.Free;
          end;
        end;
      end;
    end;procedure Compress(var CompressedStream: TMemoryStream);
    var
      SourceStream: TCompressionStream;
      DestStream: TMemoryStream;
      Count: Integer;
    Begin
      Count := CompressedStream.Size;
      DestStream := TMemoryStream.Create;
      SourceStream:=TCompressionStream.Create(clMax, DestStream);
      Try
        CompressedStream.SaveToStream(SourceStream);
        SourceStream.Free;
        CompressedStream.Clear;
        CompressedStream.WriteBuffer(Count, SizeOf(Count));
        CompressedStream.CopyFrom(DestStream, 0);
      finally
        DestStream.Free;
      end;
    end;//导出
    var
      MemStream: TMemoryStream;
      FileName: string;
    begin
      if SaveDialog.Execute then
      begin
        MemStream := TMemoryStream.Create;
        try
          TBlobField(ADOQuery.FieldByName('文档正文')).SaveToStream(MemStream);
          MemStream.Seek(0, soFromBeginning);
          UnCompress(MemStream);        //解压数据
          MemStream.Seek(0, soFromBeginning);
          FileName := SaveDialog.FileName;
          if ExtractFileExt(FileName) = '' then
            FileName := FileName + Trim(ADOQuery.FieldByName('文件扩展名').AsString);
          if FileExists(FileName) then
          begin
            if Application.MessageBox('该文件名已存在,是否替换原有文件?', '提示', MB_YESNO + MB_ICONQUESTION) = idyes then
            begin
              MemStream.SaveToFile(FileName);
              Application.MessageBox('导出成功!', '提示', MB_OK);
            end;
          end
          else
          begin
            MemStream.SaveToFile(FileName);
            Application.MessageBox('导出成功!', '提示', MB_OK);
          end;
        finally
          MemStream.Free;
        end;
      end;
    end;procedure UnCompress(const CompressedStream: TMemoryStream);
    var
      SourceStream: TDecompressionStream;
      DestStream: TMemoryStream;
      Buffer: PChar;
      Count: integer;
    Begin
      CompressedStream.Seek(0,soFromBeginning);
      CompressedStream.ReadBuffer(Count, SizeOf(Count));
      GetMem(Buffer, Count);
      DestStream := TMemoryStream.Create;
      SourceStream := TDecompressionStream.Create(CompressedStream);
      Try
        SourceStream.ReadBuffer(Buffer^, Count);
        DestStream.WriteBuffer(Buffer^, Count);
        DestStream.Position := 0;
        CompressedStream.LoadFromStream(DestStream);
      finally
        FreeMem(Buffer);
        DestStream.Free;
      end;
    end;
    //可能要稍稍修改一下
      

  2.   

    这段代码是不能保存word文档的原有格式吧(譬如字体颜色)