** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Elementos en una matríz
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoElementos en una matríz

 Responder Responder
Autor
Mensaje
emiliove Ver desplegable
Administrador
Administrador


Unido: 16/Junio/2009
Localización: Mexico
Estado: Sin conexión
Puntos: 5694
Enlace directo a este mensaje Tema: Elementos en una matríz
    Enviado: 14/Septiembre/2019 a las 19:35
Buenas Tardes a todos

Lo que pretendo es meter Elementos a una Matríz, de una dimensión del estilo:
Dim n(0 To 7) As Double
   
    n(0) = 12.344
    n(1) = 12.345
    n(2) = 12.346
    n(3) = 12.354
    n(4) = 12.355
    n(5) = 12.356

Pero no se hasta que numero va a llegar, y los tomo de un subformulario mas o menos así:

Private Sub Comando17_Click()
Dim contar As Integer
contar = Me.SubDETALLE.Form.Recordset.RecordCount
Dim cont As Integer
cont = 0
Dim arrIVA(4) As Variant
With Me.SubDETALLE.Form.RecordsetClone
.MoveFirst
Do Until .EOF
arrIVA(cont) = !IVA
    .MoveNext
    cont = cont + 1
    Loop
End With
Debug.Print arrIVA(1), arrIVA(0), arrIVA(3)
End Sub

Y efectivamente me da el resultado, pero como es variable quiero asignar yo el valor aquí:
Dim arrIVA(4) As Variant  poder poner el valor de contar-1

Lo hice también con Getrows y me da el resultado pero de dos dimensiones y no se como hacer que sea de una sola dimensión, para poder usarlo.

Saludos y buen fin de semana.
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14720
Enlace directo a este mensaje Enviado: 14/Septiembre/2019 a las 20:05
A lo mejor se me escapa algo pero...¿no te vale un ReDim?

Dim arrIVA() As variant
ReDim arrIVA(Me.SubDetalle.Form.RecordsetClone.RecordCount)

Un saludo
Xavi, un minyó de Terrassa

Mi web
Arriba
guarracuco Ver desplegable
Moderador
Moderador


Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 3239
Enlace directo a este mensaje Enviado: 15/Septiembre/2019 a las 05:07
Prueba esto. Solo cambia el nombre de tu tabla.

Sub rows()
Dim db As Database, rs As DAO.Recordset, rows As Variant, ivaArr(), row As Integer, col As Integer, q As Integer

Set db = CurrentDb
Set rs = db.OpenRecordset("select * from [table1];")
rs.MoveLast: rs.MoveFirst
rows = rs.getrows(rs.RecordCount)
rs.Close
Set rs = Nothing
db.Close
Set db = Nothing

If IsArray(rows) And UBound(rows) > 0 Then
    q = UBound(rows, 2) ' la columna dos, indica la cantidad de registros
    ReDim Preserve ivaArr(q + 1)
   
    'si la cantidad de registros es grande, utiliza un objeto dictionary (arreglo indexado)
    Dim ivaObj As Object
    Set ivaObj = CreateObject("scripting.dictionary")
   
    For row = 0 To UBound(rows, 2)
        For col = 0 To UBound(rows, 1)
            'suponiendo que el campo IVA es el tercer campo
            Debug.Print rows(col, row)
            If col = 2 Then
                ivaArr(row) = rows(col, row)
               
                'agregando al dictionary
                ivaObj.Add row, rows(col, row)
            End If
        Next
    Next
   
    'comprobando que el arreglo iva tiene valores y su recorrido
    If IsArray(ivaArr) And UBound(ivaArr) > 0 Then
        For row = 0 To UBound(ivaArr) - 1
            Debug.Print "iva(" & row + 1 & ") :" & ivaArr(row)
        Next
    End If
   
    'recorriendo el dictionary
    If IsObject(ivaObj) And ivaObj.count > 0 Then
        For Each itm In ivaObj.keys
            Debug.Print ivaObj(itm)
        Next
    End If
End If
End Sub
Arriba
guarracuco Ver desplegable
Moderador
Moderador


Unido: 24/Abril/2004
Localización: EEUU
Estado: Sin conexión
Puntos: 3239
Enlace directo a este mensaje Enviado: 15/Septiembre/2019 a las 05:08
El Preserve se utiliza cuando el arreglo ya tiene informacion y deseas conservarla. En este caso no es necesaria.
Arriba
emiliove Ver desplegable
Administrador
Administrador


Unido: 16/Junio/2009
Localización: Mexico
Estado: Sin conexión
Puntos: 5694
Enlace directo a este mensaje Enviado: 18/Septiembre/2019 a las 21:14
Hola a todos

Xavi, no se te escapa nada y con ReDim funciona perfectamente.

Carlos sigo con tu función y es muy interesante sigo en estudio.

Por lo pronto gracias a ambos y podemos cerrar.

Saludos.
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable