STG_E_FILENOTFOUND = HRESULT($80030002);
  {$EXTERNALSYM STG_E_FILENOTFOUND}
此错误代码代表文件未找到。另外再验证一下所用文件是否已在机器上被注册为一个对象。我在试验时,先在设计时由文件创建了一个对象,然后又由代码创建,没问题。
unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, OleCtnrs;type
  TForm1 = class(TForm)
    OleContainer1: TOleContainer;
    OleContainer2: TOleContainer;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
begin
OleContainer2.CreateObjectFromFile('c:\jing\电子讲稿.ppt',false);
end;end.

解决方案 »

  1.   

    929:您的回答很有道理,非常感谢!我是Delphi的初学者,我在程序中首先创建了一个文件,然后企图将其嵌入到TOleContainer组件中,出了错误。如您所说,我在运行期创建的文件,该怎样又在运行期将其在机器上注册为一个对象?能否请您教教我这个Delphi
    的新手,非常感谢!
      

  2.   

    在程序中嵌入对象或链接对象不是很容易的,因为一个对象的显示编辑,都需要一个与之联系的服务器程序(OLE SERVER)来完成,TOLECONTAINER只是一个包含对象的容器,它本身不具备显示编辑对象的能力。想在程序中运用OLE,我想可以做一个能够处理这种文件的SERVER程序出来,并且注册。这时在程序中生成文件就可以当做对象进行处理了
      

  3.   

    929:很抱歉,现在才回复您的帖子。我所遇到的问题是这样的,我想在我的程序中用TOleContainer嵌入一个Word文档对象,可以将数据库的某一Text字段的内容在其中编辑,并可将其编辑后的结果再存回数据库当中。因为我不能直接将Ole对象直接存入数据库中,所以我想用临时文件的形式来中介,先将数据库中该字段的内容存入一个新建的临时文件(该文件是我用FileCreate函数创建的,后缀为 .doc),再将该文件嵌入到TOleContainer中编辑,完成后保存。然后,再从该文件中读取内容存入到数据库的Text字段中。我不知我的这种想法是否可行,能否请您在百忙中给予我帮助,我非常感谢您的热心!谢谢!
      

  4.   

    对于TOLECONTAINER,有方法:
    procedure LoadFromStream(Stream: TStream);
    procedure SaveToStream(Stream: TStream);
    对于TBLOBFIELD,也有方法:
    procedure LoadFromStream(Stream: TStream);
    procedure SaveToStream(Stream: TStream);比如:
    由BLOB中得到字段所存内容后,可将其转为流
    var  MS: TMemoryStream;
    begin
      MS := TMemoryStream.Create;
      try
        Query1Images.SaveToStream(MS);
        Image1.Picture.Bitmap.LoadFromStream(MS);
      finally
        MS.Free;
      end;end;
    也可从文件或由TOLECONTAINER的SAVETOSTREAM来产生流,然后由TBLOBFIELD读入
    var  FS: TFileStream;
    begin
      if not (Query1.State in [dsInsert, dsEdit]) then Query1.Insert;
      FS := TFileStream.Create('c:\Windows\Winlogo.bmp', fmOpenRead);
      try
        Query1Images.LoadFromStream(FS);
      finally
        FS.Free;
      end;
      Query1.Post;end;
      

  5.   

    929:你说的这几种方法我都试过,实现的不是太好。但现在我已经解决了这个问题,我是先用CreateOleObject函数创建Word对象,将数据库中的相应内容用String变量通过对象的Insert方法传递到Word对象中,再用SaveAs方法保存到一个Word的Doc文件中,以后在OLE容器中就可以用CreateObjectFromFile创建该文件的Ole对象了。