Delphi筛选数据
2008-04-09 04:17:25来源:互联网 阅读 ()
设定范围
所谓范围,就是指定一个上下界,筛选出落在上下界内的一组连续记录。为方便说明,我们先生成一个项目,并在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方法才能实现。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:Delphi中数据文件路径的管理
下一篇:在Delphi动态生成定义数据库
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash