码迷,mamicode.com
首页 > 编程语言 > 详细

ClientDataSet建立索引和排序

时间:2017-03-06 19:23:19      阅读:752      评论:0      收藏:0      [点我收藏+]

标签:.sql   one   排序   代码   else   int   field   克隆   provider   

可用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会把表中的所有数据读到本地再排序。

ClientDataSet建立索引和排序

标签:.sql   one   排序   代码   else   int   field   克隆   provider   

原文地址:http://www.cnblogs.com/sun998/p/6511417.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!