none
Fazer um Select com Like para uma Datagridview RRS feed

  • Pergunta

  • Olá, estou com dificuldades na string SQL com Like para colocar na Datagrid no evento TextChanged do meu TextBox, se alguém puder ajudar..

    Segue código:

     Private Sub txtPesquisaCliente_TextChanged(sender As Object, e As EventArgs) Handles txtPesquisaCliente.TextChanged
    
            Dim cmdCliente As New SqlCommand
    
            If txtPesquisaCliente.Text.Trim = "" Then
                txtPesquisaCliente.Focus()
                Exit Sub
            ElseIf comboModoPesquisa.SelectedIndex = -1 Then
                MessageBox.Show("Selecione um modo de pesquisa!", "Graphic Solution", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Exit Sub
            End If
    
            Dim modoPesquisa As String = ""
    
            If comboModoPesquisa.Text = "Código" Then
                modoPesquisa = "cod_Cliente"
            ElseIf comboModoPesquisa.Text = "Nome" Then
                modoPesquisa = "nome_Cliente"
            ElseIf comboModoPesquisa.Text = "CPF" Then
                modoPesquisa = "cpf_Cliente"
            ElseIf comboModoPesquisa.Text = "RG" Then
                modoPesquisa = "rg_Cliente"
            End If
    
            strSQL = "Select cod_cliente, nome_cliente, cpf_Cliente, rg_Cliente from Cliente where @modo Like '%@pesquisa%'"
    
            cmdCliente.Parameters.AddWithValue("@modo", modoPesquisa)
            cmdCliente.Parameters.AddWithValue("@pesquisa", txtPesquisaCliente.Text.Trim)
    
            cmdCliente.Connection = cnnBanco
            cmdCliente.CommandText = strSQL
    
            Dim da As New SqlDataAdapter(cmdCliente)
            Dim dt As New DataTable
    
            Try
    
                da.Fill(dt)
                dgvClientesCadastrados.DataSource = dt
    
                PFormataCliente()
    
                lblClientesEncontrados.Text = "Clientes encontrados: " & CStr(CInt(dgvClientesCadastrados.RowCount))
    
            Catch ex As Exception
                MessageBox.Show(ex.Message)
                MessageBox.Show("Não foi possível carregar o(s) cliente(s) pesquisado(s)!", "Graphic Solution", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
    
            cmdCliente.Parameters.Clear()
        End Sub

    Sou iniciante ainda.. Não sei onde estou errando...

    Desde já, obrigado!

    segunda-feira, 27 de outubro de 2014 04:04

Respostas

  • Daniel, consegui arrumar.. O problema estava no parâmetro (Creio eu), que quando você declara um parâmetro, ele automaticamente recebe aspas simples..

    Segue código arrumado:

        Private Sub txtPesquisaCliente_TextChanged(sender As Object, e As EventArgs) Handles txtPesquisaCliente.TextChanged
    
            Dim cmdCliente As New SqlCommand
    
            If txtPesquisaCliente.Text.Trim = "" Then
                txtPesquisaCliente.Focus()
                Exit Sub
            ElseIf comboModoPesquisa.SelectedIndex = -1 Then
                MessageBox.Show("Selecione um modo de pesquisa!", "Graphic Solution", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Exit Sub
            End If
    
            Dim modoPesquisa As String = ""
    
            If comboModoPesquisa.Text = "Código" Then
                modoPesquisa = "cod_Cliente = " & txtPesquisaCliente.Text.Trim
            ElseIf comboModoPesquisa.Text = "Nome" Then
                modoPesquisa = "nome_Cliente Like '%" & txtPesquisaCliente.Text.Trim & "%'"
            ElseIf comboModoPesquisa.Text = "CPF" Then
                modoPesquisa = "cpf_Cliente = " & txtPesquisaCliente.Text.Trim
            ElseIf comboModoPesquisa.Text = "RG" Then
                modoPesquisa = "rg_Cliente = " & txtPesquisaCliente.Text.Trim
            End If
    
            strSQL = "Select cod_cliente, nome_cliente, cpf_Cliente, rg_Cliente from Cliente where " & modoPesquisa
    
            cmdCliente.CommandText = strSQL
            cmdCliente.Connection = cnnBanco
    
            Dim da As New SqlDataAdapter(cmdCliente)
            Dim dt As New DataTable
    
            Try
    
                da.Fill(dt)
                dgvClientesCadastrados.DataSource = dt.DefaultView
    
                PFormataCliente()
    
                lblClientesEncontrados.Text = "Clientes encontrados: " & CStr(CInt(dgvClientesCadastrados.RowCount))
    
            Catch ex As Exception
                MessageBox.Show(ex.Message)
                MessageBox.Show("Não foi possível carregar o(s) cliente(s) pesquisado(s)!", "Graphic Solution", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
    
        End Sub

    • Marcado como Resposta Ivansnp quinta-feira, 30 de outubro de 2014 03:31
    quinta-feira, 30 de outubro de 2014 03:30

Todas as Respostas

  • Olá Ivan,

     quando se usa parameter não há necessidade do apóstrofo, veja como fica :

     strSQL = "Select cod_cliente, nome_cliente, cpf_Cliente, rg_Cliente from Cliente where @modo Like @pesquisa"
    
    
    

     E no seu parametro que você usa o "%" veja :

     cmdCliente.Parameters.AddWithValue("@pesquisa",   "%" & txtPesquisaCliente.Text.Trim & "%")
     Pronto isso resolve ! 

    • Sugerido como Resposta Bruno Destro segunda-feira, 27 de outubro de 2014 09:59
    • Marcado como Resposta Ricardo Barbosa Cortes segunda-feira, 27 de outubro de 2014 18:12
    • Não Marcado como Resposta Ivansnp quarta-feira, 29 de outubro de 2014 02:41
    • Não Sugerido como Resposta Ivansnp quarta-feira, 29 de outubro de 2014 02:41
    segunda-feira, 27 de outubro de 2014 09:32
  • Daniel, não funcionou, continua esvaziando minha Grid. Mudei os 2 pontos que você disse para mudar e nada.. Continuou a mesma coisa.

    segunda-feira, 27 de outubro de 2014 19:16
  • Daniel, não funcionou, continua esvaziando minha Grid. Mudei os 2 pontos que você disse para mudar e nada.. Continuou a mesma coisa.

     Como ficou seu código após as alterações ? Sabe debugar ? Está retornando dados em seu DataTable ?
    quarta-feira, 29 de outubro de 2014 09:59
  • Daniel, consegui arrumar.. O problema estava no parâmetro (Creio eu), que quando você declara um parâmetro, ele automaticamente recebe aspas simples..

    Segue código arrumado:

        Private Sub txtPesquisaCliente_TextChanged(sender As Object, e As EventArgs) Handles txtPesquisaCliente.TextChanged
    
            Dim cmdCliente As New SqlCommand
    
            If txtPesquisaCliente.Text.Trim = "" Then
                txtPesquisaCliente.Focus()
                Exit Sub
            ElseIf comboModoPesquisa.SelectedIndex = -1 Then
                MessageBox.Show("Selecione um modo de pesquisa!", "Graphic Solution", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Exit Sub
            End If
    
            Dim modoPesquisa As String = ""
    
            If comboModoPesquisa.Text = "Código" Then
                modoPesquisa = "cod_Cliente = " & txtPesquisaCliente.Text.Trim
            ElseIf comboModoPesquisa.Text = "Nome" Then
                modoPesquisa = "nome_Cliente Like '%" & txtPesquisaCliente.Text.Trim & "%'"
            ElseIf comboModoPesquisa.Text = "CPF" Then
                modoPesquisa = "cpf_Cliente = " & txtPesquisaCliente.Text.Trim
            ElseIf comboModoPesquisa.Text = "RG" Then
                modoPesquisa = "rg_Cliente = " & txtPesquisaCliente.Text.Trim
            End If
    
            strSQL = "Select cod_cliente, nome_cliente, cpf_Cliente, rg_Cliente from Cliente where " & modoPesquisa
    
            cmdCliente.CommandText = strSQL
            cmdCliente.Connection = cnnBanco
    
            Dim da As New SqlDataAdapter(cmdCliente)
            Dim dt As New DataTable
    
            Try
    
                da.Fill(dt)
                dgvClientesCadastrados.DataSource = dt.DefaultView
    
                PFormataCliente()
    
                lblClientesEncontrados.Text = "Clientes encontrados: " & CStr(CInt(dgvClientesCadastrados.RowCount))
    
            Catch ex As Exception
                MessageBox.Show(ex.Message)
                MessageBox.Show("Não foi possível carregar o(s) cliente(s) pesquisado(s)!", "Graphic Solution", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End Try
    
        End Sub

    • Marcado como Resposta Ivansnp quinta-feira, 30 de outubro de 2014 03:31
    quinta-feira, 30 de outubro de 2014 03:30