Spanish Como extraigo los renglones de un DBResult [SOLUCIONADO]

roerGarcia

Member
Licensed User
El escenario

1. Aplicacion B4Java con jrdc2 - conecta con un server mysql - funciona perfectamente.
2. Aplicacion B4Java cliente de la anterior. Conecta, solicita y recibe info desde el "server"
3. En la aplicacion del punto 2 quiero agregar una B4XTable, configurarla y pasarle los Rows del DBResult producto de la solicitud del cliente al server.

La pregunta

Cual es la mecanica para extraer estos rows, crear la "data" y hacer el setdata.

Notas

* El DBResult es un "custom type" que contiene un objeto TAG, un map Columns y un List Rows.
* El DbrequestManager maneja un ciclo asi:
B4X:
    For Each row() As Object In Table.Rows <---- registros de la info DBResult
        Dim sb As StringBuilder
        sb.Initialize
        For Each record As Object In row <--- campos del registro.
            sb.Append(record).Append(TAB)
        Next
        Log(sb.ToString)
    Next
Y esto muestra toda la data correctamente.

La B4XTable acepta un List como su contenido
(Each item in the list is an array of objects that represents a row - del foro),

Te dice

Dim data as List = (diversos metodos de creacion de lists)
B4XTable1.SetData(data)

la pregunta especifica es : Como es la sintaxis/tecnica para tomar cada row del dbresult y formar la data que sera asignada a la tabla?

Muy agradecido por sus comentarios y aclaro, he codificado menos de 100 lineas en B4X... =)

Roberto
 

José J. Aguilar

Well-Known Member
Licensed User
Hola roerGarcia.

Si has dado con la respuesta, sería bueno para el foro que la publicaras, así gente con la misma duda podría beneficiarse.

¡Saludos!
 

roerGarcia

Member
Licensed User
B4X:
Sub GetRecords
    Dim req As DBRequestManager = CreateRequest
    Dim cmd As DBCommand = CreateCommand("select_detalle", Null)
    Wait For (req.ExecuteQuery(cmd, 0, Null)) JobDone(j As HttpJob)
    If j.Success Then
        req.HandleJobAsync(j, "req")
        Wait For (req) req_Result(res As DBResult)
        'req.PrintTable(res)
        Dim t1 As Long = DateTime.Now
        Log(res.Columns.Size)
        Dim data As List
        data.Initialize ' --------------------------------------------------
        For Each row() As Object In res.Rows                               
            Dim fld(res.Columns.Size) As Object                            
            Dim mi As Int                                                               
            For mi = 0 To res.Columns.Size - 1
                fld(mi) = row(mi)
            Next
            data.Add(fld) ' <--- esta parte era la que desconocia
            gauge1.Value = ( data.Size / res.Rows.Size ) 
        Next
        B4XTable1.Setdata(data)
        Log(DateTime.Now - t1)
    Else
        Log("ERROR: " & j.ErrorMessage)
    End If
    j.Release
End Sub
De hecho el código es parte de los tutoriales.

No se realmente si es la manera mas eficiente o 'correcta' pero me funciona actualmente.

Saludos
 
Top