利用TTable连接一个Paradox数据库表,建立了一个二次索引字段(如Depth),用于数据排序。在程序设计阶段,将Table的IndexName设置为该索引字段名,但是,程序一运行,就报错说“Index out of date”。这是什么原因那?另外如何才能实现TTable数据表的排序呀?

解决方案 »

  1.   

    with Table1 do
    begin
      IndexDefs.Add('index1','yourField1;yourField2',[ixCaseInsensitive, ixDescending]);
      IndexDefs[0].CaseInsFields := 'yourField1';
      IndexDefs[0].DescFields := 'yourField2';
      IndexName := 'index1';
      Active := true;
    end;(注:還可手動設定)
      

  2.   

    不行呀。
    在设计期我手动设定Table1的IndexDefs属性,设置一个IndexDefs[0],定义了其Fields为一个数据库字段名,其它属性未设置。
    在运行时,如下代码:
    procedure TForm1.N7Click(Sender: TObject);
    var
      I:Integer;
    begin
      Table1.Active:=false;
      Table1.Exclusive:=true;
      Table1.IndexDefs.Update;
      for I:=0 to Table1.IndexDefs.Count-1 do
        if Table1.IndexDefs[I].Fields='PosStart' then
          Table1.IndexName :=Table1.IndexDefs.Items[I].Name;
      Table1.Exclusive:=false;
      Table1.Active:=true;
    end;可是程序报错说:"Index out of date".是什么原因啊。
      

  3.   

    table1.sort:=table1.indexdefs.items[i].name
      

  4.   

    実在不行、在Paradox数据库環境下建一個索引文件。CREATE INDEX yourIndex 
    ON yourTable ( yourField1, yourField2 )
      

  5.   

    其实答案就在以下的问题中
    http://community.csdn.net/Expert/topic/2741/2741282.xml?temp=.8439447
    只不过换个事件就可以了。
      

  6.   

    procedure TFormMain.MyDBGridTitleClick(Column: TColumn);
    var i:integer;
    begin
     if AdoQCX.Sort = Column.FieldName then    
       begin
         For i:=0 to MyDBGrid.Columns.Count-1 do
           MyDBGrid.Columns[i].Title.RestoreDefaults;     AdoQCX.Sort := Column.FieldName + ' DESC';
         Column.Title.Font.Color:=clPurple;    
       end
     else begin
       For i:=0 to MyDBGrid.Columns.Count-1 do
         MyDBGrid.Columns[i].Title.RestoreDefaults;   AdoQCX.Sort := Column.FieldName;
       Column.Title.Font.Color:=clBlue;   
       end;
    end;
      

  7.   

    to y31307 and anbangs:我用的是BDE的TTable,而不是ADO的TADOTable。TTable没有Sort属性,我看了TTable的帮助,似乎只能用IndexName属性来实现排序。