ClientDataSet建立索引和排序

可用ClientDataSet.AddIndex或ClientDataSet1.IndexDefs.AddIndexDef建立索引。

AddIndex(

const Name:string;                   //索引名

const Fields:string;                    //索引字段,多个用;隔开

options:TIndexOptions;              //选项[IxPrimary,IxUnique,ixDescending,ixCaseInsensitive]

const  DescFields:string;             //降序排列字段

const CaseInFields:string            //不区分大小写字段

const GroupingLevel:integer        //分组级别

);

AddIndexDef用法跟上面类似,在with...do中设置相应属性

with ClientDataSet1.IndexDefs.AddIndexDef  do

begin

name:string;

CaseInsFields: string ;

DescFields: string;

Expression: string ;

Fields: string;

Options: TIndexOptions;

GroupingLevel: Integer;

end;

下例中使用AddIndex方法,如图:

***************************************************************************************************************************

具体操作:

***************************************************************************************************************************

DBGrid1.DataSource->DataSource1.DataSet->ClientDataSet1.ProviderName->DataSetProvider1.DataSet->

SQLDataset1.SQLConnection->SQLConnection1具体数据库(这里连接的是oracle中的EMP表);

SQLDataSet1.CommandText:=SELECT * FROM EMP;ClientDataSet1.Active:=true;

***************************************************************************************************************************

主要代码:

***************************************************************************************************************************

procedure TForm3.Button1Click(Sender: TObject);
begin
  if ClientDataSet1.IndexName=‘Index1‘ then
  begin
     Button1.Caption:=‘ENAME升序EMPNO降序‘;
     ClientDataSet1.IndexName:=‘Index2‘;
  end else
  begin
    ClientDataSet1.IndexName:=‘Index1‘;
    Button1.Caption:=‘EMPNO升序ENAME降序‘;
  end;
end;

procedure TForm3.DBGrid1TitleClick(Column: TColumn);
begin
if not Column.Field.IsBlob then // 不能给大二进制字段建立索引或排序
    ClientDataSet1.IndexFieldNames := Column.FieldName;
end;

procedure TForm3.FormCreate(Sender: TObject);
begin
   //EMPNO升序排序ENAME降序排列
  ClientDataSet1.AddIndex(‘Index1‘,‘EMPNO;ENAME‘,[],‘ENAME‘);
  //也可写成
  // ClientDataSet2.AddIndex(‘Index1‘,‘EMPNO,ENAME‘,[ixDescending],‘ENAME‘);//ixDescending被忽略
  // ENAME升序,EMPNO降序
  ClientDataSet1.AddIndex(‘Index2‘,‘EMPNO;ENAME‘,[],‘EMPNO‘);
  ClientDataSet1.IndexName:=‘Index1‘;
end;

注意:如果只想对当想缓冲区中的数据排序要用TempClientDataSet.CloneCursor方法克隆到TempClientDataSet或直接用TempClientDataSet.Data:=ClientDataSet1.Data,把ClientDataSet1缓冲区中的数据复制到TempClientDataSet中,ClientDataSet2中的数据就与数据源分离了,再对TempClientDataSet排序。如果不分离数据源就排序,ClientDataSet1会把表中的所有数据读到本地再排序。

时间: 2024-11-04 13:30:00

ClientDataSet建立索引和排序的相关文章

使用NOSQL的MongoDB时建立索引需要注意的几点建议和Explain优化分析

第一,MongoDB索引和MySQL索引非常相似并且对于MySQL的索引优化有很多也适用于MongoDB. 第二,更重要的是,这些索引的建立对你的应用提高也是有限的. 对于应用的最佳索引策略应该基于很多的重要因素.包含了你期望查询的类型, 数据读取与写入的比率,甚至于你服务器的空闲内存.意思就是, 需要对线上的产品做很多的测试剖析工作,才能调整出最佳的索引策略. 没有什么好的方法可以替代实际经验的. 索引策略 下面有些索引的基本法则 创建的索引要匹配查询. 如果你仅仅要查询单个字段.索引这个字段

普通索引的建立及普通索引的排序

本文为博主原创,转载请注明出处: 在实际应用索引时,在建表的同时建立索引,即在建表的sql中添加建立索引的sql,应用实例如下: CREATE TABLE tbl_camera_info ( `cameraId` varchar(64) NOT NULL COMMENT '镜头唯一编号,统一监控平台', `cameraName` varchar(128) NOT NULL COMMENT '镜头名称', `clientId` varchar(64) NOT NULL COMMENT '所属客户编

mysql 建立索引场合及索引使用

索引建立场合: ① where后边字段 适合建立索引 ② order by 排序字段适合建立索引 ③ 索引覆盖 即 所要查询的字段本身就是索引 直接在索引中查询数据. 例如 select name,age from man 其中name,age 本身具有索引. ④ 连表查询 (外键设置索引) 在生产活动中,一般不使用外键索引.而是使用普通索引代替外键索引. ⑤建立索引字段需要离散度较高字段,例如性别这种字段不适合建立索引,(建立也会用不上索引会走表扫描形式) 索引使用原则 ① 字段独立 sele

对聚集表查询的时候,未显式指定排序列的时候,默认查询结果的顺序一定是按照聚集索引顺序排序的吗

在sql server 中,如果一张表存在聚集索引的时候,大多数情况下,如果进行select * from TableName查询,默认的返回顺序是按照聚集所在列的顺序返回的 但是,在一张表存在聚集索引的时候,并不一定所有的情况都是按照聚集索引列的顺序排列的, 下面开始测试 create table TestDefaultOrder ( Id int identity(1,1) primary key,--主键上默认会建立聚集索引 Col2 char(5), COL3 char(5) ) --写

Oracle 建立索引及SQL优化

Oracle 建立索引及SQL优化 数据库索引: 索引有单列索引 复合索引之说 如何某表的某个字段有主键约束和唯一性约束,则Oracle 则会自动在相应的约束列上建议唯一索引.数据库索引主要进行提高访问速度. 建设原则: 1.索引应该经常建在Where 子句经常用到的列上.如果某个大表经常使用某个字段进行查询,并且检索行数小于总表行数的5%.则应该考虑. 2.对于两表连接的字段,应该建立索引.如果经常在某表的一个字段进行Order By 则也经过进行索引. 3.不应该在小表上建设索引. 优缺点:

MySQL建立索引的基础规则

1.mysql索引(基础与规则) 索引规则: 一. MySQL建表,字段需设置为非空,需设置字段默认值. 二. MySQL建表,字段需NULL时,需设置字段默认值,默认值不为NULL. 三. MySQL建表,如果字段等价于外键,应在该字段加索引. 四. MySQL建表,不同表之间的相同属性值的字段,列类型,类型长度,是否非空,是否默认值,需保持一致,否则无法正确使用索引进行关联对比. 五. MySQL使用时,一条SQL语句只能使用一个表的一个索引.所有的字段类型都可以索引,多列索引的属性最多15

数据库为何要建立索引的原因说明

数据库索引是为了增加查询速度而对表字段附加的一种标识.见过很多人机械的理解索引的概念,认为增加索引只有好处没有坏处. 这里想把之前的索引学习笔记总结一下: 首先明白为什么索引会增加速度,DB在执行一条Sql语句的时候,默认的方式是根据搜索条件进行全表扫描,遇到匹配条件的就加入搜索结果集合.如果我们对某一字段增加索引,查询时就会先去索引列表中一次定位到特定值的行数,大大减少遍历匹配的行数,所以能明显增加查询的速度.那么在任何时候都应该加索引么?这里有几个反例:1.如果每次都需要取到所有表记录,无论

mysql_建立索引的优缺点 #转自Starzm#

建立索引的优缺点: 为什么要创建索引呢? 这是因为,创建索引可以大大提高系统的性能.         第一.通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性.         第二.可以大大加快 数据的检索速度,这也是创建索引的最主要的原因.         第三.可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义.         第四.在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间.         第五.通过使用索引,可以在查询的过程中

mysql_建立索引的优缺点

http://blog.csdn.net/superit401/article/details/51291603 建立索引的优缺点: 为什么要创建索引呢? 这是因为,创建索引可以大大提高系统的性能.         第一.通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性.         第二.可以大大加快 数据的检索速度,这也是创建索引的最主要的原因.         第三.可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义.         第四.在使用分组和排序子