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

Delphi控件的拿来主义(二)

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

  

   这个例子是关于如何将一个文本数据导入导出控件作一些简单的修改之后拿来使用的。

◆程序功能

    将图书馆的ISO文件中的部分数据转到Oracle8数据库中。

◆设计要求

    1.显示导入进度条。

    2.在导入过程中,如果某条纪录导入失败,不显示异常,而将导入失败的纪录记入日志。

◆设计思路

程序的关键在文本数据字段的分离。通常的做法,都是先将字符串进行处理(RegulateString),然后把串中每个字符同分割符(可以是空格,逗号等)比较,将不是分割符的字符追加到一个串中(GetRecordItem),得到一个字段的内容。通过一个循环(循环次数由GetItemNum来定),就可以将一个字符串分成几个字段。最后的工作就是将分离出来的数据对号入座加入数据库.

按照上面的思路,利用Delphi提供的已有函数和过程,实现起来应该不难,但问题是,我可不想每次编文本导入程序的时候,都把什么这啊那的函数过程重新定义一遍,哎,最烦的就是重复性的工作了.那么有没有现成的控件将上述过程都封装起来呢?PS:又不用我编呢?

    答案是肯定的!前几天刚刚下了一个免费控件TPgCSV,据说可以实现文本的导入和导出.翻出来一看,正是我想要的.

   在深入到下面的内容之前,有必要对该控件的类声明部分作一定了解

  (经作者Khashayar Sadjadi(khashi@pragena.8m.com)同意发表):

//中文部分为笔者所作的注释

//注意:

//在该控件中,Export代表将文本数据导入到数据库,Import代表从数据库导出到文本。??? 怎么和我理解的

//导入导出概念刚好是反的 :)

type

  //在处理数据产生异常时,可选择继续还是中止

  TPgCSVErrorResponse     = (pgcsvAbort, pgcsvIgnore);

  //进程监控事件声明,可以将导入/导出的进度作为参数传出

  TPgCSVProgressEvent     = procedure (Sender : TObject; AProgress: LongInt; var StopIt: Boolean) of object;

  //发生异常时的事件处理声明,异常信息通过该接口传给程序员。

  TPgCSVExportErrorEvent  = procedure (Sender : TObject; Mess: string; RecNo: LongInt; var Response:TPgCSVErrorResponse) of object;

  TPgCSV = class(TComponent)

  private

   FDataset         : TDataset;

   FCSVMap,

   FCSVFile,

   FDateFormat,

   FIgnoreStr       : string;

   FSeprator,

   FDelimiter,

   FFieldIndicator  : Char;

   FAutoOpen,

   FUseDelimiter,

   FSilentExport,

   FTrimData,

   FStop,

   FEmptyTable      : Boolean;

   FBeforeOpenTable,

   FAfterOpenTable,

   FBeforeCloseTable,

   FAfterCloseTable,

   FBeforeEmptyTable,

   FAfterEmptyTable,

   FBeforeExport,

   FAfterExport,

   FBeforeImport,

   FAfterImport,

   FOnAddRecord     : TNotifyEvent;

   FExportProgress,

   FImportProgress  : TPgCSVProgressEvent;

   FExportError     : TPgCSVExportErrorEvent;

   FMapItems,       

   FDefaultInt      : Integer;

   FBufferSize      : LongInt;

   FFieldCache      : TList;

  protected

   FFile            : TextFile;

   //以下就是我所说的希望封装的部分

   function CountMapItems:Integer;//计算映射字符串的字段个数

   function GetMapItem(ItemIndex:Integer;var AField:Boolean):string;//提取映射字符串的字段

   function GetCSVRecordItem(ItemIndex:Integer;CSVRecord:string):string;//提取CSV文件字符串中的某一字段

   function BuildMap:string;//自动创建映射,如果CSVMap一栏为空的话,会由它来产生映射字符串

   function ExtractWord(Item: Integer;S, WordDelim: string): string;//提取文本数据字符串/映射字符串中的某一字段

   function WordCount(const S ,WordDelim: string): Integer;//计算文本数据字符串/映射字符串中的字段数目

   function WordPosition(Item: Integer; const S, SubStr: string): Integer;//计算子字符串在字符串中的位置

  public

   constructor Create(AOwner: TComponent); override;

  published

   //properties

   property Dataset          : TDataset               read FDataset          write FDataset;

   //设置要导入或导出的目标数据集.

   property CSVMap           : string                 read FCSVMap           write FCSVMap;

  //CSV 文本数据文件到数据库字段值的映射字符串.控件通过该映射决定文本中的哪些数据要导入及要导入哪个字段.

   property CSVFile          : string                 read FCSVFile          write FCSVFile;

   //CSV 文件格式,其实就是文本数据文件。CSV代表什么意思?呵呵,我也不知道

   property Seprator         : Char                   read FSeprator         write FSeprator;

   //分隔符,可以是空格,也可以是,、;、#等符号

   property FieldIndicator   : Char                   read FFieldIndicator   write FFieldIndicator;

  //字段标识符.

   property AutoOpen         : Boolean                read FAutoOpen         write FAutoOpen;

   //将AutoOpen设为True可以在处理数据前自动打开要导入的数据表并在操作完毕后自动关掉它。

   property IgnoreString     : string                 read FIgnoreStr        write FIgnoreStr;

   //忽略纪录的标识串.

   //举例来说

   //IgnoreString:=''''(ignore)'''';

   //CSVMap:=''''$Name,(ignore),$Age'''';

   //在这种情况下,CSVToDataSet方法,即导入数据方法将忽略文本文件中的第二列的字段。

   property Delimiter        : Char                   read FDelimiter        write FDelimiter;

   //在某些CSV文档中标识字符串纪录的标识符,比如,"john","boy",12中的",在这种情况下,TPgCSV

//会忽略这些标识符。

   property EmptyTable       : Boolean                read FEmptyTable       write FEmptyTable;

   //只在从数据库导出(DataSetToCSV)方法中有效,作用是创建一个新的CSV文件。

   property UseDelimiter     : Boolean    &nbs

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


没有相关教程
教程录入: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……
    咸宁网络警察报警平台