给你一个我曾经作过的例子:
{ System 面板中有OleContainer组件,可以通过它显示各种类型的文件,当然包括图形文件、
Word文件等。而用文件流(TFileStream)和Blob流(TBlobStream)可以将任何格式的文件
  保存到数据库中}
unit UWord;interfaceuses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls, Buttons, OleCtnrs, Db, DBTables;type
  TFrmWord = class(TForm)
    Panel1: TPanel;
    Doc_Ole: TOleContainer;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;
    Label1: TLabel;
    Label2: TLabel;
    OpenDialog1: TOpenDialog;
    Table1: TTable;
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  FrmWord: TFrmWord;implementation{$R *.DFM} {向数据库中写入OpenDialog1指定的Doc文文件,并在ToleContainer构件中显示出来,
  若出错,有相应的异常捕获}
procedure TFrmWord.BitBtn2Click(Sender: TObject);
var
MemSize : integer;
  Buffer : Pchar;
  MyFile : TFileStream;
  Stream : TBlobStream;
  FileName : string;
begin
OpenDialog1.Filter := 'WORD文档(*.DOC)|*.DOC';  //过滤,只显示DOC文件格式
  if OpenDialog1.Execute then
  begin
   FileName := OpenDialog1.FileName ;
    MyFile := TFileStream.Create(FileName,fmOpenRead);
    //以只读方式创建文件流,以后对流的读入也就是从文件读取数据
    with table1 do
    begin
     Open;
      Edit;
      //编辑数据库,这种方法会冲掉以前保存的数据,只允许保存一条记录,如保存多条记录,
      // 可以用Insert 或 Append方法.
      Stream := TBlobStream.Create(FieldByName('DOC') as TBlobField,bmWrite);
     // 以写入方式创建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);
       Label1.Caption := '文件名:'+ ExtractFileName(FileName);
       Label2.Caption := '文件大小:' + InttoStr(MemSize-1) + '字节';
     Finally
      MyFile.Free;
      Stream.Free;
     End;  // Try...Finally
     Try
      Table1.Post;
     Except
      ShowMessage('保存失败!');
        halt;
     End; // Try...Except
      ShowMessage('保存成功,正在加载文档!');
      //下面开始在Doc_Ole容器中显示Doc文件
      Doc_Ole.CreateObjectFromFile(FileName,False);
      Doc_Ole.Run;
    end; // with Table1 do
  end;
end; {从数据库中将Word文档取出,保存到建立的临时文件Temp.doc中,并将此文件在Doc_Ole容器中显示}
procedure TFrmWord.BitBtn1Click(Sender: TObject);
var
MemSize : integer;
  Buffer : Pchar;
  MyFile : TFileStream;
  Stream : TBlobStream;
begin
  MyFile:= TFileStream.Create('c:\temp.tmp',fmCreate);
  //以快捷方式建立文件流
  with table1 do
  begin
   Open;
    Stream := TBlobStream.Create(FieldbyName('Doc') as TBlobFIELD,BMRead);
    //以只读方式建立Blob流
    MemSize := Stream.Size;
    Inc(MemSize);
    Buffer := AllocMem(MemSize);
    Try
     Stream.Read(Buffer^,MemSize);
      MyFile.Write(Buffer^,MemSize);
      Label1.Caption := '文件名:'+ FieldByName('Name').Asstring;
       Label2.Caption := '文件大小:' + FieldByName('Size').Asstring + '字节';
    Finally
     MyFile.Free;
      Stream.Free;
    End; // Try...Finally
  end; // with table1 do
  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容器中显示从数据库中取出的DOC文件
      Doc_Ole.CreateObjectFromFile('c:\temp.DOC',False);
      Doc_Ole.Run;
    end;
end;procedure TFrmWord.BitBtn3Click(Sender: TObject);
begin
//清除Doc_Ole中显示的Doc文件
  Doc_Ole.CleanupInstance;
  Doc_Ole.Refresh;
  Label1.Caption := '';
  Label2.Caption := '';
end;procedure TFrmWord.FormCreate(Sender: TObject);
begin
Table1.DatabaseName := 'Word文档\';
  Table1.TableName := 'Doc_Ole';
end;end.