跪求:怎样从现有的RemoteDataModule继承一个新的RemoteDataModule子类? ( 积分: 100 )

  • 主题发起人 主题发起人 maleice
  • 开始时间 开始时间
M

maleice

Unregistered / Unconfirmed
GUEST, unregistred user!
如题,ggjjddmm们给个答案吧
 
如题,ggjjddmm们给个答案吧
 
New——>ProjectX——>选择你要继承的RemoteDataModule——>Inherit——>OK
 
您这样试过吗,这样做不行啊;这样不能生成一个接口的
 
接口继承和实现继承分两条线进行:
不使用RemoteDataModule,改用datamodule处理实现继承
另外定义com接口处理接口继承
 
hehe,已经找高人解决了
to 张鸿林:
您说的方法我试过了,还是不行。
现在我的做法是:
1.建立一个新的RemoteDataModule,手动改写该RemoteDataModule的pas文件:将
TChildClass = Class(TRemoteDataModule, IChildClass)改写为:
TChildClass = Class(TParentClass, IChildClass);
2.在Type Library中将IChildClass的Parent Interface改写:IParentClass
3.改写该单元的dfm:
Object ChildClass: TChildClass改为:
inherited ChildClass: TChildClass
OK
谢谢各位富翁参与,散分呵呵。。。
 
你说的类似方法我也尝试过(要注意单元Initialization部分的修改),但最后我采用的是我上面介绍的方法
下面的文件是我当时为一个应用写的继承编写规范,可以大略看出我的思路:
本基类提供子母表datamodule的基础框架和接口框架
被继承的数据模块:
dMasterDetailBase.pas
被继承的接口声明:
mtsMsterDetailBase_TLB
继承后的mts实现单元代码模板:
MasterDetailImpl.pas
下面是使用这个基类来继承子母表服务的基本方法:
1、准备工作:
为了使用这个基类,做好以下准备:
regsvr32 mtsMsterDetailBase.dll -----使这个接口可以被类型库编辑器继承
2、继承的基本步骤:
2.1 建立服务工程文件:
新建一个Active Libruay
保存为 mtsXXX
在工程中加入单元:dMasterDetailBase.pas,mtsMsterDetailBase_TLB
dMasterDetailBase.TdmMasterDetail是准备被继承的datamodule
工程属性设置(最好设为默认):
Packages:钩选Build with Run Time Package ,仅包含 vcl;rtl;vclx
编译路径: ../../发行包/server
2.2 继承数据模块(TdmMasterDetail):
file/new/other
找到本工程页,选择dmMasterDetail,按ok继承它
这时,一个datamodule被创建,把它保存为dXXX.pas
datamodule对象命名为dmXXX
这时,我们就可以修改这个datamodule中各个query的sql语句,使它访问新的模块的树据库对象
2.3继承Com接口:
为了不重复写类型库中的接口方法声明,可以继承IMasterDetail接口
继承IMasterDetail接口的步骤:
file/new/other/ActiveX/Transactional Object
CoClass Name: XXX
支持事务
把这个文件命名为XXXImpl.pas
在类型库编辑器中,点击根节点,打开Uses页
右键,Show All Type libruaries
找到mtsMasterDetailBase,打勾(如果找不到,是你没有注册mtsMsterDetailBase.dll)
右键,Show Selected
在类型库编辑器中点击IXXX节点,在Attributes页,将Parent Interface改为IMasterDetail
刷新类型库
这样,IMasterDetail接口的所有方法都被继承了
关闭类型库编辑器
2.4 实现服务接口:
下面,来实现XXXImpl.pas中的对象方法,基本上是抄MasterDetailImpl.pas中的样本代码
为了方便抄写代码,可以在IDE中打开MasterDetailImpl.pas,但不要把它加到工程中
首先,在XXXImpl.pas中的interface部分的uses中加入dMasterDetailBase
在对象 Txxx的私有部分加入以下声明:
private
FDM:TdmMasterDetail;

在公有部分加入以下声明:
public
//声明下列方法并实现他们
procedure Initialize;
override;
destructor Destroy;override;
实现:
procedure TXXX.Initialize中
FDM 使用你继承后的datamodule来创建,即,
FDM:=TMasterDetailBase.Create(nil);
改为:FDM:=TdmXXX.Create(nil);
为了上面的代码能够调试通过,你还要在实现部分uses dXXX
其他实现代码照抄MasterDetailImpl.pas中的相应部分
至此,一个继承的masterdetail服务模型就出来了
2.5 细化数据模块的逻辑
这个工作主要是在Query组件中编写各个SQL代码
为了方便调试DataModule中的细节,可以新建一个测试exe文件,加入dMasterDetailBase和dXXX.pas
在执行文件中调试数据模块就比较容易了
2.6 编译mts服务
数据模块细化并调试成功后,简单打开mt工程,编译它就可以了
其他说明:
如果在新的服务中需要扩充接口,可以在类型库中自行扩充
 
后退
顶部