gpt4 book ai didi

delphi - 声明并初始化 TVarRec(常量数组)参数

转载 作者:行者123 更新时间:2023-12-02 02:41:33 26 4
gpt4 key购买 nike

我想定义一个可以在 TClientDataSet SetRange 方法中进一步使用的 var 或 const:

var
lRangeStart : array of TVarRec;
lRangeEnd : array of TVarRec;

procedure SetRange;
begin

SetLength (lRangeStart, 2);
SetLength (lRangeEnd , 2);

lRangeStart [0] := Field1; // Incompatible types tVarRect and Integer
lRangeStart [1] := Field2; // Incompatible types tVarRect and Integer
lRangeEnd [0] := Field1; // Incompatible types tVarRect and Integer
lRangeEnd [1] := Field2; // Incompatible types tVarRect and Integer

MyDataSet.SetRange (lRangeStart, lRangeEnd);

end;

最佳答案

事情不是这样的。您以不同的方式创建数组:

MyDataSet.SetRange([Field1, Field2], [Field1, Field2]);

编译器负责为您生成各种 TVarRec 记录。

如果索引中的列属于不同类型,您还可以使用混合类型:

MyDataSet.SetRange([1, 'Testing'], [1, 'Testing']);

要使用用户输入,只需将用户输入分配给变量,进行任何必要的类型转换,然后传入变量即可。

var
Val1, Val2: Integer;
begin
Val1 := StrToInt(Edit1.Text);
Val2 := StrToInt(Edit2.Text);
MyDataSet.SetRange([Val1, Val2], [Val1, Val2]);
end;

或者,您可以进行内联转换,但由于类型无效而导致的异常是一个问题:

MyDataSet.SetRange([StrToInt(Edit1.Text), StrToInt(Edit2.Text)],
StrToInt(Edit1.Text), StrToInt(Edit2.Text)]);

为了自己执行此操作,您必须显式分配给每个元素的适当类型(这违背了使用 const 数组的大部分目的,即能够动态创建它在您的代码和混合类型中):

SetLength(lRangeStart, 2);
lRangeStart[0].vInteger := 1;
lRangeStart[1].vInteger := 2;

关于delphi - 声明并初始化 TVarRec(常量数组)参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30578692/

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