簡體   English   中英

索引在FDQuery中不起作用

[英]Indexes don't work in FDQuery

我有一個FDQuery,可以將數據提供給網格。
當用戶點擊列時,我希望網格在該列上排序。 因為我希望能夠對多列進行排序,所以我無法使用網格的自動排序選項。

我在我的概念證明中嘗試了以下代碼。 但它不起作用。

procedure TForm31.JvDBGrid1TitleBtnClick(Sender: TObject; ACol: Integer;
  Field: TField);
const
  sDesc = 1;
  sASC = 2;
  sNone = 0;
var
  i: integer;
  SortClause: string;
  AField: TField;
  AIndex: TFDIndex;
begin
  case Field.Tag of
    sDesc: Field.Tag:= sASC;
    sASC: Field.Tag:= sNone;
    sNone: Field.Tag:= sDesc;
  end;
  SortClause:= '';
  FDQuery1.Indexes.BeginUpdate;
  try
    FDQuery1.Indexes.Clear;
    for i:= 0 to JvDBGrid1.Columns.Count - 1 do begin
      AField:= JvDBGrid1.Columns[i].Field;
      if AField.Tag <> sNone then begin
        AIndex:= FDQuery1.Indexes.Add;
        AIndex.Name:= AField.FieldName;
        AIndex.Fields:= AField.FieldName;
        //AIndex.Options:= [soNoCase, soNullFirst, soDescNullLast, soDescending, soUnique, soPrimary, soNoSymbols]
        case AField.Tag of
          sDESC: AIndex.Options:= [soDescNullLast];
          sASC: AIndex.Options:= [];
        end;
        AIndex.Active:= true;
      end;
    end;
  finally
    FDQuery1.Indexes.EndUpdate;
    FDQuery1.Refresh;
  end;
end;

Query是否已經有order by子句並不重要。

我究竟做錯了什么?

PS我寧願不依賴於構建自定義的order by子句,但我知道這是一個選項。

我想你可能會錯過一個步驟,即將FDQuery的IndexName設置為添加的索引的名稱。 顯然。 設置添加的索引的Active屬性不足。

對於MS Sql Server pubs數據庫Authors表,以下工作正常。

procedure TForm1.AddFDIndex;
var
  AIndex : TFDIndex;
begin
  AIndex := FDQuery1.Indexes.Add;
  AIndex.Name := 'ByCityThenlname';
  AIndex.Fields := 'city;au_lname';
  AIndex.Active := True;
  FDQuery1.IndexName := AIndex.Name;
end;

順便說一下,如果標記了多個列被包含在索引中,我不確定你的代碼應該做什么,但我會把它留給你; =)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM