none
Filtro para SELECT RRS feed

  • Pregunta

  • Buenas, como lo dice el titulo, estoy queriendo hacer un filtro para una consutla SQL, basicamente necesito lo siguiente:

    Tengo un boton en el cual ejecuto un Select con determinada busqueda, lo que estoy intendando hacer es que, si escribo algo por ejemplo en el textbox id o nombre, me filtre la query dependiendo del dato que escribí.

    Me recomendaron lo siguiente, pero no estoy pudiendo hacerlo funcionar:

     Dim sql As String
            Dim da As New Odbc.OdbcDataAdapter
            Dim ds As New DataSet

            Dim nomadi, idadi As New Odbc.OdbcParameter
            nomadi.DbType = DbType.String
            nomadi.Value = txtnombreadicional.Text
            comando.Parameters.Add(nomadi)

            idadi.DbType = DbType.String
            idadi.Value = txtidadicional.Text
            comando.Parameters.Add(idadi)

            If nomadi.Value <> Nothing Then
                Filter = "Where adi_nombre = ?"
            End If

            Try
                sql = "SELECT id_adicional ID, adi_nombre Nombre, adi_costodiario Diario$, adi_activo Activo FROM ADICIONAL" if((filter<>nothing), filter & "AND", "WHERE")

    El filter que esta en negrita me da el siguiente error: "overload resolution failed because no accessible 'Filter' accepts this number of arguments"

    Y esto "if((filter<>nothing), filter & "AND", "WHERE")" me dice "End of statemend expected"

    Espero puedan ayudarme, de ante mano, Muchas gracias!

    • Cambiado Enrique M. Montejo sábado, 30 de septiembre de 2017 16:08 Pregunta relacionada con el acceso a datos mediante ODBC.
    jueves, 28 de septiembre de 2017 14:23

Todas las respuestas

  • Podrias hacer un procedimiento almacenado

    CREATE PROCEDURE sp_Filtrar 
       (
          @TEXTO1 VARCHAR(200)
          @TEXTO2 VARCHAR(200)
       )
    AS
    SET NOCOUNT;
    BEGIN
    DECLARE @SENTENCIA = '', DECLARE @CONSULTA VARCHAR(1000) = 'SELECT * FROM TABLA'
    IF @TEXTO1 <> '' AND @TEXTO2 <> ''
       BEGIN
          SET @SENTENCIA += ' (NOMBRE LIKE ''%' + @TEXTO1 + '% OR NOMBRE LIKE ''%' + @TEXTO2 + '%)'''
       END
    ELSE IF @TEXTO1 <> ''
      BEGIN
         SET SENTENCIA += ' NOMBRE LIKE ''%' + @TEXTO1 + '%'''
      END
    ELSE IF @TEXTO2 <> ''
       BEGIN
         SET SENTENCIA += ' NOMBRE LIKE ''%' + @TEXTO2 + '%'''
       END
    IF @SENTENCIA <> ''
       BEGIN
          SET @CONSULTA += ' WHERE ' + @SENTENCIA
       END
    EXEC (@CONSULTA)
    END

    Mandar los parametros y te devuelva lo que necesitas.

    Aqui ya se topo algo parecido:

    ¿Cómo sería una condición Where para mostrar datos entre dos letras? por ejemplo...


    Vladimir Miranda Desarrollador Jr.

    • Propuesto como respuesta Juan Mondragón jueves, 28 de septiembre de 2017 18:17
    jueves, 28 de septiembre de 2017 15:03
  • Buenas, como lo dice el titulo, estoy queriendo hacer un filtro para una consutla SQL, basicamente necesito lo siguiente:

    Tengo un boton en el cual ejecuto un Select con determinada busqueda, lo que estoy intendando hacer es que, si escribo algo por ejemplo en el textbox id o nombre, me filtre la query dependiendo del dato que escribí.

    Me recomendaron lo siguiente, pero no estoy pudiendo hacerlo funcionar:

     Dim sql As String
            Dim da As New Odbc.OdbcDataAdapter
            Dim ds As New DataSet

            Dim nomadi, idadi As New Odbc.OdbcParameter
            nomadi.DbType = DbType.String
            nomadi.Value = txtnombreadicional.Text
            comando.Parameters.Add(nomadi)

            idadi.DbType = DbType.String
            idadi.Value = txtidadicional.Text
            comando.Parameters.Add(idadi)

            If nomadi.Value <> Nothing Then
                Filter = "Where adi_nombre = ?"
            End If

            Try
                sql = "SELECT id_adicional ID, adi_nombre Nombre, adi_costodiario Diario$, adi_activo Activo FROM ADICIONAL" if((filter<>nothing), filter & "AND", "WHERE")

    El filter que esta en negrita me da el siguiente error: "overload resolution failed because no accessible 'Filter' accepts this number of arguments"

    Y esto "if((filter<>nothing), filter & "AND", "WHERE")" me dice "End of statemend expected"

    Espero puedan ayudarme, de ante mano, Muchas gracias!

    Y por que no filtras localmente? en tu cliente ya que usar constantemente LIKE en le servidor dismuye su rendimiento. Que necesitas filtrar? de cuantos registros aprox filtras? 

    soy un vendido pero algo vendo &amp;amp;lt;br/&amp;amp;gt; Si soy divertido pero esto es serio &amp;amp;lt;br/&amp;amp;gt; Vivo riendo pero eso no quiere decir que nada me importa &amp;amp;lt;br/&amp;amp;gt; Ya pase las malas, me tocan las buenas, por eso empece a disfrutar ♪♫

    jueves, 28 de septiembre de 2017 15:13
  • A que te referis con localmente? 

    En este caso serian 2 textbox, en los cuales si ingreso algo cuando haga la busqueda tome el valor y busque en base a eso

    jueves, 28 de septiembre de 2017 19:23