学院首页 软件应用 编程开发 创意设计 认证培训 软件论坛
ASP ASP.NET PHP JSP SQL MYSQL Java VB

您的位置:学院 >> 编程开发 >> Delphi >> Delphi筛选数据


Delphi筛选数据


从大量的数据中筛选出具有某种特征的数据是设计数据库应用程序经常碰到的问题,对它的处理方法也是多种多样的。下面介绍几种常见的方法。

设定范围
  所谓范围,就是指定一个上下界,筛选出落在上下界内的一组连续记录。为方便说明,我们先生成一个项目,并在Form1中放入如下组件:

组件名 属性
Table1 DatabaseName:=DBDEMOS TableName:=Customer.db
DataSource1 DataSet:=Table1
DBGrid1 DataSource:=DataSource1

  本例中我们使用了Delphi自带的别名DBDEMOS下的一个数据库:Customer.db,这是一个记录顾客基本信息的数据库。当我们把Table1的Active属性置为True时,在DBGrid1中会显示出该库的内容。下面我们往Form1中放入一个Button1,编写Button1的OnClick事件如下:
  procedure TForm1.Button1Click(Sender: TObject);
  begin
  with Table1 do
  begin
   KeyExclusive:=True;// 为True时不包括边界值,为False时包括边界值,缺省为False;
  SetRangeStart;
  Fieldbyname(CustNo).AsString:=1000; //设定范围上界
  SetRangeEnd;
  FieldbyName(CustNo).AsString:=2000; //设定范围下界
  ApplyRange; //使范围生效
  end;
  end;

  以上是设定范围的很典型的一组语句。运行程序,单击按钮后,顾客号在1000至2000之间的顾客记录被筛选了出来。范围一旦被设定,在整个应用程序执行过程中都是有效的。当然,我们可以调用CancelRange方法来暂时使范围失效,以后需要范围生效时,可直接调用ApplyRange方法,而不需要再次设定范围的上下界。另外,我们可以调用EditRangeStart和EditRangeEnd的方法来改变范围的上下界。

  使用范围的唯一? 是,设定范围的字段必须已建索引(Rainbow的话:这些使用范围的时候必须的)。对没有建立索引的字段使用范围是不允许的。

使用过滤器
  过滤器筛选出来的记录可以是连续的,也可以是非连续的。过滤器不受索引的限制,而且即使有索引,过滤器也不依赖,也就是说,过滤出来的记录是未经排序的。过滤器的使用非常简单,可以直接在Table组件的Filter属性中写入包含过滤条件的字符串,并把Filtered属性置为True来启动过滤器。在上例中,我们可以在Table1的Filter的属性框内写入:(CustNo1000) and (CustNo2000) ,当我们把Table1的Filtered属性置为True时,DBGrid1内将显示出顾客号在1000至2000之间的顾客记录。当过滤条件比较复杂时,我们可以通过编写Table1的OnFilterRecord事件来实现。例如:
  procedure TForm1.Table1FilterRecord(DataSet: TDataSet; var Accept: Boolean);
  begin
  Accept:=(DataSet[′CustNo′]1000) and (DataSet[′CustNo′]2000) and (DataSet[′Country′]=′US′);
  end;
  运行程序,所有CustNo在1000至2000之间并且Country=US的顾客记录被筛选了出来。在OnFilterRecord事件中,我们可以使用条件分支语句或者循环语句,因而非常灵活,便于完成条件很复杂的记录筛选工作。和范围一样,过滤器一旦设定,就将维持到应用程序的结束。当然,我们可以将Filtered属性置为False来使过滤器失效。

  和范围相比,过滤器方便灵活,而且不受索引限制,但正是因为没有索引支持,当记录数量比较大时,过滤器的速度会受影响。因此,范围和过滤器各有各的适用场合。

使用查询
  即通过TQuery组件来使用SQL语句实现记录的筛选。大家可能对这种方法比较熟悉,这里只做简单说明,如上例中的记录筛选用一条很简单的SQL语句就能实现:
   Select * from Customer
  Where (CustNo1000) and (CustNo2000)
  使用SQL语言可以实现条件很复杂的筛选,当记录数量很大或条件很复杂时,应尽量使用SQL语言来查询。

  和前两种方法相比,使用查询更加灵活多变,适应性更强,而且也不受索引的限制。但这种通过SQL语句的筛选是一次性的。当调用TQuery的Open方法(或Active:=true)后,TQuery返回查询结果集,之后就失去了对结果集的范围限制。当结果集中的某些记录发生改变(如某条记录的Custom变为3000),不满足筛选条件时,这种方法不能马上察觉,必须再次调用TQuery的Open方法才能实现。

技术文章快速查找

栏目导航
软件应用
·操作系统 ·杀毒防黑 ·应用软件
·聊天软件 ·网络软件  
Web开发
·ASP ·JavaScript ·CGI
·JSP ·VbScript ·Web服务器
·PHP ·XML  
开发语言
·VB ·VC ·ASP.NET
·Java ·C/C++ ·Delphi
数据库开发
·MySQL ·SQL/Access ·PowerBuilder
·Oracle ·DB2  
网站设计
·Flash ·Dreamweaver ·HTML/CSS
·Fireworks ·FrontPage  
平面设计
·Photoshop ·CorelDraw ·AutoCAD
·FreeHand ·Illustrator ·3DsMAX
媒体动画
·Director ·Authorware ·Maya
·视频处理    


相关软件 产品库推荐
·笔记本 ·台式机 ·服务器
·数码相机 ·手机 ·GPS
·DV摄像机 ·MP3 ·MP4
·CPU ·硬盘 ·内存
·主板 ·显卡 ·显示器
·打印机 ·投影机 ·路由器

还没人留言,抢个先,哈哈!
对"Delphi筛选数据"的评论 - 快速回贴
内容:
  [完成后可按Ctrl+Enter发布]

百度中 Delphi筛选数据 相关内容
Google搜索中 Delphi筛选数据 相关内容
雅虎中 Delphi筛选数据 相关内容
Sogou搜索中 Delphi筛选数据 相关内容

相关软件 最新回复帖子:

·Windows Vista 中卸载软件的不同方式
·没有mysql支持时的替代方案
·一个可以发送附件及HTML格式邮件的PHP类
·AutoCAD打造精致三维鸟笼实例详解
·Photoshop自定义水晶字特效样式
·AutoCAD三维基础实例教程
·PS为黑背景长发美女照片抠图换背
·用Photoshop自制个性摩托车贴花小经验
·轻松几步将美女照片处理为手工素描
·巧用Photoshop画笔轻松绘制创意特效


  相关软件 Delphi筛选数据相关文章
用DELPHI 3.0制作应用软件经验谈 Delphi中数据文件路径的管理
Delphi中建表 如何实现在一个Dbgrid中显示多数据库
为Delphi数据表格增加彩色 建立应用软件注册安全机制
在Delphi中自动检测、建立数据库别名和表格 在Delphi程序中维护DBF数据库
用Delphi 开发数据库程序经验三则 在Delphi的DBGrid中插入其他可视组件
Delphi3数据库编程中的查找字段 Delphi数据库开发及统计表格设计
用Delphi4的QReport部件生成报表 也谈为Delphi中数据库报表加网格
在Dephi中使用TStream读写数据的技巧 Delphi中的消息处理
在DEPHI程序中使用ADO对象存取ODBC数续 在DELPHI程序中使用ADO对象存取ODBC数
在DELPHI程序中动态设置ODBC数据源 精简DELPHI数据库系统的补充