none
Ayuda con filtro de búsqueda de tabla Sql desde vb.net RRS feed

  • Pregunta

  • Buenas noches gente me estoy comiendo el bocho intentando hacer una función que reciba como parámetros filtros de búsqueda les muestro como construí la función y luego les explico mi idea.

    .....

    Public Shared Function BuscarClienteConParametro(ByVal ValorSituacion As String, ByVal ValorCuota As Integer, ByVal ValorRubro As Integer, ByVal ValorAFIP As String) As List(Of CCIyS.Entidades.Cliente)
            Dim Resultado As New List(Of CCIyS.Entidades.Cliente)
            Try
                Using Conexion As New CentroComercialEntities
                    Resultado = (From CLIENTEBD In Conexion.CLIENTE
                                 Join RUBROBD In Conexion.RUBRO
                                 On CLIENTEBD.IDRubro Equals RUBROBD.IDRubro
                                 Join CUOTABD In Conexion.CUOTA
                                 On CLIENTEBD.IDCuota Equals CUOTABD.IDCuota
                                 Where (If Not String.IsNullOrEmpty(ValorSituacion) Then CLIENTEBD.SituacionCliente = ValorSituacion End If) And (If Not String.IsNullOrEmpty(ValorCuota) Then CLIENTEBD.IDCuota = ValorCuota End If) And (If Not String.IsNullOrEmpty(ValorRubro) Then CLIENTEBD.IDRubro = ValorRubro End If) And (If Not String.IsNullOrEmpty(ValorAFIP) Then CLIENTEBD.SituacionAFIPCliente = ValorAFIP End If)
                                 Select New CCIyS.Entidades.Cliente With
                                 {
                                     .IDCliente = CLIENTEBD.IDCliente,
                                     .CodigoCliente = CLIENTEBD.CodigoCliente,
                                     .NombreCliente = CLIENTEBD.NombreCliente,
                                     .ApellidoCliente = CLIENTEBD.ApellidoCliente,
                                     .RazonSocialCliente = CLIENTEBD.RazonSocialCliente,
                                     .NombreFantasia = CLIENTEBD.NombreFantasiaCliente,
                                     .DniCliente = CLIENTEBD.DniCliente,
                                     .AnteCuitCuilCliente = CLIENTEBD.AnteCuitCuilCliente,
                                     .CuitCuilCliente = CLIENTEBD.CuitCuilCliente,
                                     .PostCuitCuilCliente = CLIENTEBD.PostCuitCuilCliente,
                                     .DireccionCliente = CLIENTEBD.DireccionCliente,
                                     .LocalidadCliente = CLIENTEBD.LocalidadCliente,
                                     .ProvinciaCliente = CLIENTEBD.ProvinciaCliente,
                                     .DireccionMailCliente = CLIENTEBD.DireccionMailCliente,
                                     .AnteTel1Cliente = CLIENTEBD.AnteTel1Cliente,
                                     .AnteTel2Cliente = CLIENTEBD.AnteTel2Cliente,
                                     .AnteTel3Cliente = CLIENTEBD.AnteTel3Cliente,
                                     .Telefono1Cliente = CLIENTEBD.Tel1Cliente,
                                     .Telefono2Cliente = CLIENTEBD.Tel2Cliente,
                                     .Telefono3Cliente = CLIENTEBD.Tel3Cliente,
                                     .FechaInicioActividades = CLIENTEBD.FechaInicioActividadesCliente,
                                     .FechaNacimientoTitular = CLIENTEBD.FechaNacimientoTitular,
                                     .SituacionCliente = CLIENTEBD.SituacionCliente,
                                     .SituacionAfipCliente = CLIENTEBD.SituacionAFIPCliente,
                                     .CantidadEmpleadosCliente = CLIENTEBD.CantEmpleadosCliente,
                                     .IDCuota = CUOTABD.IDCuota,
                                     .ValorCuota = CUOTABD.ValorCuota,
                                     .IDRubro = RUBROBD.IDRubro,
                                     .NombreRubro = RUBROBD.NombreRubro
                                 }).ToList()
                End Using
            Catch ex As Exception

            End Try
            Return Resultado
        End Function

    ......

    Básicamente mi idea es generar una función que reciba como parámetros al menos 1 a 4 variables, para generar búsqueda. Esas variables serán elegidas desde un form de diferentes ComboBox donde el usuario elegirá el parámetro de búsqueda. La idea por cierto es que si se ingresan dos parámetros, por ejemplo Situación "ACTIVO" y SituacionAFIP "RESPONSABLE INCRIPTO", la función devuelva una lista con todos los asociados que cumplan esas características.

    Dentro de la función el resultado sera una lista de clientes, eso esta OK.

    utilizo using para la conexión, eso esta OK

    El From y las iner join de la bd estan OK.

    El error lo produce en el where, no encuentro error de sintaxis alguno, sin embargo muestra error en el primer IF.

    El resto esta todo OK, incluso tengo otra funcion que esta andando a la perfeccion, es igual a esta solamente cambia el Where:

    ......

        Public Shared Function BuscarCliente(ByVal Valor As String) As List(Of CCIyS.Entidades.Cliente)
            Dim Resultado As New List(Of CCIyS.Entidades.Cliente)
            Try
                Using Conexion As New CentroComercialEntities
                    Resultado = (From CLIENTEBD In Conexion.CLIENTE
                                 Join RUBROBD In Conexion.RUBRO
                                 On CLIENTEBD.IDRubro Equals RUBROBD.IDRubro
                                 Join CUOTABD In Conexion.CUOTA
                                 On CLIENTEBD.IDCuota Equals CUOTABD.IDCuota
                                 Where CLIENTEBD.NombreCliente.Contains(Valor) OrElse CLIENTEBD.ApellidoCliente.Contains(Valor) OrElse CLIENTEBD.NombreFantasiaCliente.Contains(Valor) OrElse CLIENTEBD.RazonSocialCliente.Contains(Valor)
                                 Select New CCIyS.Entidades.Cliente With
                                 {
                                     .IDCliente = CLIENTEBD.IDCliente,
                                     .CodigoCliente = CLIENTEBD.CodigoCliente,
                                     .NombreCliente = CLIENTEBD.NombreCliente,
                                     .ApellidoCliente = CLIENTEBD.ApellidoCliente,
                                     .RazonSocialCliente = CLIENTEBD.RazonSocialCliente,
                                     .NombreFantasia = CLIENTEBD.NombreFantasiaCliente,
                                     .DniCliente = CLIENTEBD.DniCliente,
                                     .AnteCuitCuilCliente = CLIENTEBD.AnteCuitCuilCliente,
                                     .CuitCuilCliente = CLIENTEBD.CuitCuilCliente,
                                     .PostCuitCuilCliente = CLIENTEBD.PostCuitCuilCliente,
                                     .DireccionCliente = CLIENTEBD.DireccionCliente,
                                     .LocalidadCliente = CLIENTEBD.LocalidadCliente,
                                     .ProvinciaCliente = CLIENTEBD.ProvinciaCliente,
                                     .DireccionMailCliente = CLIENTEBD.DireccionMailCliente,
                                     .AnteTel1Cliente = CLIENTEBD.AnteTel1Cliente,
                                     .AnteTel2Cliente = CLIENTEBD.AnteTel2Cliente,
                                     .AnteTel3Cliente = CLIENTEBD.AnteTel3Cliente,
                                     .Telefono1Cliente = CLIENTEBD.Tel1Cliente,
                                     .Telefono2Cliente = CLIENTEBD.Tel2Cliente,
                                     .Telefono3Cliente = CLIENTEBD.Tel3Cliente,
                                     .FechaInicioActividades = CLIENTEBD.FechaInicioActividadesCliente,
                                     .FechaNacimientoTitular = CLIENTEBD.FechaNacimientoTitular,
                                     .SituacionCliente = CLIENTEBD.SituacionCliente,
                                     .SituacionAfipCliente = CLIENTEBD.SituacionAFIPCliente,
                                     .CantidadEmpleadosCliente = CLIENTEBD.CantEmpleadosCliente,
                                     .IDCuota = CUOTABD.IDCuota,
                                     .ValorCuota = CUOTABD.ValorCuota,
                                     .IDRubro = RUBROBD.IDRubro,
                                     .NombreRubro = RUBROBD.NombreRubro
                                 }).ToList()
                End Using
            Catch ex As Exception

            End Try
            Return Resultado
        End Function

    ....

    Esta segunda función fue creada para un motor de búsqueda rápido y eficaz desde un textbox, donde al tipear el evento KeyPress ira arrojando resultados de búsquedas, pero la función anterior es necesaria para generar listados de búsquedas puntuales, e incluso de varios parámetros en la misma búsqueda.

    Bueno para simplificar esto, la segunda función anda al pelo, la primera arroja error en el Where, pero es un error de sintaxis que no logro comprender, porque directamente no compila, subraya el "If Not String...." en color rojo.

    Sera que no es posible usar IF acá? O que hay error de sintaxis en el IF de una sola linea? Alguna ayuda?

    Saludos.

    miércoles, 20 de febrero de 2019 3:27

Todas las respuestas

  • Hola  

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, te hago la recomendación de ingresar al siguiente enlace en donde se expone un caso similar al que presentas y pudieras encontrar una posible solución.

    https://social.msdn.microsoft.com/Forums/es-ES/351402de-de80-4b72-ab81-48df4a1e786a/filtro-de-busqueda-sql-server?forum=sqlserveres

    https://social.msdn.microsoft.com/Forums/es-ES/96a72fc8-d38c-4ec4-a9b3-73c8fe945824/ayuda-con-filtros-de-bsqueda?forum=vbes

    https://social.msdn.microsoft.com/Forums/es-ES/ba9cbfef-a82f-4540-8169-f3fd673dee39/busqueda-con-filtros?forum=netfxwebes

    https://social.msdn.microsoft.com/Forums/es-ES/9c02785b-a739-4406-8181-fa601f186c3b/realizar-filtro-de-bsqueda-con-muchos-controles?forum=vcses

    Gracias por usar los foros de MSDN.

    Pedro Alfaro
     ____

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde. 

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.  

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    miércoles, 20 de febrero de 2019 21:03
    Moderador
  • Buenas tardes, no puedo dar con este problema. Necesito crear una función con código vb con conexión a base de datos, la misma emite un listado filtrado de la tabla de la base de datos.

    Necesito sintaxis o ejemplos de funciones con filtros, ya que no puedo encontrar info que de con este problema, todos hacen los filtros sobre consultas sql, ya que segun mi profesor es preferible cargar una lista en memoria y trabajar sobre ella todos los filtros, y no hacer reiteradas consultas a la bd.

    Saludos.

    lunes, 25 de febrero de 2019 22:20