另外问个问题:同样我在设计的时候已经在ole中Insert了Word文档对象,
现在我打开一个文档,以下方法有什么不同OleContainer1.CreateObjectFromFile('c:\XXX.doc',false);

OleContainer1.LoadFromFile('c:\XXX.doc');
不同之处是什么? 后面的方法总是出错:磁盘读取操作错误! 怎么使用
OleContainer1.LoadFromFile('c:\XXX.doc',false);?

解决方案 »

  1.   

    忘记了交代一下
    我现在是做成一个ocx(用ActiveForm,以上代码做为一个控件的方法调用)
    才出现上面的问题,如果是写成一个Application直接运行,则结果又是正确的————能嵌入到oleContainer中,何故?急求解!
      

  2.   

    你的问题太高深,CSDN无人能答,不过没关系,我替你UP先
      

  3.   

    当然可以了!
    做办公自动化公文管理,需要把一个Word嵌入到Web中,我用Delphi的ActiveForm做个控件:一个OleContainer,其内嵌入一个Word,然后我在ASP(.Net)调用的时候要把一个数据库字段的内容读取出来显示在Word中,当然编辑后还要把她保存回原来的字段中。因为某些特殊原因,我把操作数据表的操作全部封装在此控件内(其实是个不合理的设计)——通过在接口中的两个方法GetData 与SaveData .另外,我也需要通过Word对象来做一些VBA编程控制,比如,保留笔迹,是否只读,文档合并等操作……说远了,我还是把代码贴出来吧:
    var tAbs:TADOBlobStream; try
       //取出tABS的代码省略     tAbs.position:=0;
         OleContainer1.LoadFromStream(tAbs);
        OleContainer1.doVerb(ovShow);//显示文档
    finally
         tAbs.Free ;
      end;   WordApp.Connect;//WordApp为一个Server中的WordApplication对象
       WordDoc.ConnectTo(WordApp.ActiveDocument);//WordDoc为一个Server中的WordDocument对象//以下为对word控制
     
       WordApp.UserName:=UserName;
    //控制笔迹
       WordDoc.ShowRevisions:=IsShowRevisions;      WordDoc.TrackRevisions:=IsTrackRevisions ;
       WordDoc.PrintRevisions:=false;//打印时不能打印出笔迹的!
        ……………………
      

  4.   


      以上为Getdata的部分代码,其中省略从数据表中取出数据赋给tABS的代码,当此控件在Delphi,VB,C#等中调用时,执行Getdata能正确达到我预期效果————取出tAbs的内容显示在被嵌入到Form的Word中,但是当我在web中调用时,总是出现一个新的Word而不是在oleContainer中打开…… 另外,当我在个控件在web中调用后,关闭此web页面后在进入时,切不能在使用了,总是提示此控件的内存地址有关的错误…… 我已经在web的unLoad中调用了一个控件的FreeObject方法,在其中有如下代码():     WordDoc.Close ;
         WordApp.Quit ;
    //     WordApp.Free ;
         oleContainer1.Close ;
      //   oleContainer1.destroyobject
    "//"的语句加上也是同样的结果,包括oleContainer1.free等语句 应该是没释放对象的原因吧,怎么处理呢?
      

  5.   

    我也是OleContainer1.OldStreamFormat:=true;
         OleContainer1.LoadFromFile(path);
    先在OLE中嵌入WORD,
    这样使用的,现在还没出现问题,不知道你的BUTTONCLICK是怎么写的。。
    另外,我有个问题,就是怎么把嵌入的WORD的打印功能给屏蔽?
      

  6.   

    答案有点奇怪:当我存入的是一个空白doc文档取出打开时,就出现以上错误,但如果不是空白.DOC文档,一切ok! 这个问题就这样解决了,真是奇怪!大家来帮忙这个问题吧:…………
    当我在个控件在web中调用后,关闭此web页面后在进入时,切不能再使用了,总是提示此控件的内存地址有关的错误…… 我已经在web的unLoad中调用了一个控件的FreeObject方法,在其中有如下代码():     WordDoc.Close ;
         WordApp.Quit ;
    //     WordApp.Free ;
         oleContainer1.Close ;
      //   oleContainer1.destroyobject
    "//"的语句加上也是同样的结果,包括oleContainer1.free等语句
     应该是没释放对象的原因吧,怎么处理呢?但是,如果我不关闭有此控件的Web而直接在打开一个(或多个),运行正常,只有当关闭一个有此控件的web后再打开时才出现错误! 真的很急!!
      

  7.   

    问一下,你能把那段保存.doc的代码给我看看哇?我怎么就搞不定阿。
    你帮我看看也可以。
    如果想要源程序的话,可以到ftp://qqpp.myip.org下载(不一定经常开)。procedure TForm1.Button2Click(Sender: TObject);
    var
      MemSize: Integer;
      Buffer: PChar;
      MyFile: TFileStream;
      Stream: TBlobStream;
      filename:string;
    begin
      OpenDialog1.Filter:='WORD文档(*.DOC)|*.DOC';
      if OpenDialog1.Execute then
      begin
        filename:=OpenDialog1.FileName;
        MyFile:=TFileStream.Create(fileName,fmOpenRead);
        with table1 do
        begin
          Open;insert;
         // edit;
          Stream := TBlobStream.Create(FieldByName('Doc') as TBlobField, bmWrite);{‘Doc’为BLOB字段名}
          MemSize := MyFile.Size;
          Inc(MemSize);
          //增加的一字节给结尾的null
          Buffer := AllocMem(MemSize);
          try
            Stream.Seek(0, soFromBeginning);
           //流指针位置放到最前
            MyFile.Read(Buffer^,MemSize);
            Stream.Write(Buffer^,MemSize);
            FieldByName('Name').Asstring:=ExtractFileName(fileName);
            FieldByName('Size').Asstring:=inttostr(MemSize-1);
            statictext1.caption:='文件名:'+ExtractFileName(fileName);
            statictext2.caption:='文件大小:'+inttostr(Memsize-1)+'字节';
         finally
            MyFile.Free;
            Stream.Free;
         end;
           try
            Post;
           except
             showmessage('保存失败!');
             halt;
           end;
             showmessage('保存成功,正在加载文档!');
             Doc_ole.CreateObjectFromFile(fileName,False);
             Doc_ole.Run;
         end;
       end;
    end;
    提示保存成功,可是程序关闭后重新启动,原先的数据就没了。不知道什么原因,请路过的高手赏个脸吧~~~~~~~~~~~~~~~~
      

  8.   

    to: 20011007(大内米探) 
    好象要image(sqlserver )或blob类型(Oracle)类型很简单的代码
      OleStream : TMemoryStream;
     OleContainer1.SaveToStream(OleStream);
        OleStream.Position := 0; //找回零点
         Tblobfield(FieldByName('Content')).LoadFromStream(OleStream);
     Post;
                    UpdateBatch   //缓冲模式
      

  9.   

    我是一个新手,这段代码我也看的朦朦胧胧的。反正我PARADOX,sql都试过了。
    提示保存成功,但是实际上并没有保存到数据库。应用程序一退出,DOC就丢了。
    要不麻烦你帮我写一个完整简单的保存、导出DOC的程序好哇?我的信箱是
    [email protected]
      

  10.   

    对于控件在web上关闭出错的问题。
    可能是你的控件的线程模型没有设置对,我以前写过一个控件,
    出现的问题和你的差不多。
    我把线程模型改为single就搞定了。没有仔细研究
    你可以试试看。
    我也想做delphi控制word的工作,和你的性质差不多
    多交流。
    我的电子邮件 [email protected]