none
En una consulta entre fechas Hay Fechas que no encuentra RRS feed

  • Pregunta

  • Estoy haciendo una Consulta en Visual Basic 10 con Access pero me resulta extraño e incomprensible que hay períodos que no reconoce por ejemplo si le pongo la fecha inicial 01/02/2018 y la fecha final 01/11/2018, no la encuentra, tampoco me da el reporte con  la fecha inicial 01/02/2018 y la fecha final 02/11/2018, en cambio si le pongo la fecha inicial 01/02/2018 y la fecha final 03/11/2018, SI ME DA EL REPORTE.

           Dim Dsql2, Dsql3 As Date
            Dsql2 = CDate(TBFechaInicial.Text)
            Dsql3 = CDate(TBFechaFinal.Text)



            sql = "SELECT * FROM TaCompras WHERE Fecha BETWEEN #" & Dsql2 & "# AND #" & Dsql3 & "#"

    martes, 20 de noviembre de 2018 3:06

Respuestas

  • Mira, para confirmar lo que te digo del formato haz lo siguiente, deja en hardcoded los valores de ejemplo, es decir:

    Dsql2 = '20181119'  -- Formato ISO
      Dsql3 = '20181120' --Formato ISO

    Una vez que hayas confirmado que funcione, entonces debe procurar hacer la conversion de fecha correctamente (creo que CDate te deberia permitir que le indiques el tipo de formato), pero bueno, no tengo experiencia en VB .NET, haz la prueba tal como te indico.


    "Oh, the wind, the wind is blowing,through the graves the wind is blowing,Freedom soon will come; then well come from the shadows".The Partisan(Leonard Cohen) Email: me[at]geohernandez.net Blog:www.geohernandez.net

    • Marcado como respuesta JuCar González jueves, 22 de noviembre de 2018 7:05
    martes, 20 de noviembre de 2018 17:47

Todas las respuestas

  • Hola JuCar González:

    Das muy pocos datos, para poder saber lo que ocurre, pero vaya por delante, que puedes cambiar el between por un fecha >= ....and fecha <

    martes, 20 de noviembre de 2018 5:59
  • Con la poca información que brindas lo unico que se me ocurre es que el formato de fecha que estas usando no va de la mano de la manera en que tienes almacenado dichos datos, puedes intentar probar con el formato estandar ISO, es dcir: YYYYMMDD y nos comentas si sigues obteniendo el mismo tipo de problema.

    "Oh, the wind, the wind is blowing,through the graves the wind is blowing,Freedom soon will come; then well come from the shadows".The Partisan(Leonard Cohen) Email: me[at]geohernandez.net Blog:www.geohernandez.net

    martes, 20 de noviembre de 2018 12:37
  • le hice el cambio que me sugeriste y me hace exactamente lo mismo

    sql = "SELECT * FROM TaCompras WHERE Fecha >= #" & Dsql2 & "# AND Fecha <= #" & Dsql3 & "#"

    tengo un reporte para un solo día y ese si me da los resultados correctos, pero así, en un rango no me da los resultados. si le pongo fechas finales 01/11/2018,02/11/2018....no lo encuentra, pero si hay datos

    martes, 20 de noviembre de 2018 17:30
  • Private Sub TBFechaFinal_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles TBFechaFinal.Leave

            MsgBox(TBFechaInicial.Text)
            MsgBox(TBFechaFinal.Text)

            Dim Dsql2, Dsql3 As Date
            Dsql2 = CDate(TBFechaInicial.Text)
            Dsql3 = CDate(TBFechaFinal.Text)



            ' sql = "SELECT * FROM TaCompras WHERE Fecha BETWEEN #" & Dsql2 & "# AND #" & Dsql3 & "#"
            sql = "SELECT * FROM TaCompras WHERE Fecha >= #" & Dsql2 & "# AND Fecha <= #" & Dsql3 & "#"


            MsgBox(sql)

            comm.CommandText = sql



            Try
                readr = comm.ExecuteReader()

                If readr.Read() Then


                    readr.Close()
                    mostrar()



                Else



                    MsgBox("Registro inválido", MsgBoxStyle.Exclamation, "Reporte de Compras ")
                    readr.Close()

                    TBFechaInicial.Select()

                End If






            Catch ex As Exception
                MsgBox(ex.ToString)


            End Try
        End Sub
    martes, 20 de noviembre de 2018 17:33
  • si le pongo fechas finales 01/11/2018,02/11/2018....no lo encuentra, pero si hay datos
    martes, 20 de noviembre de 2018 17:35
  • ¿Desde donde hago el cambio de formato?

    martes, 20 de noviembre de 2018 17:36
  • Mira, para confirmar lo que te digo del formato haz lo siguiente, deja en hardcoded los valores de ejemplo, es decir:

    Dsql2 = '20181119'  -- Formato ISO
      Dsql3 = '20181120' --Formato ISO

    Una vez que hayas confirmado que funcione, entonces debe procurar hacer la conversion de fecha correctamente (creo que CDate te deberia permitir que le indiques el tipo de formato), pero bueno, no tengo experiencia en VB .NET, haz la prueba tal como te indico.


    "Oh, the wind, the wind is blowing,through the graves the wind is blowing,Freedom soon will come; then well come from the shadows".The Partisan(Leonard Cohen) Email: me[at]geohernandez.net Blog:www.geohernandez.net

    • Marcado como respuesta JuCar González jueves, 22 de noviembre de 2018 7:05
    martes, 20 de noviembre de 2018 17:47
  • de plano, la fecha 01/11/2018 no la quiere reconocer, la probé en la parte que hace selección de datos de un solo día y que se supone ya está verificada, y sí hay  registros en la base de datos con esa fecha...

    martes, 20 de noviembre de 2018 17:53
  • A ver, haz usado el formato ISO, es decir: 20181101 o sigues probando con 01/11/2018

    "Oh, the wind, the wind is blowing,through the graves the wind is blowing,Freedom soon will come; then well come from the shadows".The Partisan(Leonard Cohen) Email: me[at]geohernandez.net Blog:www.geohernandez.net

    martes, 20 de noviembre de 2018 18:42
  • gracias..ya lo hice con el formato que me sugirió, pero me marca ahora un error y no lo hace. Raro, tengo registros de otras fechas y esos si me los encuentra....pero los de los primeros días de noviembre,,,,nada más no.

     
    martes, 20 de noviembre de 2018 19:53
  • Bueno, si muestras que tipo de error posiblemente se pueda ayudar, por otro lado, si tu consulta la has ejecutado directamente en el Management Studio de SQL Server y funciona para dicha fecha de noviembre, el error estaria a nivel del formato usado dentro de tu aplicacion, lo otro que veo es que no usas un DateView o un control similar , sino que el usuario ingresa directamente, en esta forma no puedes forzar el formato deseado.  

    "Oh, the wind, the wind is blowing,through the graves the wind is blowing,Freedom soon will come; then well come from the shadows".The Partisan(Leonard Cohen) Email: me[at]geohernandez.net Blog:www.geohernandez.net

    martes, 20 de noviembre de 2018 20:33
  • si, tenías razón, muchas gracias, ese era el problema, el de las fechas americanas y las fechas europeas, lo triste es que la solución no fue tan fácil, aún no logro comprender el motivo por el cuál algunas fechas si las reconocía pero otras no. No encontré una manera de hacerlo con una función directamente, tuve que programar el procedimiento. Text1.Text = Format(TIEMPO, "yyyy/mm/dd") No me funcionó  

            Dim daTxDia As Date
            Dim dd, mm, yy As String

            daTxDia = TxDia.Text

            dd = DateAndTime.Day(daTxDia) ' me da el día
            mm = DateAndTime.Month(daTxDia) ' me da el mes
            yy = DateAndTime.Year(daTxDia) ' me da el año
            dd = yy & "/" & mm & "/" & dd ' vuelvo a armar la fecha pero en formato yyyy/mm/dd

            MsgBox(dd)


            sql = "SELECT * FROM TaCompras WHERE Fecha =#" & dd & "#"
    jueves, 22 de noviembre de 2018 6:57