Usuário com melhor resposta
Pesquisar termo no VB

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
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
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
-
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) -
-
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.
-
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
-
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?
-
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
-
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 -
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
-
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.
-