Problema con un array de 2 dimensiones

Hola me llamo José Enrique. Tengo un programa en Visual Basic en que voy guardando todos los registros de un Recordset en un array. Este el código:
Dim cRegistros() as String
< aqui cargo el objeto OBjRecordset>
While Not ObjRecordset.EOF
ReDim Preserve cRegistros(iNumFilas, iMaxCampos) As String
iCampo = 0
While iCampo <= iMaxCampos - 1
cRegistros(iNumFilas, iCampo) = ObjRecordset.Fields(iCampo).Value
iCampo = iCampo + 1
Wend
iNumFilas = iNumFilas + 1
ObjRecordset.MoveNext
Wend
Y con el segundo registro al hacer el Redim me da error: algo como indice fuera de rango, ¿sabrías decirme por que?
Gracias anticipadamente por tu ayuda
José Enrique

1 respuesta

Respuesta
1
José Enrique,
El error que te salia era debido a que estabas usando la palabra clave "Preserve".
Si utiliza la palabra clave Preserve sólo puede cambiar el tamaño de la última dimensión de la matriz y no es posible cambiar el número de dimensiones. Por ejemplo, si la matriz sólo tiene una dimensión, puede cambiar el tamaño de esa dimensión porque es la última y única dimensión. Sin embargo, si la matriz tiene dos o más dimensiones, sólo puede cambiar la dimensión de la última y todavía conservar el contenido de la matriz.
He realizado un ejemplo que funciona que elimina el error que te producía.
Espero que te sirva:
Private Sub Command1_Click()
Dim Conexion As New Connection
Dim ObjRecordset As New Recordset
Dim cRegistros() As String
Const iMaxCampos = 4
Conexion.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\Tables.xls;Extended Properties=Excel 8.0"
With ObjRecordset
.Source = "SELECT * FROM [Hoja1$]"
.ActiveConnection = Conexion
.CursorType = adOpenStatic
.CursorLocation = adUseClient
.LockType = adLockOptimistic
End With
ObjRecordset.Open
While Not ObjRecordset.EOF
ReDim cRegistros(INumFilas, iMaxCampos) As String
iCampo = 0
While iCampo <= iMaxCampos - 1
cRegistros(INumFilas, iCampo) = ObjRecordset.Fields(iCampo).Value
iCampo = iCampo + 1
Wend
INumFilas = INumFilas + 1
ObjRecordset.MoveNext
Wend
ObjRecordset.Close
Conexion.Close
Set ObjRecordset = Nothing
Set Conexion = Nothing
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas