1。请问如何实现用OleContainer打开一个doc文档?
2。请问如何实现用OleContainer打开一个数据库表中的一个二进制流的纪录?
每题可给300分。

解决方案 »

  1.   

    1.
    OleContainer1.CreateObjectFromFile('c:\net.doc',False);
      

  2.   

    在窗口放置控件wordapplication,worddocument,在SERVER组件里
    var filename:olevariant;
    begin
      try
      WordApplication1.Connect;
      except
      messagedlg('请检查是否安装了Word?',mterror,[mbok],0);
      abort;
      end;
      WordApplication1.Visible:=true;
      filename:=  ExtractFilePath(application.ExeName)+'test.doc';//路径根据你的实际情况,这里是和你的可执行文件放在一个目录
      WordApplication1.Documents.Open(filename,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
      wordapplication1.ActiveDocument;
    end;
      

  3.   

    2.
    我觉得OleContainer需要调用Ole接口才能实现其功能,ACCESS和SQL SERVER数据库都是可以z这样操作的,接口函数说明可以在OFFICE的安装盘中找到
      

  4.   

    OleContainer1.CreateObjectFromFile('c:\net.doc',False);
      

  5.   

    happy243(HH) ( )回答完全正确,给300分。
    zhengtao1980(丛人) 可以实现,但不符合题意,给50分。
    已经通过可用分捐赠给分了,请注意接收
    2题还没有答案。
      

  6.   

    3。请问用OleContainer打开一个doc文档之后,如何在OleContainer修改此文档并保存?(200分)
      

  7.   

    以sqlserver为例,其中“字段1”为image类型(存放文件),“字段2”为char类型(存放文件名)。单元引用加上shellapi。
    存入数据库:
      if not OpenDialog1.Execute then exit;
      table1.insert;
      (table1.FieldByName('字段1') as TBlobField).LoadFromFile(OpenDialog1.filename);
      table1.FieldByName('字段2').value:=OpenDialog1.filename;
      table1.post;
    打开文件:
      (table1.FieldByName('字段1') as TBlobField).savetoFile(table1.FieldByName('字段2').value);
      shellexecute(handle,nil,pchar(table1.FieldByName('字段2').value),nil,nil,sw_shownormal);如果是tquery需要配合tupdatesql使用,方法相同。
      

  8.   

    // 个通过 , 'doc' 的数据库中为image 类型
    // 不管是WORD,EXCLE,还中JPG的都能用unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, DB, ADODB, StdCtrls, shellapi,Buttons;type
      TForm1 = class(TForm)
        OpenDialog1: TOpenDialog;
        BitBtn1: TBitBtn;
        BitBtn2: TBitBtn;
        ADOConnection1: TADOConnection;
        ADOQuery1: TADOQuery;
        procedure BitBtn1Click(Sender: TObject);
        procedure BitBtn2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
       s:string;
    implementation{$R *.dfm}procedure TForm1.BitBtn1Click(Sender: TObject);begin
     if OpenDialog1.Execute then
      begin
        if not ADOQuery1.Active then ADOQuery1.Open;
        ADOQuery1.Append;
        s :=ExtractFileName(OpenDialog1.FileName);
        (ADOQuery1.FieldByName('doc') as TBlobField).LoadFromFile(OpenDialog1.filename);
         ADOQuery1.Post;end;
    end;procedure TForm1.BitBtn2Click(Sender: TObject);   begin
      (ADOQuery1.FieldByName('doc') as TBlobField).savetoFile(ExtractFileDir(Application.ExeName)+s);
      shellexecute(handle,nil,pchar(s),nil,nil,sw_shownormal);end;end.
      

  9.   

    boytomato(深爱一人叫颖的女孩!)
    你写的是做什么用的阿
      

  10.   

    // 个通过 , 'doc' 的数据库中为image 类型
    // 不管是WORD,EXCLE,还中JPG的都能用
    // 注意打开文件时一定要先定位(即要先写sql 查询确定有个再打开 ),要不然会出错,还有就是临时文件的删除。。
    // delphi 7+sql2000通过。。unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, DB, ADODB, StdCtrls, shellapi,Buttons, OleCtnrs;
    type
      TForm1 = class(TForm)
        ADOConnection1: TADOConnection;
        Button1: TButton;
        Button2: TButton;
        OpenDialog1: TOpenDialog;
        ADOQuery1: TADOQuery;
        OleContainer1: TOleContainer;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
       s:string;
    implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
     if OpenDialog1.Execute then
      begin
        if not ADOQuery1.Active then ADOQuery1.Open;
        ADOQuery1.Append;
        s :=ExtractFileName(OpenDialog1.FileName);
        (ADOQuery1.FieldByName('doc') as TBlobField).LoadFromFile(OpenDialog1.filename);
         ADOQuery1.Post;end;
    end;
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    (ADOQuery1.FieldByName('doc') as TBlobField).savetoFile(ExtractFileDir(Application.ExeName)+'\'+s);   olecontainer1.CreateObjectFromFile(ExtractFileDir(Application.ExeName)+'\'+s,false);
       olecontainer1.DoVerb(1);//  shellexecute(handle,nil,pchar(s),nil,nil,sw_shownormal);
       end;end.
      

  11.   

    >>2题还没有答案。五、从数据库读取文件到本地硬盘和从本地硬盘读取文件到数据库
    在数据库上使用Image二进制字段保存,使用Stream流的方式。
    创建文件流:
         Word_FileStream:=TFileStream.Create(Target_Name,fmOpenWrite or fmCreate);
         Word_FileStream.Position:=0;
    保存到数据库的Image字段:
         TBlobField(AdoQuery1.FieldByName(Column_Name)).SaveToStream(Word_FileStream);
    从数据库读取文件到本地硬盘:
         TBlobField(ADOQuery1.FieldByName(Column_Name)).loadfromStream(Word_FileStream);
    释放文件流:
         Word_FileStream.Free;配合 OleContainer1.LoadFromStream(); 就可>>3。请问用OleContainer打开一个doc文档之后,如何在OleContainer修改此文档并保存?
      

  12.   

    OpenDialog 控件载哪里能找到阿?
      

  13.   

    是个控件。。
    在 diglog 页。
      

  14.   

    to aiirii(ari-爱的眼睛)
    采用 OleContainer1.LoadFromStream() ,并不是我们想象的那样可以直接赋值给他一个Tstream 的对象,总是出错。
    请教: