none
SELECT Nos valores do checkbox. RRS feed

  • Pergunta

  • Boa noite a todos, estou tentando retornar o valor do checkbox do banco de dados. Quando tento fazer a operação o banco me retorna o seguinte aviso:

    Não é possivel converter um objeto do tipo "System.UInt64" no tipo 'MetroFramework.Controls.MetroCheckbox"

    A Coluna onde está armazenado os dados do checkbox está no formato bit.

    Como devo converter a mesma?

    Segue o código abaixo:

      Private Sub PSalvaLogin()
            Using con As MySqlConnection = GetConnectionMySQL()
                Try
                    con.Open()
                    Dim sql As String = "INSERT INTO login (usuario_log, senha_log, acesso_log) VALUES (?,?,?)"
                    Dim cmd As MySqlCommand = New MySqlCommand(sql, con)
                    cmd.Parameters.Add(New MySqlParameter("@usuario_log", txtUsuario.Text))
                    cmd.Parameters.Add(New MySqlParameter("@senha_log", txtSenha.Text))
                    cmd.Parameters.Add(New MySqlParameter("@acesso_log", chCadastroFuncionario.CheckState + chConsultaLogin.CheckState + chCadastroAcesso.CheckState))
                    cmd.ExecuteNonQuery()

                Catch ex As Exception
                    MsgBox(ex.Message)
                    Exit Sub
                Finally
                    con.Close()
                End Try
            End Using
        End Sub

    Desde já, grato.


    quinta-feira, 1 de fevereiro de 2018 02:08

Respostas

  • Boa noite.

    Sugiro que trabalhe com VARCHAR(n)

    Seu insert ficaria assim (posso ter digitado algo errado):

     

    Private Sub PSalvaLogin()
            Using con As MySqlConnection = GetConnectionMySQL()
                Try
                    con.Open()
                    Dim sql As String = "INSERT INTO login (usuario_log, senha_log, acesso_log) VALUES (?,?,?)"
                    Dim cmd As MySqlCommand = New MySqlCommand(sql, con)
                    cmd.Parameters.Add(New MySqlParameter("@usuario_log", txtUsuario.Text))
                    cmd.Parameters.Add(New MySqlParameter("@senha_log", txtSenha.Text))
                    cmd.Parameters.Add(New MySqlParameter("@acesso_log", CInt(chCadastroFuncionario.CheckState).ToString & CInt(chConsultaLogin.CheckState).ToString & CInt(chCadastroAcesso.CheckState).ToString))
                    cmd.ExecuteNonQuery()
    
                Catch ex As Exception
                    MsgBox(ex.Message)
                    Exit Sub
                Finally
                    con.Close()
                End Try
            End Using
        End Sub

    Após o Select.

           

    Dim Str_Check_Box_States As String = dr.Item("acesso_log").ToString

    chCadastroFuncionario.Checked = CBool(Str_Check_Box_States.Substring(0, 1))

    chConsultaLogin.Checked = CBool(Str_Check_Box_States.Substring(1, 1)) chCadastroAcesso.Checked = CBool(Str_Check_Box_States.ToString.Substring(2, 1))



    MARIANO1776

    • Marcado como Resposta Thiago Marcondes sexta-feira, 2 de fevereiro de 2018 22:52
    sexta-feira, 2 de fevereiro de 2018 22:24

Todas as Respostas

  • Bom dia.

    Não sei se entendi.

    Você está está tentando armazenar três valores booleans na coluna acesso_log?

    cmd.Parameters.Add(New MySqlParameter("@acesso_log", chCadastroFuncionario.CheckState + chConsultaLogin.CheckState + chCadastroAcesso.CheckState))

    Experimente fazer somente para ver o resultado.

    Private Sub PSalvaLogin()

    msgbox (chCadastroFuncionario.CheckState + chConsultaLogin.CheckState + chCadastroAcesso.CheckState)

    exit sub


    MARIANO1776

    quinta-feira, 1 de fevereiro de 2018 10:42
  • Bom dia, exatamente! Eu preciso armazenar os valores do checkbox no Banco de Dados.

    O insert está fazendo normal, porém quando faço o select a partir de uma combobox ele retorna essa mensagem.

    Grato.

    quinta-feira, 1 de fevereiro de 2018 11:11
  • O código do SELECT que estou usando é o seguinte:

       Private Sub PLeComboBox()
            Dim dr As MySqlDataReader = Nothing
            Using con As MySqlConnection = GetConnectionMySQL()
                Try
                    con.Open()
                    Dim sql As String = " SELECT id_log, usuario_log, senha_log, acesso_log FROM login WHERE usuario_log='" & txtUsuario.Text & "'"
                    Dim cmd As MySqlCommand = New MySqlCommand(sql, con)
                    dr = cmd.ExecuteReader(CommandBehavior.SingleRow)
                    If dr.HasRows Then
                        dr.Read()
                        txtUsuario.Text = dr.Item("usuario_log")
                        txtSenha.Text = dr.Item("senha_log")
                        chConsultaLogin = dr.Item("acesso_log")
                        'chCadastroAcesso = dr.Item("acesso_log")
                        'chCadastroFuncionario = dr.Item("acesso_log")

                    End If
                Catch ex As Exception
                    MsgBox(ex.Message)
                Finally
                    con.Close()
                End Try
            End Using
        End Sub

    quinta-feira, 1 de fevereiro de 2018 21:03
  • Boa noite.

    Ainda não entendi como você quer armazenar três dados distintos no mesmo campo:

    cmd.Parameters.Add(New MySqlParameter("@acesso_log", chCadastroFuncionario.CheckState + chConsultaLogin.CheckState + chCadastroAcesso.CheckState))

    Mas se você tem certeza que está certo, vamos ao select

                         chConsultaLogin.Checked = cbool(dr.Item("acesso_log"))
                        'chCadastroAcesso.Checked = cbool(dr.Item("acesso_log"))
                        'chCadastroFuncionario.Checked = cbool(dr.Item("acesso_log"))


    MARIANO1776


    • Editado Mariano1776 quinta-feira, 1 de fevereiro de 2018 23:44 correção
    quinta-feira, 1 de fevereiro de 2018 23:32
  • Na verdade a tabela "acesso_log" precisa receber o valor das checkboxes.

    Exemplo: 

    1 verdadeiro, 0 falso.

    check1 = 1

    check2 = 1


    Porém, quando faço o insert

    na tabela do banco, ele me mostra 10 ao inves de 11.

    Como eu faria pra receber 11 o resultado? 

    Por fim, a tela que estou tentando criar, é uma tela de Permissões para o usuário. Por isso, não criei varias colunas para cada checkbox. Eu achei que o insert estava correto, porém na hora de colocar os valores no banco de dados eu vi que não estava certo.

    Grato

    sexta-feira, 2 de fevereiro de 2018 21:55
  • Boa noite.

    Sugiro que trabalhe com VARCHAR(n)

    Seu insert ficaria assim (posso ter digitado algo errado):

     

    Private Sub PSalvaLogin()
            Using con As MySqlConnection = GetConnectionMySQL()
                Try
                    con.Open()
                    Dim sql As String = "INSERT INTO login (usuario_log, senha_log, acesso_log) VALUES (?,?,?)"
                    Dim cmd As MySqlCommand = New MySqlCommand(sql, con)
                    cmd.Parameters.Add(New MySqlParameter("@usuario_log", txtUsuario.Text))
                    cmd.Parameters.Add(New MySqlParameter("@senha_log", txtSenha.Text))
                    cmd.Parameters.Add(New MySqlParameter("@acesso_log", CInt(chCadastroFuncionario.CheckState).ToString & CInt(chConsultaLogin.CheckState).ToString & CInt(chCadastroAcesso.CheckState).ToString))
                    cmd.ExecuteNonQuery()
    
                Catch ex As Exception
                    MsgBox(ex.Message)
                    Exit Sub
                Finally
                    con.Close()
                End Try
            End Using
        End Sub

    Após o Select.

           

    Dim Str_Check_Box_States As String = dr.Item("acesso_log").ToString

    chCadastroFuncionario.Checked = CBool(Str_Check_Box_States.Substring(0, 1))

    chConsultaLogin.Checked = CBool(Str_Check_Box_States.Substring(1, 1)) chCadastroAcesso.Checked = CBool(Str_Check_Box_States.ToString.Substring(2, 1))



    MARIANO1776

    • Marcado como Resposta Thiago Marcondes sexta-feira, 2 de fevereiro de 2018 22:52
    sexta-feira, 2 de fevereiro de 2018 22:24
  • Maravilha!!! Muito obrigado MARIANO1776!

    Desculpe qualquer incomodo.

    sexta-feira, 2 de fevereiro de 2018 22:52
  • Sou iniciante há 13 anos.

    Que bom que deu certo.


    MARIANO1776

    sexta-feira, 2 de fevereiro de 2018 22:54