none
Cargar checkedListbox desde VB.NET SQL SERVER con Algunos Items Marcados RRS feed

  • Pregunta

  • Estimados, Como siempre, un gusto en saludarlos y agradecerles el apoyo a la comunidad que profesionales que desarrolla.

    Acudo a ustedes, si pueden ayudarme, con un problema que se me ha presentado y no logro sacarlo adelante.

    Tengo Una Tabla "ACCESOS" en SQL Server, La cual contiene 2 Campos (Nombre_Persona y Nivel_Acceso)

    Nombre_Persona , Nivel_Acceso

    -Manuel                  - Usuario

    -David                    - Usuario, Administrador

    -Alejandro               - Administrador

    Tengo una consulta, cuyo filtro es el Nombre_Persona (Proc Almacenado) y necesito saber el Nivel_Acceso.

    Para ello, necesito desplegar los Niveles de Acceso de la persona ya clickeados a través de un Checkedlistbox.

    El CheckedListbox Mostrara como items:

    - Usuario

    -Administrador

    Pero según el usuario, debería mostrar con click los que ya tiene asignados según la info de la BD.


    Creen que puedan ayudarme?

    Desde ya muchas gracias,




    • Editado ClaudioMaiden martes, 26 de junio de 2018 16:38
    • Cambiado Enrique M. Montejo jueves, 28 de junio de 2018 7:06 Pregunta relacionada con controles de Windows Forms.
    lunes, 25 de junio de 2018 21:46

Todas las respuestas

  • Es posible, pero debo recalcar que el diseño de base de datos es incorrecto.  Uno no debe almacenar más de un dato en un campo pues viola las reglas de normalización de bases de datos.  En su caso, usted almacena múltiples accesos en el campo Nivel_Acceso.

    En su estado actual lo que puede hacer es retornal el valor de la columna Nivel_Acceso y en VB usted utiliza String.Split() para separar los valores (la coma sería el separador).  Luego, para cada valor devuelto por Split(), busca en el CheckedListBox los items cuyo nombre es igual.  Si es igual, lo marca (Checked = True).


    Jose R. MCP
    My GIT Repositories | Mis Repositorios GIT

    viernes, 29 de junio de 2018 4:35
    Moderador
  • Hola Jose, antes que todo, agradecerte la respuesta.

    sucede que mencione mal las características de la tabla accesos, enrealidad, los datos quedan ingresados de la sgte forma:

    Rut_Persona ,               Nivel_Acceso

    -15.764.343-8                  - Usuario

    -14.744.843-4                  - Usuario,

    -14.744.843-4                  - Administrador

    -13.003.232-5                  - Administrador

    Donde por ejemplo, el rut 14.744.843-4, posee 2 niveles de acceso.

    Intento extraer esta info a través de un datatable de la sgte forma, pero no logro que funcione.         

     Try
                Dim Con As New SqlConnection(My.Settings.Conexion)
                Con.Open()

                cmd1.Parameters.Clear()
                cmd1.CommandType = CommandType.StoredProcedure
                cmd1.CommandText = "CargaNivel"
                cmd1.Parameters.Add("@Rut", SqlDbType.NVarChar).Value = (ADM_ModifUser.TXT_Rut.Text.Trim())
                cmd1.Connection = Con

                Dim adapter As New SqlDataAdapter()
                adapter.SelectCommand = cmd1
                Dim table As New DataTable()
                adapter.Fill(table)

                Respuesta1 = cmd1.ExecuteReader

                If Respuesta1.Read <> 0 Then
                    Respuesta1.Close()

                    For Each i As DataRow In table.Rows

                        Dim R As Integer
                        For R = 0 To CheckedListBox1.Items.Count - 1

                            If CheckedListBox1.GetItemText(R).Trim = i.Item("Modulos_Acceso") Then
                                CheckedListBox1.SetItemChecked(R, True)
                            Else
                            End If

    (Claramente aqui no se como recorrer el checkedboxlist para que vaya comparando los items filtrados en el datatable, con los items que contiene el checkedboxlist y los marque.

    Es decir, si el datatable filtra Nivel (Usuario y Administrador) posterior a la búsqueda del rut: 14.744.843-4, debiera marcar con check, dentro del checkedboxlist, el campo Usuario y administrador para ese rut en especifico).

                        Next         

                   End If

                Con.Close()
                Con.Dispose()
                cmd1.Dispose()

            Catch ex As Exception
                MessageBox.Show(ex.Message)
                Throw ex
            End Try

    Agradecería mucho la ayuda

    Mis Cordiales Saludos a toda la comunidad.


    sábado, 30 de junio de 2018 15:35
  • Ok, es casi igual.  Un SELECT Nivel_Accesor From tabla where Rut_Persona = @rut;, ya sea en un procedimiento almacenado o en una consulta parametrizada.  Arrojará cero o más líneas.  Hace un bucle que lea línea por línea, y por cada línea, pues selecciona el checkbox correspondiente.

    Jose R. MCP
    My GIT Repositories | Mis Repositorios GIT

    sábado, 30 de junio de 2018 15:57
    Moderador
  • Muchas Gracias Jose, me ha servido mucho la solución.

    Tengo otra duda en relación a los Códigos QR.

    Tengo un código QR estático en una etiqueta de un envase, la cual contiene:

     1) un id único.

     2) Fecha Inicio Elaboración.

     3) Fecha de Término Elaboración.

    Necesito que, si un usuario quiere escanear el código QR del envase a través de un celular, esta me dirija a una pagina web en particular, envíe el (id, fecha inicio y termino) a la misma web y en el load de la misma, realice una consulta a mysql con el fin de que el usuario conozca la trazabilidad del producto.

    Lo que no logro hacer, es decir, donde tengo mayor problema es en mandar los datos que contiene el código QR y recibirlos en la web.

    Se que quizás tenga que re diseñar el código QR y de ser así, quisiera saber que información debiese grabar en reemplazo de la actual para que esto funcione; así como también, el lenguaje web que sugiere. Pensaba en PHP o ASP.NET.

    Desde ya muchas gracias nuevamente y espero puedas ayudarme.

    sábado, 7 de julio de 2018 23:25
  • Hola.  Si tiene otra duda, le agradeceré que marque la respuesta para la pregunta actual y proceda a crear un nuevo hilo de conversación para la nueva pregunta.  Así el enfoque se mantiene en un único tema, que es deseable para quienes encuentran esta conversación vía buscadores de Internet.

    Jose R. MCP
    My GIT Repositories | Mis Repositorios GIT

    domingo, 8 de julio de 2018 21:48
    Moderador