VBA在运行时添加到数组
我试图在运行时根据记录集的结果创建一个int数组VBA在运行时添加到数组,vba,vb6,vbscript,Vba,Vb6,Vbscript,我试图在运行时根据记录集的结果创建一个int数组 Do While Not rstSearchResult.EOF If rstSearchResult(ID) = blah Then 'Add this Id rstSearchResult(ID) to Array End If Call rstSearchResult.MoveNext() Loop 我需要的是相同的结果,因为这将给我数组(35588,35589,35595)当我在excel中执行VBA时,我有一个用于访问
Do While Not rstSearchResult.EOF
If rstSearchResult(ID) = blah Then
'Add this Id rstSearchResult(ID) to Array
End If
Call rstSearchResult.MoveNext()
Loop
我需要的是相同的结果,因为这将给我
数组(35588,35589,35595)
当我在excel中执行VBA时,我有一个用于访问DB的类,其中我有一个将记录集返回到数组的函数。希望下面的帮助
Public Function RSToArray(ByVal oRS, Optional ByVal iRows, Optional ByVal iStart, Optional ByVal aFieldsArray)
If iRows = 0 Then iRows = adGetRowsRest
If iStart = 0 Then iStart = adBookmarkfirst
RSToArray = "" ' return a string so user can check For (IsArray)
If IsObject(oRS) And oRS.State = adStateOpen Then
If Not oRS.BOF And Not oRS.EOF Then
If IsArray(aFieldsArray) Then
RSToArray = oRS.GetRows(iRows, iStart, aFieldsArray)
Else
If iRows <> adGetRowsRest Or iStart <> adBookmarkfirst Then
RSToArray = oRS.GetRows(iRows, iStart)
Else
RSToArray = oRS.GetRows()
End If
End If
End If
End If
End Function
公共函数RSToArray(ByVal oRS、可选ByVal iRows、可选ByVal iStart、可选ByVal AFieldArray)
如果iRows=0,则iRows=adGetRowsRest
如果iStart=0,则iStart=adbookmark
RSToArray=“”返回一个字符串,以便用户可以检查(IsArray)
如果IsObject(oRS)和oRS.State=adStateOpen,则
如果不是oRS.BOF和oRS.EOF,则
如果是IsArray(aFieldsArray),则
RSToArray=oRS.GetRows(iRows、iStart、AFieldArray)
其他的
如果iRows adGetRowsRest或iStart ADBOCKMARK先启动,则
RSToArray=oRS.GetRows(iRows、iStart)
其他的
RSToArray=oRS.GetRows()
如果结束
如果结束
如果结束
如果结束
端函数
当我需要从记录集复制到阵列时,将阵列重新分配到您想要的大小比在循环中重新分配要高效一些
Dim myIntArray() as Integer
Dim intDimension as Integer
rstSearchResult.Filter = "ID = " & blah
ReDim myIntArray(rstSearchResult.RecordCount - 1)
intDimension = 0
Do Until rstSearchResult.EOF
myIntArray(intDimension) = rstSearchResult!ID
intDimension = intDimension + 1
rstSearchResult.MoveNext
Loop
请注意,要使RecordCount正常工作,您需要以静态方式打开记录集
rstSearchResult.Open "tblSearchResult", cnn, adOpenStatic
您当前的代码生成什么?我不知道有多少个数字与条件匹配,因此如何添加到没有上限的数组中。这是我的问题。这应该行得通,只需注意,当数组变大时,它会变成一个巨大的内存占用器。无论如何,问题不是内存占用。问题是,这现在是一个O(n^2)算法,因为每次迭代都要将数组复制到一个新数组中。在循环之外重新定义是有意义的。因此,我在循环之前将其重拨一次到记录集的大小,然后在循环结束时再次将数组的大小调整到匹配结果的大小。谢谢你,迪恩
rstSearchResult.Open "tblSearchResult", cnn, adOpenStatic