请教数据库表封装的一个技巧

glink 2005-10-28 08:36:23
我设计一个类:
TOper =class(TDataSet)
protected
FID: integer;
FQuery: TADOQuery;
FDataSource: TDataSource;
public
constructor create(AOwner: TComponent);override;
destructor destroy;override;
property query: TADOQuery read FQuery write FQuery;
property dataSource: TDataSource read FDataSource write FDataSource;
end;

我希望一个具体对象aOper(:TOper),当我运行aOper.next的时候,实际效果与aOper.query.next一样,但实际我一运行aOper.next的时候,总是提示我不能在一个没有打开的dataset中执行next。
实现aDiary.next的一个笨办法就是在public中定义一个next的procedure,然后写上:FQuery.next,因此一运行aDiary.next,实际运行的是aDiary.query.next。但是TDataset中已经有一个next,就是无法直接继承,这个笨办法造成的后果是,TDataset中的first、prior、last等procedure都无法直接继承,必须在public中一个一个举行定义,然后编写相关的代码。

有没有一个简单的命令,直接将query与TDataset中的表联系起来,以后都可以继承Tdataset中的procedure,以后运行aDiary.next,aDiary.post等命令的时候,实际是对query举行操作,而不发生错误?
...全文
115 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
glink 2005-10-29
  • 打赏
  • 举报
回复
to: jinzhili(跑) :
按照您的做法,就无所谓继承TDataset还是什么了,所有的procedure或function都是自己写,那么TDataset中的next、prior等就无法直接调用了,而且一个表就要写一个next、prior的具体实现代码,是这样吗?

“说到界面方法也应该有一个自己的框架”,能否给予一点提示?
jinzhili 2005-10-28
  • 打赏
  • 举报
回复
我的作法。
建立一个数据模块。如命名为dm
创建一个基类如base;base的create方法中有一个参数就是一个adoconnection对象。在这个base中可以有几个用到的adoquery对象。
把一些共用的方法写成virtual。如first、prior、last等。同时加几个需要的数据成员。如主表表名FMaintable,FDetailtable等。
在写procedure or function 的时候可以灵活一些。还要用到一些枚举类型的变量。读起来很方法。针对表建立record。目的是方便
传递数据。我现在做的是界面可以很灵活得进行修改而和数据库交互的代码无需改动。这也是做的时间长了总结出来的。也包括学习
他人的。
说到界面方法也应该有一个自己的框架。 这样写起来也快。也可少写很多的代码。比如权限的控制等等。
lovendII 2005-10-28
  • 打赏
  • 举报
回复
要将query与表连接起来,设置连接属性,并用sql语句就好了,
其实也不麻烦啊。

2,496

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧