Principales respuestas
Consulta Combinada

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 1234Tengo 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.
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.
- Marcado como respuesta Christian Zaragoza martes, 30 de octubre de 2018 19:07
-
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.
- Marcado como respuesta Christian Zaragoza martes, 30 de octubre de 2018 19:04
Todas las respuestas
-
Saludos Christian
Yo vería dos opciones:
- 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.
-
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.
- Editado Christian Zaragoza martes, 30 de octubre de 2018 14:28
-
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.
- Marcado como respuesta Christian Zaragoza martes, 30 de octubre de 2018 19:07
-
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 -
-
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.
- Marcado como respuesta Christian Zaragoza martes, 30 de octubre de 2018 19:04
-
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.- Marcado como respuesta Christian Zaragoza martes, 30 de octubre de 2018 19:04
- Desmarcado como respuesta Christian Zaragoza martes, 30 de octubre de 2018 19:04