声明并初始化TVarRec(const数组)参数

时间:2015-06-01 16:36:25

标签: delphi delphi-xe

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

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;

1 个答案:

答案 0 :(得分:2)

这不是它的工作方式。您以不同方式创建数组:

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;