Spanish Mostrar mensajes de un .db al hacer click en listview B4A

Discussion in 'Spanish Forum' started by iRobotD, Mar 31, 2019.

  1. iRobotD

    iRobotD New Member

    Buenas,

    soy nuevo en este mundillo y tengo un problema con mi código. Expongo la situación:

    Estoy trabajando en una aplicación de listados de fallos. A través de una base de datos .db muestro en un list view los fallos. Mi problema es que cuando hago clic encima de un item del list view quiero que se me muestren 2 msgbox uno indicando la causa del fallo y otro indicando la solución (ambos datos causa y solución también están en la base de datos).

    Adjunto mi código:

    Code:
    Sub Carga_BD_en_ListView_Fallos
        
    'Limpia el ListaFallos
        ListaFallos.Clear
        
        
    'Carga toda la tabla tipos de la db errores.db en registroFallos
        registroFallos = SQL1.ExecQuery("SELECT ID, Codigo, Mensaje, Causa, Solucion FROM ListaErrores WHERE id BETWEEN 1 AND 413")

        
    For n = 0 To registroFallos.RowCount - 1
            registroFallos.Position = n
        
            
    'Se asigna a cada String declarado a donde hace referencia en la tabla SQL
            codigo = registroFallos.GetString("Codigo"):
            mensaje = registroFallos.GetString(
    "Mensaje"):
            causa = registroFallos.GetString(
    "Causa"):
            solucion = registroFallos.GetString(
    "Solucion"):
            
    id = registroFallos.GetInt("ID"):
            
            ListaFallos.AddTwoLinesAndBitmap(codigo, mensaje, 
    LoadBitmap(File.DirAssets,"robotlist.png"))
            ListaFallos.SingleLineLayout.ItemHeight = 
    90
            ListaFallos.SingleLineLayout.Label.TextSize = 
    20
            ListaFallos.SingleLineLayout.Label.TextColor = 
    Colors.Black
            ListaFallos.SingleLineLayout.Label.Color = 
    Colors.White
        
    Next
    End Sub


    Sub ListaFallos_ItemClick (Position As Int, Value As Object)

        
    Select Position
            
            
    '----------------------------------------------------------------------------------------------------------------------
            Case 0
                    respuesta = 
    Msgbox2(causa , codigo,"""Solución",""LoadBitmap(File.DirAssets,"robotlist.png"))
                    
                    
    If respuesta = DialogResponse.CANCEL Then
                    respuesta = 
    Msgbox2(solucion, codigo, "Salir""",""LoadBitmap(File.DirAssets,"robotlist.png"))   
            
    End If
            
    '----------------------------------------------------------------------------------------------------------------------
                        
        
    End Select

    End Sub
    Con este código solo me muestra el último causa/solución de mi .db alguien sabria decirme como hacer un bucle para que vaya relacionando cada error con su causa y solución al hacer clic??

    gracias.
     
  2. J M Movilla Cuadrado

    J M Movilla Cuadrado Member Licensed User

    A mi entender, la subrutina Carga_BD_en_ListView_Fallos está bien configurada, por lo que el ListView debe quedar relleno con los 413 items (suponiendo que ID no tenga saltos vacíos...)

    Por tanto el fallo ha de estar en la presentación del ListView, que sólo permite la visualización del último item.
     
  3. iRobotD

    iRobotD New Member

    Buenas, gracias por contestar tan rápido. Sí, el ListView se rellena correctamente con los 413 errores. El problema es en el evento de hacer clic en un item del list view, no sé como hacer que para el item1 de listview me saque un msgbox con la causa1 y solucion1 de la base de datos..
     
  4. J M Movilla Cuadrado

    J M Movilla Cuadrado Member Licensed User

    Asigna a una variable x el valor del codigo en la fila de ListaFallos que hayas seleccionado, y busca o filtra en registroFallos "WHERE codigo = " & x
     
    José J. Aguilar likes this.
  5. iRobotD

    iRobotD New Member

    Perdona J M no entiendo muy bien que quieres decir.. podrías acompañarmelo de un ejemplo? Llevo poco en esto y hay cosas que aun se me escapan.. gracias
     
  6. IdasI4A

    IdasI4A Member Licensed User

    Te adjunto un ejemplo modificando un poco tus funciones.
    Code:
    Sub Carga_BD_en_ListView_Fallos
        
    'Limpia el ListaFallos
        Dim registroFallos As Cursor
        
    Dim Codigo, Mensaje As String
        
    Dim N, ID As Int
        
        ListaFallos.Clear
        
        
    'Carga toda la tabla tipos de la db errores.db en registroFallos
        registroFallos = SQL1.ExecQuery("SELECT ID, Codigo, Mensaje, Causa, Solucion FROM ListaErrores WHERE id BETWEEN 1 AND 413")

        
    For n = 0 To registroFallos.RowCount - 1
            registroFallos.Position = n
        
            
    'Se asigna a cada String declarado a donde hace referencia en la tabla SQL
            Codigo = registroFallos.GetString("Codigo")
            Mensaje = registroFallos.GetString(
    "Mensaje")
            
    ID = registroFallos.GetInt("ID")
            
            ListaFallos.AddTwoLinesAndBitmap2(Codigo, Mensaje, 
    LoadBitmap(File.DirAssets,"robotlist.png"),ID)
            ListaFallos.SingleLineLayout.ItemHeight = 
    90
            ListaFallos.SingleLineLayout.Label.TextSize = 
    20
            ListaFallos.SingleLineLayout.Label.TextColor = 
    Colors.Black
            ListaFallos.SingleLineLayout.Label.Color = 
    Colors.White
        
    Next
        registroFallos.Close
    End Sub
    He usuado ListaFallos.AddTwoLinesAndBitmap2 en vez de ListaFallos.AddTwoLinesAndBitmap, para asignar el id a cada linea

    Code:
    Sub ListaFallos_ItemClick (Position As Int, Value As Object)
        
    Dim registroFallos As Cursor
        
    Dim Codigo,  Causa, Solucion As String
        
    Dim  ID, respuesta As Int
        
        
    ID=Value
        
        registroFallos = SQL1.ExecQuery(
    "SELECT ID, Codigo, Mensaje, Causa, Solucion FROM ListaErrores WHERE id =" & ID)
        
    If registroFallos.RowCount=0 Then
            registroFallos.Close
            
    Return
        
    End If
        registroFallos.Position=
    0
        Codigo = registroFallos.GetString(
    "Codigo"):
        Causa = registroFallos.GetString(
    "Causa"):
        Solucion = registroFallos.GetString(
    "Solucion"):
            
        respuesta = 
    Msgbox2(Causa , Codigo,"""Solución",""LoadBitmap(File.DirAssets,"robotlist.png"))
          
        
    If respuesta = DialogResponse.CANCEL Then
            respuesta = 
    Msgbox2(Solucion, Codigo, "Salir""",""LoadBitmap(File.DirAssets,"robotlist.png"))
        
    End If

    End Sub
    Y aqui al hacer click en una linea recupero el id y con ese id recupero toda la información necesaria de la base de datos.
     
    José J. Aguilar likes this.
  7. iRobotD

    iRobotD New Member

    Muchas gracias, era justo lo que necesitaba. No había tenido en cuenta cambiar AddTwoLinesAndBitmap por AddTwoLinesAndBitmap2. Mil gracias.
     
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice