声明和初始化 TVarRec(const 数组)参数
Declaring and initializing TVarRec (array of const) params
我想定义一个可以在 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;
我想定义一个可以在 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;