//fBody 为image类型字段
var
  olest: TStream;
begin
  with QrAll do
  begin
  open;
  olest:= CreateBlobStream(FieldByName('fbody'),bmread);
  try
  self.OleContainer1.LoadFromStream(olest);
  self.OleContainer1.DoVerb(1);
  finally
  olest.Free;
  end;
  end;
end;提示说:无效的流格式(Invalid stream format)这是咋回事呢??大家帮帮忙

解决方案 »

  1.   

    try
      olest.Position := 0;
      self.OleContainer1.LoadFromStream(olest);
      

  2.   

    为什么不用servers面板里面的组件呢?
    挺好用的.
      

  3.   

    Superyys老兄,我想不存一份临时文件,直接用流来操作,感觉好些:)用那些组件,感觉慢。
      

  4.   

    问题也许是出在你保存的环节上,你保存的时候就错了,结果就全错了
    建议你用
    TBlobField(adoQuery1.FieldByName('insertpic')).savetostream(ms);保存
    TBlobField(adoQuery1.FieldByName('insertpic')).loadfromstream(stream);打开
      

  5.   

    保存的时候应该没错,我试过存成word文件,手工打开一点问题没有。简言之:让OleContainer从流中显示文档时总是出错。各位可以试试,如果没问题给我代码看看:)先谢拉
      

  6.   

    同意 godnoloveihavelove(快感) 兄的观点,你保存流到数据库的时候的格式不对,可以先保存为临时文件,若读时的stream带ole控制信息,则保存时要选olefile.saveasfile(filename);否则应选 olefile.saveasdocument(filename),然后再保存流到数据库中,这样应该可以解决吧。
      

  7.   

    明白了,我操存时用的是
    var
      olestream: tstream;
      fstream: tfilestream;
    begin
      with QrAll do
        begin
          Edit;
          Append;
          fieldbyname('fid').AsString := formatdatetime('yyyymmddhhmmss',now);
          fieldbyname('ftitle').AsString := edit1.Text;
          fieldbyname('fpath').AsString := self.Edit2.Text;
          fieldbyname('fkeyword').AsString := self.Edit3.Text;
          try
            olestream := createblobstream(fieldbyname('fbody'),bmreadwrite);
            olestream.CopyFrom(fstream,fstream.Size);
            fieldbyname('fmemo').AsString := self.Memo1.Text;
          finally
            olestream.Free;
          end;
        finally
          qrall.post;
          fstream.Free;
        end;
      end;
    end;