gpt4 book ai didi

delphi - TClient数据集: Is there a way to make a StringField behave like an IntegerField when setting an index?

转载 作者:行者123 更新时间:2023-12-03 15:41:44 27 4
gpt4 key购买 nike

我想通过包含整数的 StringFieldClientDataset 进行排序。这些整数用作发票上的项目编号。当我使用简单索引按该字段对 ClientDataset 进行排序时,结果如下:

1
10
100
101
11
110
111
12
120

但是我希望它们像 IntegerField 一样排序:

1
10
11
12
100
101
110
111
120

有没有快速的方法来做到这一点?

最佳答案

您无需将现有字段更改为其他类型。相反,一种实现您想要的方法是在 CDS 上定义一个 ftInteger 字段,它是 FieldFind fkInternalCalc 的字段。然后在 CDS 的 OnCalcFields 事件中,通过将字符串字段的值转换为整数来设置字段的值。

设置计算字段的 find tp fkInternalCalc 的要点是 CDS 可以在 fkInternalCalc 字段上建立索引,因此可以按 fkInternalCalc 字段排序,这与 fkCalculated 字段不同。因此,通过在添加的 fkInternalCalc 字段上对 CDS 进行索引,记录应按数字顺序显示,而不是字符串字段的字母数字顺序。

代码:

procedure TForm1.CDS1CalcFields(DataSet: TDataSet);
begin
if CDS1IntField.IsNull then
CDS1IntField.AsInteger := StrToInt(CDS1StringField.AsString);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
i : Integer;
begin
CDS1.CreateDataSet;
for i := 1 to 100 do
CDS1.InsertRecord([IntToStr(i)]);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
CDS1.IndexFieldNames := 'IntField';
end;

关于delphi - TClient数据集: Is there a way to make a StringField behave like an IntegerField when setting an index?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48060840/

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