¿Cómo concatenar dos matrices multidimensionales en VB?
-
05-07-2019 - |
Pregunta
Tengo este código:
rs1 = getResults(sSQL1)
rs2 = getResults(sSQL2)
rs1 y rs2 y matrices 2D. El primer índice representa el número de columnas (estáticas) y el segundo índice representa el número de filas (dinámicas).
Necesito unir los dos arreglos y almacenarlos en rs3. No sé qué tipo de rs1 y rs2 son sin embargo.
Solución 2
Lo he descubierto. Resulta que lo estaba haciendo de la manera correcta todo el tiempo, solo estaba apagado por uno. Tampoco necesitas una tercera matriz.
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
Otros consejos
¿Estás seguro de que las columnas coincidirán? Porque si ese no es el caso, no sé cómo lo haría de forma genérica en cualquier idioma. Si es así, entonces probablemente podría hacerlo muy simplemente así:
rs1 = getResults(sSQL1 & " UNION " sSQL2)
Sé que esta publicación es antigua, pero adapté el código para corregir algunos errores que tuve durante su ejecución. El siguiente ejemplo de código funciona para mí:
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