【问题标题】:Indexes don't work in FDQuery索引在 FDQuery 中不起作用
【发布时间】:2016-02-02 19:15:31
【问题描述】:

我有一个向网格提供数据的 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;

查询是否已经有order by 子句并不重要。

我做错了什么?

附:我宁愿不求助于构建自定义 order by 子句,但我知道这是一种选择。

【问题讨论】:

    标签: sorting delphi firedac


    【解决方案1】:

    我认为您可能遗漏了一个步骤,即将 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;
    

    顺便说一句,如果将多个列标记为包含在索引中,我不确定你的代码应该做什么,但我会把它留给你 ;=)

    【讨论】:

    • 可能值得一提的是,TFDIndex 的 OLH 表示“如果 Selected 为 True 或 IndexName 设置为此视图的名称,则该视图在数据集中成为当前视图。”虽然我承认我还没有掌握 TFDIndex 中视图的概念。
    • 好的,试试看,看看如何处理多个索引 asc/desc
    • 我的代码对你有用吗?我希望它回答了您问题中的“我做错了什么”部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-06
    • 2014-09-15
    • 2012-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多