Delphi数据库编程新手指南(08)

数据过滤

  如前所述,无论TADOQuery还是TADODatSet(作为数据集组件),都是共用一组通用的方法和事件。这些数据集公开的功能中,拥有可以缩小呈现给用户数据范围的能力。试想一下,你可能拥有一个存有数千条记录的数据库表,但用户只对表中的一小部分数据感兴趣。

接下来,按照前面章节所描述的方法在数据窗体中放置核心组件(数据访问和数据感知)。下面的代码示例,假定你已将ADOTable组件指向数据库中的Applications表。

过滤(Filtering)

过滤,是排除从数据集中得到的一些数据,只在视图上显示那些符合特定条件的记录的方法。过滤使你能够生成不同数据内容的视图,而不会实际影响到该数据集中的数据。在设计和运行期间,过滤规则可通过数据集组件(TADOTable或TADOQuery)的Filter属性进行设置。 Filter属性是一个字符串,它定义了过滤器的规则。

例如,若想限制所显示的数据(来自Applications表)——只显示免费的应用程序(cost $0.00),下面的过滤器将只显示符合条件的记录:

ADOTable1.Filter := 'Cost = 0';

在此基础上,还可以为过滤器添加过滤条件。使数据集过滤后只显示某些特定程序类型的免费应用程序。如下进行设置:

ADOTable1.Filter :=
  'Cost = 0 AND Type = ' + QuotedStr(Edit1.Text);  
//'Delphi''s Pascal'; //ShowMessage为Delphi'sPascal
// QuotedStr(’Delphi''s Pascal’);//ShowMessage为 'Delphi''s Pascal'

通过组合使用下列运算符,可以创建相当复杂的过滤器。

运算符  含义
<           小于
>           大于
>=         大于或等于
<=         小于或等于
=           等于
<>         不等于
AND      都为真。
NOT      不为真
OR        至少有一个为真

Filtered, FilterOptions, FilterGroup,OnFilterRecord

  Filtered属性是一个布尔值(True或False),决定是否启用“Filter”属性中的规则对数据集进行筛选。当Filtered为False时,将忽略过滤规则,而将整个数据集提供给应用程序。

  FilterOptions具有两个值——都用于过滤字符串字段。值为foCaseInsensitive时,“Filter”属性中的条件字符串文字与字段值进行比较时,不区分大小写。 foNoPartialCompare强制Delphi将星号(*)解释为原义字符而非通配符。默认情况下,FilterOptions设置为空集。

  OnFilterRecord事件,每次过滤规则起作用时触发。通常,在不能使用Filter属性来实现过滤时,使用该事件。

procedure TForm1.ADOTable1FilterRecord(DataSet: TDataSet; var Accept:Boolean);
var AppZipSize : Single;
begin
  AppZipSize :=ADOTable1.FieldByName('size').Value;
  Accept := (AppZipSize < 10);
end;

  这里的关键因素是Accept参数。任何你需要显示的行,需将其Accept设为“True”。前面代码中,Size字段值小于10(所有下载大小小于10KB的应用程序)的Accept为True。

FilterGroup集属性可以根据它们的状态来筛选记录。

(过滤或不过滤)To filter or notto filter

(需要注意的)Note that

  •Filter属性的行为很像一个SQL语句中的WHERE子句。

  •可以拥有多个条件,在Filter属性中用AND或OR运算符分隔。

  •通常应该避免使用过滤器,除非取得的记录集是小型的。使用过滤器,可能会也可能不会使用当前索引(过滤器适用于检索数据集中的每一个记录中)。

  •在客户机/服务器类型的数据库上很少使用过滤器,应使用SQL查询(TADOQuery)来达到过滤器对本地数据库那样的效果。

  •一般情况下,不应在数据模块(datamodules)上的数据集中使用过滤器。在特定情况中,过滤表不在其他窗体中显示,或表使用的范围、排序顺序,不在除应用程序外的任何地方使用——应避免使用数据模块。

  •搜索已过滤的数据集,可使用FindFirst、FindNext、FindPrior或FindLast方法。这些方法是搜索已过滤数据集最好的方式,因为每次调用这些方法时过滤器就会被重新应用。因此,如果先前不匹配过滤规则的记录,在修改后,与过滤规则相匹配时,它们将在搜索执行前被纳入数据集。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第一部分: 感受Delphi 7的可视化开发环境,并制作了若干简单的实例,着重从开发步骤的角度引导读者完成实例的制作,并详细讲解了开发过程中遇到的关于控件的和语言的相关问题,使得读者对Delphi 7的开发流程有初步的了解。 第1章 主要介绍Delphi 7的安装以及对可视化开发环境的熟悉。 第2章 通过手把手的几个实例的讲解,引导读者进行“搭积木”式的实例开发,从中感受使用Delphi 7开发应用程序的简洁和高效,并进一步掌握可视化开发环境的使用。 第二部分: 第3章和第4章分别对使用Delphi 7进行系统开发的语言语法以及开发中有关错误的调试技巧进行了讲解,使读者从理性上认识Delphi 7开发并熟练掌握程序调试技巧。 第3章 主要讲解Delphi 7开发应用程序所使用的语言——Object Pascal语言。除了概念上的阐述外,绝大部分的基本知识将从实例的制作中获取,避免了枯燥的讲解。 第4章 介绍用Delphi 7进行软件开发过程中经常遇到的错误以及解决办法。本章摈弃了传统的Delphi教程中枯燥的调试工具操作讲解和对错误理论的讲解,而是集中介绍了开发过程中最经常和最有效的调试手段,并简要介绍了错误的类型和解决办法。同样的,本章以实例的形式把相关的知识融入其中。 第三部分: 接下来的第5章、第6章和第7章对使用Delphi 7进行系统的软件开发进行了讲解,使读者在更高的层次上看清Delphi 7开发是进行设计而不仅仅是进行编码。 第5章 主要介绍如何使用Delphi 7开发出美观大方的应用程序以及开发过程中的相关原则。 第6章 主要介绍了有关图形控件方面的运用技巧。 第7章 主要介绍了有关数据库开发的相关知识,用一个简单的例子讲解了数据库的查询、删除、插入和更新等基本功能。 第四部分: 第8章是本书的最后一部分。该部分通过一个实例完成对本书基本知识的总结与复习。这里既有美观的界面设置,也有逻辑的代码设计,还有整个系统开发的分析说明。通过这一章力求读者从整体上把握软件开发的步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值