2017-01-30 14 views
0

現狀:錯誤而從Access字段存儲記錄在陣列

我有這樣的代碼存儲所有從外地貨物ID在數組中的記錄叫arrayShipmentID

Dim conn As New ADODB.Connection 
Dim connStr As String 
Dim rs As ADODB.Recordset 
Dim ShipmentIDSQL As String 
Dim arrayShipmentID() As Variant 

connStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & "P:\PathToTheAccessDatabase\" & "NewVersion.accdb" & ";" 
conn.ConnectionString = connStr 
conn.Open 

' Store Shipment IDs 
    Set rs = New ADODB.Recordset 
    ShipmentIDSQL = "SELECT [Shipment ID] FROM 12Dec" 
    rs.Open ShipmentIDSQL, conn, adOpenStatic, adLockReadOnly, adCmdText 
    If Not rs.EOF Then 
     arrayShipmentID = rs.GetRows 
    End If 
    Dim i As Integer 
    For i = 0 To UBound(arrayShipmentID, 2) 
     Debug.Print arrayShipmentID(0, i) 
    Next i 
    Set rs = Nothing 

爲了確保它能正常工作我Debug.Print數組的每個元素。

問題:

此代碼工作的大部分時間,但由於某些原因,有時我得到一個值「下標越界」(而不是181在我的情況)爲MsgBox UBound(arrayShipmentID, 2),當然在這種情況下,Debug.Print不會在即時窗口中顯示任何內容。

任何想法可能來自哪裏?

回答

0

使用DAO記錄集時,您經常必須找到記錄數以檢索所有記錄。這可能是ADO以及情況:

RecordCount = ' Obtain true count of records. 
arrayShipmentID = rs.GetRows(RecordCount) 

另外,我常變量聲明爲一個簡單的變體:

Dim arrayShipmentID As Variant