我遇到了這個奇怪的問題:VBA Recordset.GetRows返回不完整結果集
我有一個MSSQL存儲過程性能差,所以我重寫它。重寫後,如果從SSMS或控制檯調用,新的存儲過程仍然可以返回相同的結果。但是當被VBA調用時,返回結果的幾列是空的。
設置康恩=新ADODB.Connection conn.Open strConnection
Set rs = New ADODB.Recordset
Set cmd = New ADODB.Command
cmd.ActiveConnection = conn
cmd.CommandText = "[ops].[spReportsDoAnalyticsForAllProducts]"
cmd.CommandType = adCmdStoredProc
cmd.Parameters.Refresh
cmd.Properties.Refresh
cmd.Parameters.Append cmd.CreateParameter("runId", adInteger, adParamInput)
cmd("runid") = runid
Set rs = cmd.Execute
If Not rs.EOF Then
data = rs.GetRows
hasData = True
End If
rs.Close
Set rs = Nothing
conn.Close
Set conn = Nothing
以上是VBA代碼,rs.GetRows是返回我不完全的結果之一。我被迫使用下面的代碼來替換它,並手動填充的結果VBA:
While Not rs.EOF
ReDim Preserve data(rs.Fields.count - 1, count)
For i = 0 To rs.Fields.count - 1
data(i, count) = rs.Fields(i).Value
Next i
count = count + 1
rs.MoveNext
Wend
我想知道造成GetRows的沒有工作,但場仍在工作的真正原因,還是有任何替代品,我可以使用,而不是while循環。
嘗試在調用rs.GetRows之前調用行上的rs.MoveLast。 – 2014-10-01 09:21:32
如果您最後一次移動,則不會提取任何數據。 – rexwolf 2014-10-02 05:36:15
奇怪的是,在掙扎的日子之後,它自己治好了! getRows突然沒有任何代碼或數據庫更改工作。然而,我仍然想知道是什麼原因... – rexwolf 2014-10-02 05:42:22