起步软件技术论坛-X3

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: beidou

【结贴】OleContainer 问题,急~!!!**

[复制链接]
 楼主| 发表于 2007-10-23 14:02:32 | 显示全部楼层
运行监造简报的时候发生异常:Invalid stream format

类型:EOleError。

还是报错啊
lStream := DataSetBrokerAffix.DataSet.CreateBLOBSTREAM(DataSetBrokerAffix.DataSet.fieldbyname('FFile'),TBlobStreamMode.bmRead);
运行监造简报的时候发生异常:Invalid stream format
类型:EOleError。

procedure TMainForm.DataSetBrokerAffixAfterScroll(DataSet: TDataSet);
var lStream: TStream;
begin
  try
    lStream := TMemoryStream.Create;
    lStream := DataSetBrokerAffix.DataSet.CreateBLOBSTREAM(DataSetBrokerAffix.DataSet.fieldbyname('FFile'),TBlobStreamMode.bmRead);
    if lStream.Size = 0 then
    begin
        lStream.Free;
        Exit;
    end;
    OleContainer.CreateObject('word.document',true);
    Olecontainer.loadfromstream(lStream);
  finally
    lStream.free;
  end;
end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-23 14:03:44 | 显示全部楼层
你说的载入我就是这么写的(3楼),现在的问题是在读出的时候报错。。
回复 支持 反对

使用道具 举报

发表于 2007-10-23 15:31:42 | 显示全部楼层
CreateObjectFromFile  我这个是file,不是stream
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-23 15:43:07 | 显示全部楼层
不好意思我没明白你的意思。
这是载入的代码:
procedure TMainForm.ButtonUpClick(Sender: TObject);
var
  FN: String;
begin
  with OpenDialog do
    if Execute then
      begin
        UPData:=False;      //打开文件
        FN := ExtractFileName(FileName);
        OleContainer.CreateObjectFromFile(FileName, False);   //创建OLE对象
        OleContainer.SaveToFile('tmp');
        with DataSetBrokerAffix.DataSet do
        begin
          Append;
          FieldByName('FName').AsString := FN;
          FieldByName('FFileName').AsString := FN;
          FieldByName('FSourceFile').AsString := FN;
          TBlobField(FieldByName('FFile')).LoadFromFile('tmp');
          FieldByName('FFKID').AsInteger := IID;
          Post;
          ApplyUpdates;
        end;
        UPData:=true;
      end;
end;

这是显示的代码:
procedure TMainForm.DataSetBrokerAffixAfterScroll(DataSet: TDataSet);
var lStream: TStream;
begin
  try
    lStream := TMemoryStream.Create;
    lStream := DataSetBrokerAffix.DataSet.CreateBLOBSTREAM(DataSetBrokerAffix.DataSet.fieldbyname('FFile'),TBlobStreamMode.bmRead);
    if lStream.Size = 0 then
    begin
        lStream.Free;
        Exit;
    end;
    OleContainer.CreateObject('word.document',true);
    Olecontainer.loadfromstream(lStream);
  finally
    lStream.free;
  end;
end;

我现在报错在显示的代码报错:
运行监造简报的时候发生异常:Invalid stream format
类型:EOleError。

报错语句在:
lStream := DataSetBrokerAffix.DataSet.CreateBLOBSTREAM(DataSetBrokerAffix.DataSet.fieldbyname('FFile'),TBlobStreamMode.bmRead);


你看看我应该怎么改。。非常感谢。。十分感谢。。回来给你送锦旗表扬信~~~
回复 支持 反对

使用道具 举报

发表于 2007-10-23 15:51:06 | 显示全部楼层
解决的最好方法是先存临时文件。
然后用
olecontainer.CreateObjectFromFile(opendialog1.FileName,false); (这个我在delphi试验过,不报错)
显示你的文件。

询问多人,就和9楼说的一样,olecontainer不能载入标准的doc,他载入的东西其实在文件头加了信息。
所以直接流载入,就说无效的流。
回复 支持 反对

使用道具 举报

发表于 2007-11-1 09:31:29 | 显示全部楼层
楼主,问题解决了吗?
如果没有问题就结帖了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-6-29 14:08 , Processed in 0.041085 second(s), 14 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表