2009-12-04 136 views
1

這是使用VBScript的asp經典,不,它不會移動到.net任何東西,所以甚至不要問。VBScript函數創建一個二維數組,就像GetRows一樣

OK,所以經典的方式來獲得數據從數據庫中是使用GetRows的:

Dim MyRecords 
Dim rs, conn 
[...database opening stuff...] 
If Not rs.EOF Then 
    MyRecords = rs.GetRows 
End If 
[...close database & set to Nothing...] 

注MyRecords如何不變暗作爲一個數組;它只在GetRows呼叫後成爲一個。

我的問題是,如何在不使用GetRows的情況下做類似的事情?例如,如果數據需要來自Request.Form而不是數據庫? (比如「如果滿足條件,則從數據庫獲取數據,否則從表單獲取數據,但以相同的方式顯示數據,無論它來自哪裏」)。

vbScript中有Array函數,但它只能創建一維數組 - 它就像是我所知道的Split函數的有限版本。我需要兩個維度。 (向後兩個維度,毫不遜色,以匹配方式GetRows作品 - 即第一尺寸的列,所述第二尺寸的行。)

我不能使用動態陣列(Dim MyRecords(),後來ReDim MyRecords(x,y)),因爲那麼GetRows將會引發錯誤。

有沒有辦法做我想做的事情,還是我必須自己辭職來處理兩個不同的數組,一個用於數據庫,另一個用於表單?或者更糟的是,使用Do While循環來填充數據庫中的數組... ...//不寒而慄。

回答

4

只需使用: -

Dim MyRecords 

然後在以後使用

ReDim MyRecords(x, y) 

你並不需要聲明MyRecords作爲數組以將ReDim。

+0

我不敢相信我不知道這一點。謝謝! (我在閱讀你的答案後檢查了vbscript文檔,他們似乎暗示ReDim應該只用於動態數組[這是我模糊的記憶],但我只是用非數組測試它,並且它可以工作。 ) – Martha 2009-12-07 14:55:23

0

我已經接受了Anthony的答案,因爲這顯然是最簡單和最好的方式來進行,但這是我在閱讀他的答案之前想出的:使用返回數組的函數。也就是說,編寫一個「GetFormData」函數,使其自己的數組變量變暗,從窗體(或任何地方)填充它,然後將該數組賦值爲該函數的值。

Dim MyRecords 
If [something] Then 
    MyRecords = GetFormData([...]) 
Else 
    [...] 
    MyRecords = rs.GetRows 
    [...] 
End If 

Function GetFormData([...]) 
    Dim FormArray() 
    [...] 
    FormArray(i,j) = Request.Form(...) 
    [...] 
    GetFormData = FormArray 
End Function