2015-06-01 84 views
1

我想定义一个var或const,我可以的TClientdataSet SetRange方法还使用:声明和初始化TVarRec(常量数组)PARAMS

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

Ken。我的appologies。事实上,我想知道如果我没有得到答案,因为我的问题太多了,不要担心,我会尽可能的耐心。 – user2383818

+0

您编辑添加一个43分钟后请求帮助有时候问题需要几天(或几周或几个月)才能得到解答,在不到一个小时的时间内求援可能有点不合理,这里的人们会捐出时间帮助别人免费;要求他们做它似乎有点不考虑:-) –

回答

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; 
+0

添加谢谢,我希望用户选择Range的值,这就是为什么我需要使用变量分配这个值。 – user2383818

+0

你也不需要为它指定一个变量。您可以在数组中使用用户输入。我将编辑以显示如何。 –