var memsize:integer;
    buffer:pchar;
    myfile:Tfilestream;
    stream:Tblobstream;
    myfilename:string;
    mystream:Tstream;
begin
   myfilename:='d:\11.doc';
   self.OleContainer1.SaveAsDocument(myfilename);
    myfile:=Tfilestream.Create(myfilename,fmcreate); 为什么有了这一句存的文件就是空的了  mystream:=Tstream.Create;
  OleContainer1.SaveToStream(mystream);
 这个有什么错误阿 提示 abstract error self.ADOQuery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('insert into w_table(w_word)');
adoquery1.SQL.Add('values(:w_word)');
adoquery1.parameters.ParamByName('w_word').LoadFromStream(stream,ftblob);
adoquery1.ExecSQL; 
end;

解决方案 »

  1.   

    没人阿,呜呜呜,怎么知道 OleContainer1 这个连接的是word,还是excl 阿
      

  2.   

    我这里有一些解决办法,你看看
    procedure TsampleForm.OpenDOCClick(Sender: TObject);
    var
      MemSize: Integer;
      Buffer: PChar;
      MyFile: TFileStream;
      Stream: TBlobStream;
    begin
      OpenDialog1.Filter:='WORD文档(*.DOC)|*.DOC'
    ;{从对话窗选择文件}
      if OpenDialog1.Execute then begin
        MyFile:=TFileStream.Create
    (OpenDialog1.FileName,fmOpenRead);
        with table1 do   {‘table1’为含BLOB字段的表名}
        begin
          Open;
          Edit;
          Stream := TBlobStream.Create(FieldByName('Doc')
     as TBlobField, bmWrite);
          {‘Doc’为BLOB字段名} 
          MemSize := MyFile.Size;
          Inc(MemSize); {Make room for the
     buffer's null terminator.}
          Buffer := AllocMem(MemSize);    
     {Allocate the memory.}
          try
            Stream.Seek(0, soFromBeginning);
     {Seek 0 bytes from the stream's end point}
            MyFile.Read(Buffer^,MemSize);
            Stream.Write(Buffer^,MemSize);
          finally
            MyFile.Free;
            Stream.Free;
          end;
               try
                 Post;
               except
                 on E: EDatabaseError do
               if HandelException(E)< >0 then exit
             else
             raise;
               end;
         end;
            Doc_ole.CreateObjectFromFile
    (OpenDialog1.FileName,False);
            Doc_ole.Run;{Doc_ole为ToleContainer构件名}
       end;
    end;---- 以上为向数据库中写入的程序,应用中从对话窗取出文件在ToleContainer构件中显示的同时存入数据库。 procedure TsampleForm.GetDocClick
    (Sender: TObject);
    var
      MemSize: Integer;
      Buffer: PChar;
      MyFile: TFileStream;
      Stream: TBlobStream;
    begin
        MyFile:=TFileStream.Create('c:\temp.tmp',fmCreate);
        with Query1 do
        begin
          Stream := TBlobStream.Create
    (FieldByName('Doc') as TBlobField, bmRead);
          MemSize := Stream.Size;
          Inc(MemSize); 
    {Make room for the buffer's null terminator.}
          Buffer := AllocMem(MemSize);   
      {Allocate the memory.}
          try
            Stream.Read(Buffer^,MemSize);
            MyFile.Write(Buffer^,MemSize);
          finally
            MyFile.Free;
            Stream.Free;
          end;
        end;
          if FileExists('c:\temp.DOC') 
    then DeleteFile('c:\temp.DOC');
          if FileExists('c:\temp.tmp') 
    then begin
            RenameFile('c:\temp.tmp', 'c:\temp.DOC');
            Doc_ole.CreateObjectFromFile
    ('c:\temp.DOC',False);
            Doc_ole.Run;
          end;
    end;---- 以上程序为从数据库从将WORD文档取出,并放在temp.doc的临时文件上并在ToleContainer构件中显示。 ---- 在程序的其他部份应准确控制表记录指针,使WORD文档的存取发生在正确的记录位置。 
      

  3.   

    OleContainer1这个怎么打印阿,还有打印预览
      

  4.   

    //uses ActiveX;
    procedure TForm1.MenuPreviewClick(Sender: TObject);//这是在我自己的FILE菜单里
    var
      IOO: IOleInPlaceObject ;
    begin
      OleContainer1.DoVerb(ovShow);
      if OleContainer1.State in [osUIActive]  then
      begin
        OleContainer1.OleObjectInterface.QueryInterface(IOleInPlaceObject,IOO);
        IOO.UIDeactivate;
        IOO :=nil;
      end;
      OleContainer1.OleObject.PrintPreview;
      OleContainer1.DoVerb(ovShow);
      OleContainer1.Align := OleContainer1.Align;
    end;
      
      

  5.   

    Delphi与Word之间的融合技术 
    http://princed.mblogger.cn/posts/11880.aspx
      

  6.   

    myfilename:='d:\11.doc';
       self.OleContainer1.SaveAsDocument(myfilename);
    似乎你写错了哦,你在这里应该是打开一个文件
    我虽然没用DELPHI的OFFICE
    控件开发过,但是我在DELPHI中直接用OLE调用VBA 的命令所以对OFFICE 的开发有点了解
      

  7.   

    搞不明白你的那句是什么意思,有什么作用?????/》???
    self.OleContainer1.SaveAsDocument(myfilename);
      

  8.   

    myfilename:='d:\11.doc';
       self.OleContainer1.SaveAsDocument(myfilename);
        myfile:=Tfilestream.Create(myfilename,fmcreate); 为什么有了这一句存的文件就是
    我做了测试,因为的OleContainer1里没有任何的内容,
    我想你还补台了解OLE的流程,你应该先self.OleContainer1.LoadFromFile()然后再
    self.OleContainer1.SaveAsDocument(myfilename);就不会有错误了
      

  9.   

    谢谢各位,我还想问一个,怎样在word上添加一个菜单。