2015-06-01 87 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

你也不需要爲它指定一個變量。您可以在數組中使用用戶輸入。我將編輯以顯示如何。 –