2008-10-06 34 views
0

我有這樣的代碼:如何連接VB中的兩個多維數組?

rs1 = getResults(sSQL1) 
rs2 = getResults(sSQL2) 

RS1和RS2和二維數組。第一個索引表示列數(靜態),第二個索引表示行數(動態)。

我需要加入兩個數組並將它們存儲在rs3中。我不知道什麼類型的rs1和rs2是。

回答

1

我已經想通了。事實證明,我一直在以正確的方式進行,我剛剛得到了一個。你也不需要第三個數組。

 aRS_RU = rowsQuery(sSQL & ", 'RU'") 
     aRS_KR = rowsQuery(sSQL & ", 'KR'") 

     uboundRU1 = UBound(aRS_RU, 1) 
     uboundRU2 = UBound(aRS_RU, 2) 
     uboundKR2 = Ubound(aRS_KR, 2) 

     ' Redim original array 
     ReDim Preserve aRS_RU(uboundRU1, uboundRU2 + uboundKR2 + 1) 
     uboundRU2 = UBound(aRS_RU, 2) 

     ' Add the values from the second array    
     For m = LBound(aRS_KR, 1) To UBound(aRS_KR, 1)  'Loop for 1st dimension 
      For n = LBound(aRS_KR, 2) To UBound(aRS_KR, 2) 'Loop for 2nd dimension 
       aRS_RU(m, uboundRU2 + n) = aRS_KR(m,n) 
      Next 
     Next   
1

你確定這些列會匹配嗎?因爲如果情況並非如此,我不知道你會如何以任何語言以通用的方式進行操作。如果是的話,那麼你也許可以做到這一點非常簡單像這樣:

rs1 = getResults(sSQL1 & " UNION " sSQL2) 
+0

是的,我確定。他們都執行相同的存儲過程(我知道,但我沒有寫這個,我只需要維護它) – ilitirit 2008-10-06 16:02:25

0

我知道這篇文章是舊的,但我修改了代碼來修復它在執行過程中遇到的一些錯誤。以下代碼示例適用於我:

Sub ConcatRecordSets(ByRef avFirstRS As Variant, ByRef avSecondRS As Variant) 

    Dim lIndex1 As Long, lIndex2 As Long 
    Dim lFirstRSSize As Long, lSecondRSSize As Long 

    ' Redim original array 
    lFirstRSSize = UBound(avFirstRS, 2) - LBound(avFirstRS, 2) + 1 
    lSecondRSSize = UBound(avSecondRS, 2) - LBound(avSecondRS, 2) + 1 
    ReDim Preserve avFirstRS(LBound(avFirstRS, 1) To UBound(avFirstRS, 1), LBound(avFirstRS, 2) To UBound(avFirstRS, 2) + lSecondRSSize) 

    ' Add the values from the second array 
    For lIndex1 = LBound(avSecondRS, 1) To UBound(avSecondRS, 1)  ' Loop for 1st dimension 
     For lIndex2 = LBound(avSecondRS, 2) To UBound(avSecondRS, 2) ' Loop for 2nd dimension 
      avFirstRS(lIndex1, lFirstRSSize + lIndex2) = avSecondRS(lIndex1, lIndex2) 
     Next lIndex2 
    Next lIndex1 

End Sub 
+1

爲什麼你不使用Array.Resize + Array.Copy? – 2012-05-30 02:49:06