做了一个ADO方式的分布式多层应用小程序服务器方用的是
1:Remote Data Module 
其中:远程数据模块名:adotestserver
      Instancing:Multiple Instance
      Threading Model:Apartment
2:TADODataSet
3:TDataSetProvider客户方用的是
1:TDCOMConnetion
2:TClientDataset
3:TDataSource
4:TDBGrid客户方程序与服务器程序连接正常(前提:在同一台PC)
将客户方程序复制到另一个PC(同一局域网可以PING通)上运行,鼠标只在短时间变成漏斗又恢复指针形,不再有反应:(请问为什么在同一台电脑上客户方与服务器方程序连接成功读取数据
而在不同电脑上就不可以实现了呢?另注:该例子来自:《Delphi 5.x ADO/MTS/COM+高级程序设计篇》李维 著先谢谢各位大师了~

解决方案 »

  1.   

    服务器方程序:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Label1: TLabel;
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}end.与服务器方程序在一起的远程数据模块:
    unit Unit2;{$WARN SYMBOL_PLATFORM OFF}interfaceuses
      Windows, Messages, SysUtils, Classes, ComServ, ComObj, VCLCom, DataBkr,
      DBClient, Project1_TLB, StdVcl, Provider, DB, ADODB;type
      TadoTestServer = class(TRemoteDataModule, IadoTestServer)
        ADOConnection1: TADOConnection;
        ADODataSet1: TADODataSet;
        DataSetProvider1: TDataSetProvider;
      private
        { Private declarations }
      protected
        class procedure UpdateRegistry(Register: Boolean; const ClassID, ProgID: string); override;
      public
        { Public declarations }
      end;implementation{$R *.DFM}class procedure TadoTestServer.UpdateRegistry(Register: Boolean; const ClassID, ProgID: string);
    begin
      if Register then
      begin
        inherited UpdateRegistry(Register, ClassID, ProgID);
        EnableSocketTransport(ClassID);
        EnableWebTransport(ClassID);
      end else
      begin
        DisableSocketTransport(ClassID);
        DisableWebTransport(ClassID);
        inherited UpdateRegistry(Register, ClassID, ProgID);
      end;
    end;initialization
      TComponentFactory.Create(ComServer, TadoTestServer,
        Class_adoTestServer, ciMultiInstance, tmApartment);
    end.客户方程序:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Grids, DBGrids, DB, DBClient, MConnect;type
      TForm1 = class(TForm)
        DCOMConnection1: TDCOMConnection;
        ClientDataSet1: TClientDataSet;
        DataSource1: TDataSource;
        DBGrid1: TDBGrid;
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}end.
      

  2.   

    可以ping通还不够,你看他们能相互访问么。
      

  3.   

    请问为什么在同一台电脑上客户方与服务器方程序连接成功读取数据
    而在不同电脑上就不可以实现了呢?
    这个是你的dcom服务没有注册的问题,请先注册dcom服务,
      

  4.   

    谢谢两位:)
    DCOM方式搞了一晚都不得其解
    改用SOCKET方式就OK了:)
    谢谢~~~