gpt4 book ai didi

delphi - 如何对计算字段上的 ClientDataSet 进行排序?

转载 作者:行者123 更新时间:2023-12-03 15:56:31 26 4
gpt4 key购买 nike

我试图在计算的 bool 字段上对 ClientDataSet 进行排序,但由于某种原因,数据未排序。我有一个名为 Highlight 的 bool 字段,其中 FieldKind 设置为 fkInternalCalc,索引定义如下:

IndexDefs[0].DescFields = 'Highlight';
IndexDefs[0].Fields = 'Highlight;PatNo';
IndexDefs[0].Name = 'PatNo';
IndexDefs[0].Options = [ixDescending];

显然我已将客户端数据集的 IndexName 设置为 'PatNo'。当我运行应用程序时,CDS 中的数据仅按 PatNo 字段排序。有什么想法吗?

最佳答案

Ime,在包含 fkInternalCalc 字段的复合索引上对 ClientDatasSet 建立索引效果很好。

下面的代码适用于 D7 和 XE6,并且 Midas.Dll 版本相隔十年,给出

screenshot

所以,除非 XE2 中存在某种回归,否则我会怀疑所报告的问题在 OP 末尾的某些内容中。

 // tested with:
// midas.dll 7.1.1692.668 30 August 2004
// midas.dll 20.0.16277.1276 16 June 2014

procedure TForm1.SetUp;
var
Field : TField;
i : Integer;
begin
Field := TIntegerField.Create(Self);
Field.FieldName := 'PatNo';
Field.FieldKind := fkData;
Field.Index := 0;
Field.DataSet := CDS;

Field := TBooleanField.Create(Self);
Field.FieldName := 'HighLight';
Field.FieldKind := fkInternalCalc;
Field.Index := 1;
Field.DataSet := CDS;

CDS.OnCalcFields := CDSCalcFields;

CDS.CreateDataSet;
for i := 1 to 10 do begin
CDS.Insert;
CDS.FieldByName('PatNo').AsInteger := i;
CDS.Post;
end;
end;

procedure TForm1.CDSCalcFields(DataSet: TDataSet);
var
Value : Integer;
begin
Value := DataSet.FieldByName('PatNo').AsInteger;
DataSet.FieldByName('Highlight').AsBoolean := Odd(Value);
end;

const
scIndexName = 'PatNo';
scHighlight = 'Highlight';

procedure TForm1.AddHLIndex;
var
IndexDef : TIndexDef;
begin
IndexDef := TIndexDef.Create(CDS.IndexDefs, scIndexName, 'Highlight;PatNo', [ixDescending]);
IndexDef.DescFields := scHighlight;
CDS.IndexName := scIndexName;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
AddHLIndex;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
SetUp;
end;

关于delphi - 如何对计算字段上的 ClientDataSet 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17896329/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com