2010-02-02 147 views
0

使用Sax ActiveX腳本(長話短說),我有3個嵌套if語句重用相同的返回變量。腳本看起來大致如下:VBScript:錯誤10023在:數組索引超出範圍(重新使用數組變量時遇到問題)

Dim rtnArray As Variant 
If variable1 <> "" Then 
    ' Perform SQL query against DB2 database 
    rtnArray = DB2SQLSearch(Query) 
    If UBound(rtnArray) = 0 Then 
     ' ditto 
     rtnArray = DB2SQLSearch(Query2) 
     MsgBox "Gets this far" 
     If UBound(rtnArray) = 0 Then ' Error! 
      ' Never make it here 

奇怪的是,這個相同的代碼結構在我上週寫的腳本中工作;我只是改變了一些查詢和函數的名字(find> replace)。

第二查詢後,我已經嘗試了MsgBox CStr(rtnArray(0)(0))但它產生Error 10025 in : Array has a different number of indexes.

錯誤代碼對應於以下手冊:
http://www.ftgsoftware.com/manuals/basic32.pdf

+0

謝謝你,海倫 – hewhocutsdown 2010-02-02 18:17:43

回答

0

想通了。

在這種特殊情況下,我連接的用戶對第一個表具有授權,但不是第二個。

這沒有發生錯誤,但有一條消息可以檢查是否有成功,所以我可以查找並拋出自己的錯誤,而不是傳回空數組。 (這不是一個正確的Null,坦率地說,我還沒有100%肯定它是什麼,除了一個Variant但它肯定不喜歡UBound()

+2

FYI:在正常的VBScript中,UBound在聲明爲'Dim arr()'的空數組上失敗(參見http://en.wiki.mcneel.com/default.aspx/McNeel/RsEmptyArray)。也許這是case。 – Helen 2010-02-02 18:36:28

+0

我宣稱我是一個變種;請參閱上面的代碼。 有趣的文章;我將不得不玩看看它對Sax有多大的影響。 – hewhocutsdown 2010-02-02 20:27:09

0

您可以將其存儲在另一個變量,或ReDim的rtnArray變量具有適當的大小。爲了Redim,你需要知道尺寸。

+0

不幸的是,它的查詢結果。!我不知道它會有多大,所以我不知道ReDim會工作。 在調試過程中,我試着創建第二個數組變量,只是爲了內部查詢,但我得到了相同的錯誤 – hewhocutsdown 2010-02-02 03:32:16