各位庄家:
    由于多人同时开发应用程序服务器,每人都建立自己的远程数据模块,其中一个数据模块调用另一个数据模块中定义的Object并给予赋值,结果程序提示灾难性错误,如何解决?
其中一个数据模块:
type
  TDmMain = class(TRemoteDataModule, IDmMain)
  private
    { Private declarations }
  protected
  public
  end;
同时该模块中又定义如下的Object
TStaff = class(TObject)
  private
    function GetNextOfficeCode: string;
    function GetAreaCode: string;
    procedure FreeRights;
    procedure GetRights;
  public
    //单位信息
    DUTY_OFFICE_CODE: string;
    DUTY_OFFICE_NAME: string;
     //部门信息
    DEPT_CODE: string;
    DEPT_NAME: string;
     //员工信息
    STAFF_CODE: string;
    STAFF_NAME: string;
    STS: string;
    LoginCryptogram: string; //登录密码
    LoginCode: string; //登录员工号
    RightList: TStringList; //权限列表
    procedure   GetStaffInfo;
    procedure   RegLogoutSystem(var sLogon: string);    
    constructor Create;
    destructor  Destroy; override;
  protected
  end;
同时定义
var
  DMMain: TDMMain;
  Me: TStaff;
另一个数据模块包含该单元uses udmmain;同时引用并赋值
type
  TLogin = class(TRemoteDataModule, ILogin)
    SPGetUser: TOraStoredProc;
    SPGetPassWord: TOraStoredProc;
    SP_GetSessionCount: TOraStoredProc;
    SPKillCurrentSession: TOraStoredProc;
  private
    { Private declarations }
  protected
    class procedure UpdateRegistry(Register: Boolean; const ClassID, ProgID: string); override;
    function sp_get_username(const i_duty_office_code,
      i_staff_code: WideString): WideString; safecall;
    function GetStaff_Code(const GetAreaCode,
      EdStaff_Code: WideString): WideString; safecall;
  public
    { Public declarations }
  end;
function TLogin.sp_get_username(const i_duty_office_code,
  i_staff_code: WideString): WideString;
begin
  result := 'Love'+copy(i_duty_office_code,3,6)+'00'+i_staff_code;
end;
//获得登录数据库的员工号,根据客户端的登录机关、员工号进行用户转换
function TLogin.GetStaff_Code(const GetAreaCode,
  EdStaff_Code: WideString): WideString;
begin
  Me.LoginCode := edStaff_Code;
  Me.DUTY_OFFICE_CODE := GetAreaCode;--对另一个数据模块中的Object进行赋值  Result := sp_get_username(GetAreaCode,edStaff_Code);
end;

解决方案 »

  1.   

    没有人能给我指点迷津吗?期待ing
      

  2.   

    因为一个远程数据模块就是一个DCOM类,只有在客户端调用时才创建这个类的实例来服务它。所以你最好再建立一个公共的Pas文件用来存储登录机关、员工号,这样就可以实现你的要求了。
      

  3.   

    没有创建 TStaff 和 TDMMain 的实例
      

  4.   

    to haoco(程序员) :
    我有点理解你的做法,那么一个应用程序服务器可不可有多个远程数据模块?
    它们之间能使用彼此的data access和数据集或方法吗?望能指导!万分感激.
      

  5.   

    可是使用多个远程数据模块当然,建一个主RDM,再有几个子RDM,然后客户联主RDM就可以通过它了与各子RDM联系,但建子RDM要扩展主RDM的接口,这方法资料不多,我正发愁呢。