Spanish [Solucionado] ¿ Como obtengo todos los datos de un List ?

Sergio Castellari

Active Member
Licensed User
Supongamos que tengo el siguiente codigo:
B4X:
  Dim aRegistros, aCampos As List
  aRegistros.Initialize
  aCampos.Initialize
  aCampos.Add(0)
  aCampos.Add("Saldo Inicial")
  aCampos.Add("What?")
  aCampos.Add(1535)
  aRegistros.Add(aCampos)
1) ¿ Como obtengo en variables individuales el contenido de aRegistros.Get(0) ?
2) ¿ Como cambio el contenido "Saldo Inicial" por "Saldo FINAL"?

Saludos
 

angel_

Well-Known Member
Licensed User
Prueba así:
B4X:
    aCampos.Initialize
    aCampos.Add(0)
    aCampos.Add("Saldo Inicial")
    aCampos.Add("What?")
    aCampos.Add(1535)
    
    aRegistros.Initialize
    aRegistros.AddAll(aCampos)

B4X:
    Log(aCampos.Get(1))
    aCampos.RemoveAt(1)
    Log(aCampos.Get(1))
    aCampos.InsertAt(1, "Saldo final")
    Log(aCampos.Get(1))
 

José J. Aguilar

Expert
Licensed User
Hola:

Solo por matizar lo que indica @angel_ , y viendo el hilo de errores comunes de Erel, en el punto 1, creo que no es necesario inicializar un objeto y después asignarlo a otro.
Sería mejor hacer:

B4X:
Dim aRegistros as List = aCampos

1) ¿ Como obtengo en variables individuales el contenido de aRegistros.Get(0) ?
No entiendo a qué te refieres con "en variables individuales", me da a entender como si en un elemento de la lista hubiese otra lista. El contenido de aRegistros.Get(0) debe ser 0, no? ya que tú has añadido un 0 en la primera posición (aCampos.Add(0))

2) ¿ Como cambio el contenido "Saldo Inicial" por "Saldo FINAL"?
Con Set.
B4X:
 aRegistros.Set(1, "Saldo FINAL")

Echa un ojo a


B4X:
    Dim aRegistros, aCampos As List
    aRegistros.Initialize
    aCampos.Initialize
    aCampos.Add(0)
    aCampos.Add("Saldo Inicial")
    aCampos.Add("What?")
    aCampos.Add(1535)

    
    Dim aRegistros As List = aCampos
    Log(aRegistros.Get(0)) '<----- Es cero, ya que asignaste antes un 0 con aCampos.Add(0)
    Log(aRegistros.Get(1)) '<----- Saldo Inicial
    aRegistros.Set(1, "Saldo FINAL")
    Log(aRegistros.Get(1)) '<----- Saldo FINAL
 

Sergio Castellari

Active Member
Licensed User
Hola chicos!!!
@angel_ , @José J. Aguilar y @Gabino A. de la Gala !!!
Con sus orientaciones (geniales) más búsqueda en el foro (haciendo malabares ya que mi ingles es casi nulo) logré el objetivo!!
¿Cual era el objetivo?
A- Cargo un primer "registro" manual de cuatro campos en "aRegistros". Aqui va un saldo inicial previamente obtenido donde debo sobreescribir una FECHA en la 3era. posición.
B- Luego realizo una consulta a MySQL que me devuelve una "x" cantidad de registros con 4 campos. Esta consulta puede incluso NO devolver ningún registro.
C- Necesitaba tomar del PRIMER registro (del punto B), el 3er.campo (o posición) donde viene una FECHA.
D- Esta FECHA, debía ser sobrescrita en en el registro inicial o cero que cargue en el punto A (siempre y cuando, la consulta B obtuviera al menos un registro.

Lo logré con el siguiente código (que muestro aquí, para que me digan si esta bien planteado o mal):
B4X:
        If aRegistros.Size > 0 Then       'Si existe al menos un movimiento
            Dim aReg0, aReg1 As List
            Dim cFec As String
            aReg0 = aRegistros.Get(0)        'Tomo el reigistro "Saldo Inicial"
            aReg1 = aRegistros.Get(1)        'Tomo el siguiente registro
            cFec = aReg1.Get(2)                'Obtengo el 3er.campo (fecha)
            aReg0.Set(2,cFec)                'Sobreescribo el campo fecha
            aRegistros.Set(0,aReg0)            'Actualizo el registro con el nuevo campo
        End If

El asunto es que esta funcionando como esperaba, tenga o no registros devueltos en el punto B

Muchas gracias nuevamente!!!

NOTA: inserto sus nombres para que sepan que su ayuda fue muy valiosa para mi. Espero no ofender por ello.
 
Top