Word文档数据的存取机制

解决方案 »

  1.   

    用ACTIVEX的方法(CreateObject)比较简单吧?
      

  2.   

    要用到SERVERS页里
        WORDAPPLICATION
        WORDDOCUMENT
    两个控件.
      

  3.   

    不用那些控件也很好用啊,可以参考一下前面关于EXCEL的帖子
      

  4.   

    这里有我的一个单元,可以参考
    unit Uzdgcgl;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, DB, DBClient, MConnect, SConnect, Grids, DBGridEh, ComCtrls,
      DatasetNavigator, ExtCtrls, DBLocator, ToolWin, OleCtnrs, StdCtrls, Mask,
      DBCtrls;type
      Tfrmzdgcgl = class(TForm)
        PageControl1: TPageControl;
        ToolBar1: TToolBar;
        DBLocator1: TDBLocator;
        DatasetNavigator1: TDatasetNavigator;
        TabSheet1: TTabSheet;
        TabSheet2: TTabSheet;
        DBGridEh1: TDBGridEh;
        sc_zdgcgl: TSocketConnection;
        cds_zdgcgl: TClientDataSet;
        ds_zdgcgl: TDataSource;
        cds_zdgcglBM: TStringField;
        cds_zdgcglNY: TStringField;
        cds_zdgcglBT: TStringField;
        cds_zdgcglNR: TMemoField;
        cds_zdgcglBZ: TStringField;
        cds_zdgcglZYBZ: TStringField;
        Panel1: TPanel;
        Label2: TLabel;
        DBEdit2: TDBEdit;
        Label3: TLabel;
        DBEdit3: TDBEdit;
        Label4: TLabel;
        Label5: TLabel;
        DBEdit4: TDBEdit;
        OleContainer1: TOleContainer;
        cds_com: TClientDataSet;
        SocketConnection1: TSocketConnection;
        procedure DBGridEh1DblClick(Sender: TObject);
        procedure FormShow(Sender: TObject);
        procedure DatasetNavigator1Click(Sender: TObject;
          Button: TdbNavigateBtn);
        procedure OleContainer1Exit(Sender: TObject);
        procedure cds_zdgcglAfterScroll(DataSet: TDataSet);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure cds_zdgcglBeforeScroll(DataSet: TDataSet);
        procedure sc_zdgcglBeforeConnect(Sender: TObject);
        procedure SocketConnection1BeforeConnect(Sender: TObject);
      private
        { Private declarations }
        bm:string;
      public
        { Public declarations }
      end;var
      frmzdgcgl: Tfrmzdgcgl;implementationuses g_var;{$R *.dfm}procedure Tfrmzdgcgl.DBGridEh1DblClick(Sender: TObject);
    begin
      pagecontrol1.Pages[1].Show;
    end;procedure Tfrmzdgcgl.FormShow(Sender: TObject);
    begin
      pagecontrol1.Pages[0].Show;
      cds_com.Close ;
      cds_com.CommandText :='select to_char(to_number(max(bm))) bm1 from dd_zdgcgl ';
      cds_com.Open ;
      cds_com.First ;
      bm:=cds_com.fieldbyname('bm1').AsString ;
      cds_com.Close ;
      if bm='' then bm:='0';
      cds_zdgcgl.Open ;
    end;procedure Tfrmzdgcgl.DatasetNavigator1Click(Sender: TObject;
      Button: TdbNavigateBtn);
    var
      stream1:Tmemorystream;
    begin
      case button of
        nbsave :begin
                  olecontainer1.Iconic :=false;
                  stream1:=Tmemorystream.Create ;
                  olecontainer1.SaveToStream(stream1);
                  stream1.Position :=0;
                  cds_zdgcgl.Edit ;
                  Tblobfield(cds_zdgcgl.FieldByName('nr') ).LoadFromStream(stream1);
                  cds_zdgcgl.ApplyUpdates(0);
                  stream1.Free ;
                  
                end;
        nbdel  :begin
                  if messagebox(self.Handle ,'你确定删除当前这条记录吗?','提示',mb_okcancel)=1 then
                  begin
                     cds_zdgcgl.Delete ;
                     cds_zdgcgl.ApplyUpdates(0);
                     if cds_zdgcgl.RecordCount =0 then
                     begin
                       olecontainer1.DestroyObject ;
                       olecontainer1.CreateObject('word.document',true);
                       olecontainer1.Iconic :=false;
                     end;              end;            end;
        nbappend:begin
                   pagecontrol1.Pages[1].Show;
                   cds_zdgcgl.Append ;
                   bm:=bm  ;
                   bm:=inttostr(strtoint(bm)+1);
                   olecontainer1.DestroyObject ;
                   olecontainer1.CreateObject('word.document',true);
                   olecontainer1.Iconic :=false;
                   cds_zdgcgl.FieldByName('bm').AsString   :=bm;
                   cds_zdgcgl.FieldByName('zybz').AsString :='2';             end;
        nbclose :close;
      end;
    end;procedure Tfrmzdgcgl.OleContainer1Exit(Sender: TObject);
    var
      stream1:Tmemorystream;
    begin
      try
        stream1:=Tmemorystream.create;
        olecontainer1.SaveToStream(stream1);
        stream1.Position :=0;
        stream1.Size ;
        if (stream1.Size >0) and (cds_zdgcgl.RecordCount >0) then
        begin
          if not (cds_zdgcgl.State in [dsinsert,dsedit]) then cds_zdgcgl.Edit ;
          Tblobfield(cds_zdgcgl.FieldByName('nr') ).LoadFromStream(stream1);
          cds_zdgcgl.ApplyUpdates(0);
        end;
      finally
        stream1.Free ;
      end;
    end;procedure Tfrmzdgcgl.cds_zdgcglAfterScroll(DataSet: TDataSet);
    var
      stream1:Tmemorystream;
    begin
      try
        stream1:=Tmemorystream.Create ;
        Tblobfield(cds_zdgcgl.FieldByName('nr')).SaveToStream(stream1) ;
        stream1.Position :=0;
        stream1.Size ;
        if (stream1.Size >0) and (cds_zdgcgl.RecordCount>0)   then
        begin
          OleContainer1.LoadFromStream(stream1);
        end;
      finally
        stream1.Free ;
      end;
      
    end;procedure Tfrmzdgcgl.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      OleContainer1.OnExit(self) ;
    end;procedure Tfrmzdgcgl.cds_zdgcglBeforeScroll(DataSet: TDataSet);
    begin
      OleContainer1.OnExit(self) ;
      olecontainer1.DestroyObject ;
      olecontainer1.CreateObject('word.document',true);
      olecontainer1.Iconic :=false;end;procedure Tfrmzdgcgl.sc_zdgcglBeforeConnect(Sender: TObject);
    begin
      sc_zdgcgl.Address :=gsappserver;
    end;procedure Tfrmzdgcgl.SocketConnection1BeforeConnect(Sender: TObject);
    begin
    socketconnection1.Address :=gsappserver;
    end;end.