转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
TManagedDataSet和DataSetPool的实现         ★★★★

TManagedDataSet和DataSetPool的实现

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1969 更新时间:2009/4/23 18:37:43

TManagedDataSet和DataSetPool的实现

 

         天天用Delphi,自己有了很多想法。写代码之余,有空闲时间就把一些东西整理成文档。

         Delphi中使用最多的大概是AdoExpress组件,这是Borland封装了Microsoft的Ado的东东,使用频率最多的TAdoDataSet对应了Ado原生的RecordSet,在功能上做了一些增强,但用法基本一致,用多了就感觉TAdoDataSet还有扩充和改造的地方。

         由于代码中使用了很多的TAdoDataSet控件,创建和释放对象非常频繁,而且每次创建后都要设置很多基本相同的属性,颇为麻烦。于是想到可以实现一个记录集池,每次当需要一个记录集时,从这个池中得到一个空闲且符合要求的(只读或可读写),用完了就被池回收,如果池中记录集不够,就自动生成新的记录集对象。

         首先要做的是改造TAdoDataSet,我写了一个TManagedDataSet,继承自TAdoDataSet,可以自己知道自己是被人使用还是空闲(通过IsUsed()),重写了Free(),把本来释放的动作改为仅是把自己设置为空闲,并清除状态(Session)信息,并可以通过Source()返回一个指向自己的TDataSource对象。

         有了这些基础后,就可以很快的构建TDataSetPool类了,这个类仅是保存可用的TManagedDataSet对象,通过GetDataSet(WantType : TManagedDataSetType)返回一个空闲的数据集对象,如果池中没有空闲的,就新建一个返回。TManagedDataSetType是枚举类,标识只读数据集和读写数据集(只读数据集可通过优化CursorType和LockType来加快读数据速度)。

         下面的代码是直接从我做的一个项目的源文件中Copy出来的,有些乱,仅做参考。

 

 

 

unit ManagedDataSet;

 

interface

 

uses AdoDb, CommonDm, SysUtils, DB, dbgrids, ComObj, classes, contnrs;

 

type

         TManagedDataSetType = (ReadOnly, Editable); // 猅羭摸

    TXlsExpAdapter = class

        private

           _sXlsCaption : string;

            _sXlsFileName : string;

            _bOverwriteExistFile : Boolean;

                            _asFieldName : TStringList;

            _asXlsTitle : TStringList;

            _aDataType : TObjectList;

            function GetDataType(const iniIndex : Integer) : TDataType;

            function GetFieldName(const iniIndex : Integer) : string;

            function GetXlsTitle(const iniIndex : Integer) : string;

        public

           constructor Create();

            destructor Destroy();

           property XlsCaption : string read _sXlsCaption Write _sXlsCaption;

            property XlsFileName : string read _sXlsFileName Write _sXlsFileName;

            property OverWriteExistFile : Boolean read _bOverwriteExistFile Write _bOverwriteExistFile;

                            procedure AddField(const insFieldName, insCaption : string; const intype : TDataType = ftUnKnown);

            procedure GetInfoFromDBGrid(const ingrid : TDBGrid);

            property DataType[const iniIndex : Integer] : TDataType read GetDataType;

            property FieldName[const iniIndex : Integer] : string read GetFieldName;

            property XlsTitle[const iniIndex : Integer] : string read GetXlsTitle;

            function Count() : Integer;

    end;

    TManagedDataSet = class(TAdoDataSet)

                   private

            _source : TDataSource;

            _type : TManagedDataSetType;

            _bUsed : Boolean;

 

            procedure SetDataSetType(const intype : TManagedDataSetType);

            function GetDataSource() : TDataSource;

        public

           constructor Create(const intype : TManagedDataSetType = Editable);

            destructor Destroy(); override;

                            procedure Use();

            procedure Free(); reintroduce; // 滦籠摸Freeぃ穦睦龟ㄒ

            property DataSetType : TManagedDataSetType read _type Write SetDataSetType;

            property IsUsed : Boolean read _bUsed;

            property Source : TDataSource read GetDataSource;

            function ExportToXls(const inadapter : TXlsExpAdapter) : Boolean;

    end;

 

implementation

 

function TXlsExpAdapter.Count() : Integer;

[1] [2] [3] [4]  下一页


[VB.NET程序]VB的ShowInTaskbar功能分析以及用VC的实现  [Delphi程序]TFontNameComboBox及TFontSizeComboBox的实现
[Delphi程序]MSN / QQ 中的动画表情 在Delphi中RichEdit的实现…  [VB.NET程序]MD5加密算法(16位,32位)的C#,VB的实现
[Web开发]利用JS获取IE客户端IP及MAC的实现  [Web开发]ASP.Net ViewState的实现
[Web开发]vb.net_asp.net跨栏表头_滚动表体的DataGrid的实现  [Web开发]无限分类算法 js 的实现
[JAVA开发]关于UDDI的实现  [SyBase]InnoDB 中文参考手册 --- 10 multiversioning 的实…
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台