none
Pesquisar termo no VB RRS feed

  • Pergunta

  • Sou iniciante em VB e estou tentando criar um código para pesquisar o nome dos clientes e retorno em uma ListBox e mesmo pesquisando um termo existente no DB (access) ele retorna "Null" poderiam me ajudar:

    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
            Dim clilist = From cadastro In Cadastro_sbcDataSet.Cadastro
                          Where (UCase(cadastro.nome) = UCase(nomepesq.Text & "*"))
                          Select cadastro.nome

            ListBox1.Items.Clear()
            For Each clientes In clilist
                ListBox1.Items.Add(clientes)

            Next


    segunda-feira, 7 de agosto de 2017 14:56

Respostas

  • Eduardo,

    Quando você diz que retorna "NULL" quer dizer que não retornam resultados certo ou seja, sua clilist não tem nenhum item. Imagino que o problema aí seja que você esteja tentando fazer um like usando no termo pesquisado "*", como faria num banco de dados. No Linq você pode usar as funções de string Contains, StartsWith e EndsWith:

    UCase(cadastro.nome).StartsWith(UCase(nomepesq.Text))

    Essa condição retornaria todos os casos que iniciem com o termo.


    ​Rafael Esquiçato Professional Scrum Master MCP, MCTS

    • Marcado como Resposta Eduardo Pietro segunda-feira, 7 de agosto de 2017 19:27
    segunda-feira, 7 de agosto de 2017 17:46

Todas as Respostas

  • Eduardo,

    Quando você diz que retorna "NULL" quer dizer que não retornam resultados certo ou seja, sua clilist não tem nenhum item. Imagino que o problema aí seja que você esteja tentando fazer um like usando no termo pesquisado "*", como faria num banco de dados. No Linq você pode usar as funções de string Contains, StartsWith e EndsWith:

    UCase(cadastro.nome).StartsWith(UCase(nomepesq.Text))

    Essa condição retornaria todos os casos que iniciem com o termo.


    ​Rafael Esquiçato Professional Scrum Master MCP, MCTS

    • Marcado como Resposta Eduardo Pietro segunda-feira, 7 de agosto de 2017 19:27
    segunda-feira, 7 de agosto de 2017 17:46
  • Rafael,

    Fiz a alteração como você indicou e pesquisei "j" e retornou este erro:

    Throw New Global.System.Data.StrongTypingException("The value for column 'nome' in table 'Cadastro' is DBNull.", e)

    continua não achando nada, sendo que tem vários João no cadastro.

    Dim clilist = From cadastro In Cadastro_sbcDataSet.Cadastro
                          Where UCase(cadastro.nome).StartsWith(UCase(nomepesq.Text))
                          Select cadastro.nome



            ListBox1.Items.Clear()
            For Each clientes In clilist
                ListBox1.Items.Add(clientes)

    segunda-feira, 7 de agosto de 2017 19:27
  • Eduardo,

    Essa coluna é NULLABLE?

    Se sim, pode mandar a query que está usando pra retornar esse DataSet?


    ​Rafael Esquiçato Professional Scrum Master MCP, MCTS

    segunda-feira, 7 de agosto de 2017 20:12
  • Rafael,

    Desculpe ser tão ignorante no assunto, mas o que entendi da sua pergunta é se é possível que essa coluna seja NULL (vazia), correto? Não é possível, e também não dei nenhum comando para caso seja NULL como o programa deve proceder, mas de qualquer forma deveria me dar retorno uma vez que pesquisei somente a letra J e tem vários nomes que começam com J, estou certo? Mais uma vez desculpe a falta de conhecimento.

    segunda-feira, 7 de agosto de 2017 21:09
  • Eduardo,

    Imagina cara, talvez devesse ter explicado melhor. Fiz a pergunta porque pelo que entendi seu código está disparando um erro que informa que a coluna nome possui valores nulos. A execução desse código dependendo do contexto (se fosse um contexto entity, isso geraria um query e aí era outra história) será executada checando a condição linha a linha em memória, se a coluna nome está nula em uma das linhas, você terá esse erro. Por isso a dúvida.


    ​Rafael Esquiçato Professional Scrum Master MCP, MCTS

    terça-feira, 8 de agosto de 2017 02:07
  • Rafael, 

    Agora entendi, achei que o erro era que ele não tinha achado nada, mas na vdd antes de achar ele achou campos em branco. Realmente tem campos em branco. Agora não sei como fazer para ele ignorar isso. Obrigado pela paciência. Estou tendo um erro parecido também pesquisando no banco de dados para me mostrar em TextBox. ex.: criei text box de nome e data de nascimento, criei um campo e botão para pesquisa do código do cliente, quando mando pesquisar ele retorna o erro:

    Throw New Global.System.Data.StrongTypingException("The value for column 'nasc' in table 'cadastro' is DBNull.", e)

    Como fazer ele aceitar algum campo em branco?

    terça-feira, 8 de agosto de 2017 12:43
  • Eduardo,

    Tranquilo, como você está populando esse DataSet? Pode postar o código? A impressão que dá é que está usando um DataSet tipado, porém nele a coluna DataNascimento e Nome não estão NULLABLE, como é no banco.


    ​Rafael Esquiçato Professional Scrum Master MCP, MCTS

    terça-feira, 8 de agosto de 2017 12:53
  • Ainda não criei um botão para inserir cadastro e nem o de excluir pois travei no atualizar.

    É bem básico pois é minha primeira programação

    Segue tudo que fiz até agora:

    Private Sub btpesq_Click(sender As Object, e As EventArgs) Handles btpesq.Click
            Dim clilist = From cadastro In Cadastro_sbcDataSet.cadastro
                          Where cadastro.Código = codpesq.Text
                          Select cadastro.nome, cadastro.nasc, cadastro.CPF, cadastro.RG, cadastro.endereco,
                              cadastro.bairro, cadastro.complemento, cadastro.cidade, cadastro.estado, cadastro.cep,
                              cadastro.tel, cadastro.cel, cadastro.cel2, cadastro.comercial, cadastro.email,
                              cadastro.historico, cadastro.Código

            For Each cadastro In clilist
                nome.Text = cadastro.nome
                nasc.Text = cadastro.nasc
                cpf.Text = cadastro.CPF
                rg.Text = cadastro.RG
                endereco.Text = cadastro.endereco
                bairro.Text = cadastro.bairro
                complemento.Text = cadastro.complemento
                cidade.Text = cadastro.cidade
                estado.Text = cadastro.estado
                cep.Text = cadastro.cep
                telefone.Text = cadastro.tel
                cel.Text = cadastro.cel
                cel2.Text = cadastro.cel2
                comercial.Text = cadastro.comercial
                email.Text = cadastro.email
                historico.Text = cadastro.historico
                codcontrol.Text = cadastro.Código

            Next

        End Sub

        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            'TODO: This line of code loads data into the 'Cadastro_sbcDataSet.cadastro' table. You can move, or remove it, as needed.
            Me.CadastroTableAdapter.Fill(Me.Cadastro_sbcDataSet.cadastro)

        End Sub

        Private Sub gravar_Click(sender As Object, e As EventArgs) Handles gravar.Click
            Me.Validate()
            Me.CadastroBindingSource.EndEdit()
            Me.Cadastro_sbcDataSet.AcceptChanges()

            Me.CadastroTableAdapter.updatecli(nome.Text, nasc.Text, cpf.Text, rg.Text, endereco.Text,
                                              bairro.Text, complemento.Text, cidade.Text, estado.Text, cep.Text, telefone.Text,
                                              cel.Text, cel2.Text, comercial.Text, email.Text, historico.Text,
                                              codcontrol.Text)
            MsgBox("Dados Salvos com Sucesso")

        End Sub
    End Class

    terça-feira, 8 de agosto de 2017 13:06
  • Certo, é um dataset tipado mesmo, na sua solution deve ter um arquivo referente a esse DataSet:Cadastro_sbcDataSet, pode abrí-lo, o visual studio possui um bom designer pra isso, navegue até a sua tabela Cadastro e veja como as colunas estão mapeadas dentro dele, a impressão que tenho é que, apesar de serem nullables no banco, elas estão mapeadas como not null.

    ​Rafael Esquiçato Professional Scrum Master MCP, MCTS

    terça-feira, 8 de agosto de 2017 14:25
  • Vamos lá, abri o Designer, é onde eu fiz a SQL "updatecli" para gravar alterações, certo? Lá quando clico em um dos items do banco de dados, por exemplo "nome", nas propriedades abrem três itens que me chamam a atenção que são:

    AllowDBNull: está "True" em todos os items com exceção do Código

    DefaultValue: <DBNULL>

    NullValue: está (Throw exception)

    Acho que é o AllowDBNull que você estava questionando, mas já está "True".

    Alguma outra coisa que eu deveria verificar?

    CONSEGUIIIII atualizei todos os campos "NullValue" de (Throw excepton) para (Nothing), isso alterará mais alguma coisa?

    MUITO OBRIGADO PELA GRANDE AJUDA.


    • Editado Eduardo Pietro terça-feira, 8 de agosto de 2017 15:46 atualização por tentativa e erro.
    terça-feira, 8 de agosto de 2017 15:15
  • Opa que ótimo Eduardo, maravilha, isso é só mesmo pra dizer pro .NET como você quer que ele trate DBNULLs.

    ​Rafael Esquiçato Professional Scrum Master MCP, MCTS

    terça-feira, 8 de agosto de 2017 18:25