使用控件
WordChooser_Table:TADODataSet 连接数据库。初始化时建立下列索引:procedure TForm1.defineOrderIndex;
begin
   //定义几个排序索引
  //word降序;
  WordChooser_Table.IndexDefs.Add('wordDesc','word',[ixDescending,ixCaseInsensitive]);
  WordChooser_Table.IndexDefs[0].DescFields := 'word';  //降序排列
  WordChooser_Table.IndexDefs[0].CaseInsFields := 'word';//大小写不敏感的
  //FaultCounter_E_C降序;word升序
  WordChooser_Table.IndexDefs.Add('FC_E2CDesc','FaultCounter_E_C;word',[ixDescending,ixCaseInsensitive]);
  WordChooser_Table.IndexDefs[1].DescFields := 'FaultCounter_E_C';  //降序排列
  WordChooser_Table.IndexDefs[1].CaseInsFields := 'word';//大小写不敏感的
  //FaultCounter_C_E降序,word升序
  WordChooser_Table.IndexDefs.Add('FC_C2EDesc','FaultCounter_C_E;word',[ixDescending,ixCaseInsensitive]);
  WordChooser_Table.IndexDefs[2].DescFields := 'FaultCounter_C_E';  //降序排列
  WordChooser_Table.IndexDefs[2].CaseInsFields := 'word';//大小写不敏感的
  //WordChooser_Table.IndexDefs.Update;
  
end;然后在DBGrid的OnTitleClick事件中调用这些索引:procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin  //showmessage(IntToStr(WordChooser_Table.IndexDefs.Count));
  case Column.Index of
    0: WordChooser_Table.IndexFieldNames := 'id';
    1: WordChooser_Table.IndexFieldNames := 'word';
    3: begin
       WordChooser_Table.IndexName := 'FC_E2CDesc';
       //word_Table.Active:=true;
       end;
    4: word_Table.IndexName := 'FC_C2EDesc';
  end;
end;程序运行后如果是进入到case3或者case4总是报错:
    raised Exception Class EOleException with message '当前提供程序不支持“索引”功能必须的界面'.请问这个问题怎么解决?谢谢!

解决方案 »

  1.   

    你为什么不用indexfieldnames而要用indexname呢,是不是这个原因
      

  2.   

    楼上的:indexfieldnames只能实现简单的升序排列。
      

  3.   

    用indexfieldnames,还有ado不是有个sort属性嘛,试试吧。
      

  4.   

    哎呀,你们看我的case0和case1,就用了indexfieldnames。它只能用于简单排序,没有任何问题,请不要再这样回答了!请高手进来。
      

  5.   

    with ADODataSet1 do
    begin
      Close;
      IndexDefs.Update;
      IndexDefs.Add('newIndex','username',[ixDescending,ixCaseInsensitive]);
      IndexDefs[0].DescFields := 'username';
      IndexName := 'newIndex';
      Open;
    end;説明:在「IndexDefs」之前、先要関閉「ADODataSet1」