none
Hola! - Obtener datos de varias columnas de una misma tabla - Vb.Net RRS feed

  • Pregunta

  • Como están?

    Trabajo en WinForms, Vb.Net, Acces 2013, NetFramework 4.5.2.

    El código que tengo me realiza la consulta (búsqueda) sobre una sola columna, y en el orden en que escribo lo que deseo buscar.

    Preguntaba si alguien me puede orientar sobre esto: buscar en tres columnas de texto, las letras que haya en un textBox de un formulario, y en lo posible, ordenarlos en un DataGridView donde el registro que tenga mayor coincidencia aparezca arriba.

    Es probable que exista alguna pregunta similar, el caso que no encontre.

    Código: 

    Sub LlenarGRID() Try Select Case CmbSel.Text Case "ID" 'Variables Dim Ds As New DataSet Dim Dt As New DataTable Dim Sql1 As String = "Select * From Tabla1 where Id Like '" + seleccion + "' Order by Id" Dim Apt As New OleDb.OleDbDataAdapter(Sql1, Cnn) 'Tabla nueva Ds.Tables.Add("tbl") Apt.Fill(Ds.Tables("tbl")) GridBuscar.DataSource = Ds.Tables("tbl") 'Agregar y Modificar columnas GridBuscar.Columns(0).HeaderText = "ID" GridBuscar.Columns(1).HeaderText = "Apellido" GridBuscar.Columns(2).HeaderText = "Nombre" GridBuscar.Columns(3).HeaderText = "Curso" GridBuscar.Columns(4).HeaderText = "Turno" GridBuscar.Columns(5).HeaderText = "Año" GridBuscar.Columns(6).HeaderText = "Observaciones" GridBuscar.Columns(7).HeaderText = "Año de Ingreso" GridBuscar.Columns(8).HeaderText = "Ingresa de" GridBuscar.Columns(9).HeaderText = "Año de Egreso" GridBuscar.Columns(10).HeaderText = "Egresa a" GridBuscar.Columns(11).HeaderText = "DNI" GridBuscar.Columns(12).HeaderText = "Año de Nacimiento" GridBuscar.Columns(13).HeaderText = "Nacionalidad" GridBuscar.Columns(14).HeaderText = "Domicilio" GridBuscar.Columns(15).HeaderText = "Teléfono" GridBuscar.Columns(16).HeaderText = "Celular" GridBuscar.Columns(17).HeaderText = "Nombre del Padre" GridBuscar.Columns(18).HeaderText = "DNI del Padre" GridBuscar.Columns(19).HeaderText = "Nombre de la Madre" GridBuscar.Columns(20).HeaderText = "DNI de la Madre" GridBuscar.Columns(21).HeaderText = "Nombre del Tutor" GridBuscar.Columns(22).HeaderText = "DNI del Tutor" Case "Apellido" 'Variables Dim Ds As New DataSet Dim Dt As New DataTable Dim Sql1 As String = "Select * From Tabla1 where Apellido Like '" + seleccion + "' Order by Apellido" Dim Apt As New OleDb.OleDbDataAdapter(Sql1, Cnn) 'Tabla nueva Ds.Tables.Add("tbl") Apt.Fill(Ds.Tables("tbl")) GridBuscar.DataSource = Ds.Tables("tbl") 'Agregar y Modificar columnas GridBuscar.Columns(0).HeaderText = "ID" GridBuscar.Columns(1).HeaderText = "Apellido" GridBuscar.Columns(2).HeaderText = "Nombre" GridBuscar.Columns(3).HeaderText = "Curso" GridBuscar.Columns(4).HeaderText = "Turno" GridBuscar.Columns(5).HeaderText = "Año" GridBuscar.Columns(6).HeaderText = "Observaciones" GridBuscar.Columns(7).HeaderText = "Año de Ingreso" GridBuscar.Columns(8).HeaderText = "Ingresa de" GridBuscar.Columns(9).HeaderText = "Año de Egreso" GridBuscar.Columns(10).HeaderText = "Egresa a" GridBuscar.Columns(11).HeaderText = "DNI" GridBuscar.Columns(12).HeaderText = "Año de Nacimiento" GridBuscar.Columns(13).HeaderText = "Nacionalidad" GridBuscar.Columns(14).HeaderText = "Domicilio" GridBuscar.Columns(15).HeaderText = "Teléfono" GridBuscar.Columns(16).HeaderText = "Celular" GridBuscar.Columns(17).HeaderText = "Nombre del Padre" GridBuscar.Columns(18).HeaderText = "DNI del Padre" GridBuscar.Columns(19).HeaderText = "Nombre de la Madre" GridBuscar.Columns(20).HeaderText = "DNI de la Madre" GridBuscar.Columns(21).HeaderText = "Nombre del Tutor" GridBuscar.Columns(22).HeaderText = "DNI del Tutor" Case Else 'Año de Ingreso u otro 'Variables Dim Ds As New DataSet Dim Dt As New DataTable Dim Sql1 As String = "Select * From Tabla1 where AñoIngreso Like '" + seleccion + "' Order by Apellido" Dim Apt As New OleDb.OleDbDataAdapter(Sql1, Cnn) 'Tabla nueva Ds.Tables.Add("tbl") Apt.Fill(Ds.Tables("tbl")) GridBuscar.DataSource = Ds.Tables("tbl") 'Agregar y Modificar columnas GridBuscar.Columns(0).HeaderText = "ID" GridBuscar.Columns(1).HeaderText = "Apellido" GridBuscar.Columns(2).HeaderText = "Nombre" GridBuscar.Columns(3).HeaderText = "Curso" GridBuscar.Columns(4).HeaderText = "Turno" GridBuscar.Columns(5).HeaderText = "Año" GridBuscar.Columns(6).HeaderText = "Observaciones" GridBuscar.Columns(7).HeaderText = "Año de Ingreso" GridBuscar.Columns(8).HeaderText = "Ingresa de" GridBuscar.Columns(9).HeaderText = "Año de Egreso" GridBuscar.Columns(10).HeaderText = "Egresa a" GridBuscar.Columns(11).HeaderText = "DNI" GridBuscar.Columns(12).HeaderText = "Año de Nacimiento" GridBuscar.Columns(13).HeaderText = "Nacionalidad" GridBuscar.Columns(14).HeaderText = "Domicilio" GridBuscar.Columns(15).HeaderText = "Teléfono" GridBuscar.Columns(16).HeaderText = "Celular" GridBuscar.Columns(17).HeaderText = "Nombre del Padre" GridBuscar.Columns(18).HeaderText = "DNI del Padre" GridBuscar.Columns(19).HeaderText = "Nombre de la Madre" GridBuscar.Columns(20).HeaderText = "DNI de la Madre" GridBuscar.Columns(21).HeaderText = "Nombre del Tutor" GridBuscar.Columns(22).HeaderText = "DNI del Tutor" End Select Catch ex As Exception MsgBox("Error. Inténtelo de nuevo.", MsgBoxStyle.Critical, "Error") MsgBox(ex.ToString, MsgBoxStyle.Critical, "Error") End Try End Sub

    'CmbSel es un ComboBox

    'Debería buscar en Apellido, Nombre, e ID, y (opcional) Domicilio

    'Agradezco a los integrantes de los foros por ayudarme a resolver los problemas que me surgen.


    Saludos. Atentamente Pablo Fac. [VB.Net - Visual Studio 2015]


    • Editado Admin Pablo Fac miércoles, 18 de mayo de 2016 3:42 Agregar Código
    miércoles, 18 de mayo de 2016 3:39

Respuestas

  • En principio, el único sitio en el que tendrías que hacer cambios es en la sentencia Select:

    Dim Sql1 As String = "Select * From Tabla1 where Apellido Like '" + seleccion + "' OR Nombre Like '" + seleccion + "' OR ID Like '" + seleccion + "'"

    Idealmente, sería preferible que parametrizases la sentencia en lugar de concatenarle los datos, pero esto es algo general para todos los sitios en los que construyas sentencias SQL, no es que haya que parametrizarla precisamente en este caso solo porque estés buscando en tres columnas.
                       

    miércoles, 18 de mayo de 2016 6:15
  • Además de lo que te comenta Alberto de utilizar parámetros deberías refactorizar el procedimiento para evitar código repetido.

    Mira este ejemplo que hace lo mismo que tu método:

        Dim ReadOnly _headers As String() = New String() {"ID", "Apellido", "Nombre", "Curso", "Turno", "Año", "Observaciones", "Año de Ingreso",
                    "Ingresa de", "Año de Egreso", "Egresa a", "DNI", "Año de Nacimiento", "Nacionalidad", "Domicilio", "Teléfono",
                    "Celular", "Nombre del Padre", "DNI del Padre", "Nombre de la Madre", "DNI de la Madre", "Nombre del Tutor", "DNI del Tutor"}
    
        Sub LlenarGRID()
            Try
                Dim Sql As String
                Select Case CmbSel.Text
                    Case "ID"
                        Sql = "SELECT * FROM Tabla1 WHERE Id LIKE @seleccion ORDER BY Id"
                    Case "Apellido"
                        Sql = "SELECT * FROM Tabla1 WHERE Apellido LIKE @seleccion ORDER BY Apellido"
                    Case Else
                        Sql = "SELECT * FROM Tabla1 WHERE AñoIngreso LIKE @seleccion ORDER BY Apellido"
                End Select
                Dim Apt As New OleDbDataAdapter(Sql, cnn)
                Apt.SelectCommand.Parameters.AddWithValue("@seleccion", seleccion)
                Dim Ds As New DataSet
                Ds.Tables.Add("tbl")
                Apt.Fill(Ds.Tables("tbl"))
                GridBuscar.DataSource = Ds.Tables("tbl")
    
                 'Agregar y Modificar columnas
                For i = 0 To _headers.Length -1
                    GridBuscar.Columns(i).HeaderText = _headers(i)
                Next
    
            Catch ex As Exception
                MsgBox("Error. Inténtelo de nuevo.", MsgBoxStyle.Critical, "Error")
                MsgBox(ex.ToString, MsgBoxStyle.Critical, "Error")
            End Try
        End Sub


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    miércoles, 18 de mayo de 2016 7:40

Todas las respuestas

  • En principio, el único sitio en el que tendrías que hacer cambios es en la sentencia Select:

    Dim Sql1 As String = "Select * From Tabla1 where Apellido Like '" + seleccion + "' OR Nombre Like '" + seleccion + "' OR ID Like '" + seleccion + "'"

    Idealmente, sería preferible que parametrizases la sentencia en lugar de concatenarle los datos, pero esto es algo general para todos los sitios en los que construyas sentencias SQL, no es que haya que parametrizarla precisamente en este caso solo porque estés buscando en tres columnas.
                       

    miércoles, 18 de mayo de 2016 6:15
  • Además de lo que te comenta Alberto de utilizar parámetros deberías refactorizar el procedimiento para evitar código repetido.

    Mira este ejemplo que hace lo mismo que tu método:

        Dim ReadOnly _headers As String() = New String() {"ID", "Apellido", "Nombre", "Curso", "Turno", "Año", "Observaciones", "Año de Ingreso",
                    "Ingresa de", "Año de Egreso", "Egresa a", "DNI", "Año de Nacimiento", "Nacionalidad", "Domicilio", "Teléfono",
                    "Celular", "Nombre del Padre", "DNI del Padre", "Nombre de la Madre", "DNI de la Madre", "Nombre del Tutor", "DNI del Tutor"}
    
        Sub LlenarGRID()
            Try
                Dim Sql As String
                Select Case CmbSel.Text
                    Case "ID"
                        Sql = "SELECT * FROM Tabla1 WHERE Id LIKE @seleccion ORDER BY Id"
                    Case "Apellido"
                        Sql = "SELECT * FROM Tabla1 WHERE Apellido LIKE @seleccion ORDER BY Apellido"
                    Case Else
                        Sql = "SELECT * FROM Tabla1 WHERE AñoIngreso LIKE @seleccion ORDER BY Apellido"
                End Select
                Dim Apt As New OleDbDataAdapter(Sql, cnn)
                Apt.SelectCommand.Parameters.AddWithValue("@seleccion", seleccion)
                Dim Ds As New DataSet
                Ds.Tables.Add("tbl")
                Apt.Fill(Ds.Tables("tbl"))
                GridBuscar.DataSource = Ds.Tables("tbl")
    
                 'Agregar y Modificar columnas
                For i = 0 To _headers.Length -1
                    GridBuscar.Columns(i).HeaderText = _headers(i)
                Next
    
            Catch ex As Exception
                MsgBox("Error. Inténtelo de nuevo.", MsgBoxStyle.Critical, "Error")
                MsgBox(ex.ToString, MsgBoxStyle.Critical, "Error")
            End Try
        End Sub


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    miércoles, 18 de mayo de 2016 7:40