none
Consulta Combinada RRS feed

  • Pregunta

  • Buen dia, soy un viejo programador iniciándose en visual Basic (tenganme paciencia). 
    Aquí va la consulta:

    Tengo una tabla clientes con los siguientes datos: IdCli, NombreCli y DirccionCli
    En el formulario tengo un combobox cargado con Nombre y Dirección del cliente, Ej Juan Reconquista 1234

    Tengo un datagridview con los datos de la tabla mencionada arriba, para filtrar uso:

    Da = New OleDbDataAdapter("SELECT * FROM Clientes NombreCli WHERE NombreCli LIKE '%" & Busqueda & "%'", con)

    Esta consulta me trae los registros que coinciden con el nombre, pero no los que coinciden también con la dirección. Lo que necesito es que la consulta me traiga los Nombre y Direcciones que coinciden con el criterio.

    Desde ya muchas gracias, este foro es de mucha utilidad para los que queremos aprender programación.

    martes, 30 de octubre de 2018 13:37

Respuestas

  • Por tu comentario concluyo que usaste este código 

    Da = New OleDbDataAdapter("SELECT * FROM Clientes WHERE NombreCli+' '+DirccionCli LIKE '%" & Busqueda & "%'", con)

    Pero no veo que esté usando parámetros para que le de ese error..., puede postear el código completo para verificar mejor?, porque esta instrucción no debería generar ese error.

    martes, 30 de octubre de 2018 14:50
  • Que bien que te funcionara, aunque el error en cuestión diría yo no te debió saltar por eso, me tomé el tiempo de verificar tu código (no había visto que habías respondido que te funcionó) y se ejecutó perfectamente sin tener que cambiar nada, pero lo hice usando sqlserver como gestor de base de datos, y fue algo que no te pregunté al inicio cual estás usando tu?, por si te interesa refactoricé un poco tu código:

        Function FiltroCliente(ByVal Busqueda As String) As DataTable
            con.Open()
            Dim sql As String = String.Empty
            Dim Dt As New DataTable
            Dim Da As New OleDbDataAdapter
    
            Me.BuscarClienteTextBox.Enabled = True
            Me.BusFechaDateTimePicker.CustomFormat = " "
            Me.BusFechaDateTimePicker.Enabled = False
    
            Select Case Me.FiltroCli.Text
                Case "CODIGO"
                    sql = String.Format("SELECT * FROM Clientes WHERE IdCli LIKE '%{0}%'", Busqueda)
                Case "NOMBRE CLIENTE"
                    sql = String.Format("SELECT * FROM Clientes  WHERE NombreCli +' '+ DireccionCli LIKE '%{0}%'", Busqueda)
                Case "APELLIDO CLIENTE"
                    sql = String.Format("SELECT * FROM Clientes WHERE ApellidoCli LIKE '%{0}%'", Busqueda)
                Case "DIRECCION"
                    sql = String.Format("SELECT * FROM Clientes WHERE DireccionCli LIKE '%{0}%'", Busqueda)
                Case "BARRIO"
                    sql = String.Format("SELECT * FROM Clientes WHERE BarrioCli LIKE '%{0}%'", Busqueda)
                Case "LOCALIDAD"
                    sql = String.Format("SELECT * FROM Clientes WHERE LocalidadCli LIKE '%{0}%'", Busqueda)
                Case "TELEFONO"
                    sql = String.Format("SELECT * FROM Clientes WHERE TelefonoCli LIKE '%{0}%'", Busqueda)
                Case "CELULAR"
                    sql = String.Format("SELECT * FROM Clientes WHERE CelularCli LIKE '%{0}%'", Busqueda)
                Case "ULTIMA VISITA"
                    sql = String.Format("SELECT * FROM Clientes WHERE FechaUltimoCli LIKE '%{0}%'", Busqueda)
                    
                    Me.BuscarClienteTextBox.Enabled = False
                    Me.BuscarClienteTextBox.Text = ""
                    Me.BusFechaDateTimePicker.CustomFormat = ""
                    Me.BusFechaDateTimePicker.Enabled = True
                    Me.BusFechaDateTimePicker.Select()
    
                Case Else
                    MessageBox.Show("Filtro Inválido")
                    Return Dt
            End Select
    
            Da = New OleDbDataAdapter(sql, con)
    
            Da.Fill(Dt)
            con.Close()
            Return Dt
        End Function
    Si se solucionó tu problema, recuerda dejar tu pregunta con una respuesta seleccionada.

    martes, 30 de octubre de 2018 15:43

Todas las respuestas

  • Saludos Christian

    Yo vería dos opciones:

    1. Crea un combo para cada dato, es decir un combo para el nombre y combo para la dirección y construye tu consulta con ambos campos
    Da = New OleDbDataAdapter(String.Format("SELECT * FROM Clientes WHERE NombreCli = '{0}' and DirccionCli = '{1}'", Nombre, Direccion), con)

    Como tendrás el dato completo no es necesario usar like, revisa el link String.Format

      2. Dejar el combobox a como lo tiene y unir los campos en el condicional del select para incluir la dirección, tenga en cuenta si está dejando espacio entre el nombre y la dirección, asumire que está dejando espacio

    Da = New OleDbDataAdapter("SELECT * FROM Clientes WHERE NombreCli+' '+DirccionCli LIKE '%" & Busqueda & "%'", con)

    Yo optaría por la opción uno, pues es mas clara y mas legible.

    martes, 30 de octubre de 2018 13:56
  • Hola Yerald, Gracias por responder. He probado tu codigo pero no funciona, lo había intentado antes sin obtener el resultado deseado.

    Me arroja este Error:

    No se han especificado valores para algunos de los parámetros requeridos.

    El código se detiene en:

      Da.Fill(Dt)

    Busco como solución un solo combobox para facilitar el ingreso al usuario.

    Muchas gracias por tu tiempo.

    martes, 30 de octubre de 2018 14:24
  • Por tu comentario concluyo que usaste este código 

    Da = New OleDbDataAdapter("SELECT * FROM Clientes WHERE NombreCli+' '+DirccionCli LIKE '%" & Busqueda & "%'", con)

    Pero no veo que esté usando parámetros para que le de ese error..., puede postear el código completo para verificar mejor?, porque esta instrucción no debería generar ese error.

    martes, 30 de octubre de 2018 14:50
  • Function FiltroCliente(ByVal Busqueda As String) As DataTable
            con.Open()
            Dim Dt As New DataTable
            Dim Da As New OleDbDataAdapter
            If Me.FiltroCli.Text = "CODIGO" Then
                Da = New OleDbDataAdapter("SELECT * FROM Clientes WHERE IdCli LIKE '%" & Busqueda & "%'", con)
            Else
                If Me.FiltroCli.Text = "NOMBRE CLIENTE" Then
                    Da = New OleDbDataAdapter("SELECT * FROM Clientes WHERE NombreCli+' '+DirccionCli LIKE '%" & Busqueda & "%'", con)
                Else
                    If Me.FiltroCli.Text = "APELLIDO CLIENTE" Then
                        Da = New OleDbDataAdapter("SELECT * FROM Clientes WHERE ApellidoCli LIKE '%" & Busqueda & "%'", con)
                    Else
                        If Me.FiltroCli.Text = "DIRECCION" Then
                            Da = New OleDbDataAdapter("SELECT * FROM Clientes WHERE DireccionCli LIKE '%" & Busqueda & "%'", con)
                        Else
                            If Me.FiltroCli.Text = "BARRIO" Then
                                Da = New OleDbDataAdapter("SELECT * FROM Clientes WHERE BarrioCli LIKE '%" & Busqueda & "%'", con)
                            Else
                                If Me.FiltroCli.Text = "LOCALIDAD" Then
                                    Da = New OleDbDataAdapter("SELECT * FROM Clientes WHERE LocalidadCli LIKE '%" & Busqueda & "%'", con)
                                Else
                                    If Me.FiltroCli.Text = "TELEFONO" Then
                                        Da = New OleDbDataAdapter("SELECT * FROM Clientes WHERE TelefonoCli LIKE '%" & Busqueda & "%'", con)
                                    Else
                                        If Me.FiltroCli.Text = "CELULAR" Then
                                            Da = New OleDbDataAdapter("SELECT * FROM Clientes WHERE CelularCli LIKE '%" & Busqueda & "%'", con)
                                        Else
                                            If Me.FiltroCli.Text = "ULTIMA VISITA" Then
                                                Da = New OleDbDataAdapter("SELECT * FROM Clientes WHERE FechaUltimoCli LIKE '%" & Busqueda & "%'", con)
                                                Me.BuscarClienteTextBox.Enabled = False
                                                Me.BuscarClienteTextBox.Text = ""
                                                Me.BusFechaDateTimePicker.CustomFormat = ""
                                                Me.BusFechaDateTimePicker.Enabled = True
                                                Me.BusFechaDateTimePicker.Select()
                                                GoTo SeguirCli
                                            End If
                                        End If
                                    End If
                                End If
                            End If
                        End If
                    End If
                End If
            End If
            Me.BuscarClienteTextBox.Enabled = True
            Me.BusFechaDateTimePicker.CustomFormat = " "
            Me.BusFechaDateTimePicker.Enabled = False

    SeguirCli:
            Da.Fill(Dt)
            con.Close()
            Return Dt
        End Function
    martes, 30 de octubre de 2018 15:02
  • Gracias Yerald, pude resolverlo gracias a tu ayuda

    Cambie el + por & y funciono a la perfeccion. MUchas gracias!!!!

    martes, 30 de octubre de 2018 15:11
  • Que bien que te funcionara, aunque el error en cuestión diría yo no te debió saltar por eso, me tomé el tiempo de verificar tu código (no había visto que habías respondido que te funcionó) y se ejecutó perfectamente sin tener que cambiar nada, pero lo hice usando sqlserver como gestor de base de datos, y fue algo que no te pregunté al inicio cual estás usando tu?, por si te interesa refactoricé un poco tu código:

        Function FiltroCliente(ByVal Busqueda As String) As DataTable
            con.Open()
            Dim sql As String = String.Empty
            Dim Dt As New DataTable
            Dim Da As New OleDbDataAdapter
    
            Me.BuscarClienteTextBox.Enabled = True
            Me.BusFechaDateTimePicker.CustomFormat = " "
            Me.BusFechaDateTimePicker.Enabled = False
    
            Select Case Me.FiltroCli.Text
                Case "CODIGO"
                    sql = String.Format("SELECT * FROM Clientes WHERE IdCli LIKE '%{0}%'", Busqueda)
                Case "NOMBRE CLIENTE"
                    sql = String.Format("SELECT * FROM Clientes  WHERE NombreCli +' '+ DireccionCli LIKE '%{0}%'", Busqueda)
                Case "APELLIDO CLIENTE"
                    sql = String.Format("SELECT * FROM Clientes WHERE ApellidoCli LIKE '%{0}%'", Busqueda)
                Case "DIRECCION"
                    sql = String.Format("SELECT * FROM Clientes WHERE DireccionCli LIKE '%{0}%'", Busqueda)
                Case "BARRIO"
                    sql = String.Format("SELECT * FROM Clientes WHERE BarrioCli LIKE '%{0}%'", Busqueda)
                Case "LOCALIDAD"
                    sql = String.Format("SELECT * FROM Clientes WHERE LocalidadCli LIKE '%{0}%'", Busqueda)
                Case "TELEFONO"
                    sql = String.Format("SELECT * FROM Clientes WHERE TelefonoCli LIKE '%{0}%'", Busqueda)
                Case "CELULAR"
                    sql = String.Format("SELECT * FROM Clientes WHERE CelularCli LIKE '%{0}%'", Busqueda)
                Case "ULTIMA VISITA"
                    sql = String.Format("SELECT * FROM Clientes WHERE FechaUltimoCli LIKE '%{0}%'", Busqueda)
                    
                    Me.BuscarClienteTextBox.Enabled = False
                    Me.BuscarClienteTextBox.Text = ""
                    Me.BusFechaDateTimePicker.CustomFormat = ""
                    Me.BusFechaDateTimePicker.Enabled = True
                    Me.BusFechaDateTimePicker.Select()
    
                Case Else
                    MessageBox.Show("Filtro Inválido")
                    Return Dt
            End Select
    
            Da = New OleDbDataAdapter(sql, con)
    
            Da.Fill(Dt)
            con.Close()
            Return Dt
        End Function
    Si se solucionó tu problema, recuerda dejar tu pregunta con una respuesta seleccionada.

    martes, 30 de octubre de 2018 15:43
  • Genio!!!! muchas gracias por las modificaciones, son de mucha utilidad para reducir código.
    Uso una base de datos access, me gustaría usar sql pero recien me estoy metiendo en el tema y me resulto mas fácil con una base access.
    martes, 30 de octubre de 2018 19:04