zoukankan      html  css  js  c++  java
  • 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会把表中的所有数据读到本地再排序。

  • 相关阅读:
    【转】如何使用分区助手完美迁移系统到SSD固态硬盘?
    mysql 使用正则表达式查询
    【转】ajax发送请求时候为什么会报拒绝设置不安全的header
    【转】如何修改 video 样式
    flashfxp软件设置并关联默认编辑器
    【转】Windows中设置Fiddler抓HTTPS请求的解决办法 Unable to configure Windows to Trust the Fiddler Root certificate .
    【转】观看视频时启用硬件加速有什么用?如果关闭硬件加速又有什么区别呢?
    【转】C盘不能扩展卷怎么回事 C盘扩展卷灰色的解决办法
    97. Interleaving String
    93. Restore IP Addresses
  • 原文地址:https://www.cnblogs.com/fhweixin/p/13744192.html
Copyright © 2011-2022 走看看