none
me falla la búsqueda entre un rango de fechas en listview RRS feed

  • Pregunta

  • Hola a todos,

    Tengo un pequeño problema y es que no me funciona el codigo para buscar datos entre dos fechas.

    Cuando le da, me funciona, pero el 80% me da fallo, no veo donde me puede fallar, orfavor, me echais una mano?


    este es el codigo que uso


     Dim Fecha1 = PeriodoIni
            Dim Fecha2 = PeriodoFin

            For i As Int16 = 0 To Me.ListViewA.SelectedIndices.Count - 1


                ValorRef = ListViewA.SelectedItems(0).Text

            Next


            Me.ListViewD.Items.Clear()


            For Each ROW As DataRow In Me.PlataformaTableAdapter.GetData.Rows.Cast(Of DataRow).
              Where(Function(x) x.Field(Of Integer)("IDEmpleado") = ValorRef And x.Field(Of Date)("Fecha") >= Fecha1 AndAlso x.Field(Of Date)("Fecha") <= Fecha2)


    • Editado Andiamos martes, 4 de junio de 2019 16:32
    lunes, 3 de junio de 2019 19:18

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 puedes encontrar una posible solución para tu problema.

    https://social.msdn.microsoft.com/Forums/es-ES/86a18441-f459-4310-9c9b-8d08dc86a9c6/busqueda-por-rango?forum=netfxwebes

    https://social.msdn.microsoft.com/Forums/es-ES/319db146-3f27-4799-ad9f-b37806d215a0/rango-de-fechas?forum=netfxwebes

    https://social.msdn.microsoft.com/Forums/es-ES/794af440-4bf7-4d93-af67-b89717a613d5/validacin-de-un-rango-de-fechas-con-otro-rango-de-fechas?forum=netfxwebes

    https://social.msdn.microsoft.com/Forums/es-ES/a42cbc0f-9b77-476c-9fab-17acb10c6392/comparar-fecha-entre-rango-de-fechas?forum=vcses

    https://social.msdn.microsoft.com/Forums/es-ES/a8430ea3-641c-4ee7-9b96-fdd0083b91dc/como-genero-una-busqueda-de-rango-de-fecha-en-un-procedimiento-almacenado?forum=sqlserveresGracias por usar los foros de MSDN.

    Carlos Ruiz

     ____

    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, 5 de junio de 2019 14:02
  • Hola:

    Veo varias cosas:

    1) Asegurarse que Fecha1, Fecha2 son Fechas

       Dim Fecha1 As Date = PeriodoINI

    2) ValorRef ¿que quieres realmente que contenga?

       For i As Int16 = 0 To ListViewA.SelectedIndices.Count -1 ' recorres todos los items seleccionados..

          ValorRef = ListViewA.SelectedItems(0).Text ' PERO lees solo el primero (0).

       Es decir, en tu código ValorRef SIEMPRE será el valor del primer elemento seleccionado de ListViewA.

    Un saludo

    • Propuesto como respuesta Carlos_Ruiz_M miércoles, 5 de junio de 2019 16:42
    miércoles, 5 de junio de 2019 14:12
  • Hola, gracias por responder.

    te aclaro según comentas

    Fecha1 y Fecha2 son tipo date, así como PeriodoINI y PeriodoFIN,

    Con estas variables creo los periodos en Calendario para monthCalendar y para el rango de fechas a consultar, hasta aquí todo es correcto no hay errores.

    Sobre valorRef no es el mismo valor, es el valor que yo deseo de 12800 registros, es decir, el cual selecciono de la lista y obtengo el valor.

    Donde tengo el problema en en la condición AndAlso, me debería  salir dos fechas dentro del periodo seleccionado y sólo me sale un registro dentro de ese periodo (Fecha1), es decir, TRUE y omite la Fecha2, por lo que no busca dentro de este rango desde "16/05/2019 hasta 15/06/2019", lo curioso es que a veces  hace la funciona y la mayoría de las veces como que no.  Podría acabar con todo esto haciendo una sql, pero no es mi intención,  picar mas código innecesario para lograr determinadas cosas.

    Dentro de  x.Field(Of Date)("Fecha") >= Fecha1 AndAlso x.Field(Of Date)("Fecha") <= Fecha2) 

    hay alguna forma de proceder como between?

    Gracias

    miércoles, 5 de junio de 2019 15:23
  • Hola:

    La condición 'parece' correcta, por eso te decía que te 'asegures' que los campos fecha son de tipo DATE y que hace la conversión correctamente. Muchas veces los problemas de fechas vienen por conversiones implicitas, que .NET por defecto las hace basándose en formato americano (mm/dd/yyyy)

    Comprueba que x.Field(Of Date)("Fecha") esté convirtiendo correctamente la fecha.

    Un saludo

    • Propuesto como respuesta Carlos_Ruiz_M viernes, 7 de junio de 2019 13:18
    miércoles, 5 de junio de 2019 15:43
  • Hola de nuevo,

    Ya he encontrado el problema, sin darme cuenta en una classe tenia duplicado un código que marcaba el periodo del calendario, al realizar la búsqueda esta duplicidad hacia que al cumplirse la primera condición Fecha1=true omitiera Fecha2. 


    Gracias por vuestra paciencia y ayuda.

    Un saludo

    jueves, 6 de junio de 2019 18:28