在Delphi用MIDAS写一个程序,建立一个远程数据模块,但发现不能像普通数据模块那样,让别的窗体同过uses这个远程数据模块来调用里面的数据库控件,经对比发现普通数据模块有一个定义自己的语句,如:var Datamodule:TDatamodule,而远程数据模块则没有,只有这样的一个类型定义:
  type
  TCommisionServer = class(TRemoteDataModule, ICommisionServer)
    ConSQL: TADOConnection;
    ConAccess: TADOConnection;
    QrySQL: TADOQuery;
    DSPSQL: TDataSetProvider;
  private
    { Private declarations }
  protected
    class procedure UpdateRegistry(Register: Boolean; const ClassID, ProgID: string); override;
  public
    { Public declarations }
  end;
这样就不能在服务端的主窗体调用这个远程数据模块内的数据库控件。应改如何解决?再问一个菜鸟问题,Delphi中对于整个程序的全局变量是不是应该在程序的Delphi Project文件里定义,这样每个窗体才能用全局变量交换数据,迷惑中...请各位高手不吝指教,谢谢!

解决方案 »

  1.   

    远程数据模块,你可以理解成客户服务中心。它主要是响应客户端的客户调用,然后根据客户调用接口再分别创建其他模块对象,调用应用服务器中其他模块的功能。在设计上它与其他模块的关系应该是单向的.
      客户端-》远程数据模块-》其他模块。3层应用中,通常一个应用服务器会服务多个客户端连接。每个客户连接就会创建一个远程模块的实例(虽然你看到只运行了一个exe)。如果主窗口需要显示数据,它究竟显示哪个远程模块的实例的数据呢?
      

  2.   

    我在看李维那本系统篇,他也是在主窗体显示data,delta等内容的,是应为他的演示只有一个客户端吗?另外,全局变量的问题呢?
      

  3.   

    还有那要对远程数据模块初始化是,只能在远程数据模块的oncreate来完成吗?但一个简单语句,iFile:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'\Config.ini');就不能执行,编译器报application未声明。