none
Rango de horas RRS feed

  • Pregunta

  • Buenos días mis estimados, espero que alguien me pueda ayudar con el siguiente problema. 

    Estoy trabajando en un programa que me devuelva datos de dos tablas en sql server utilizando vb. Esos datos deben ser mostrados en un datagridview por un rango de fechas y de horas. Ejemplo: si selecciono las fechas 12-04-2016 / 14-04-2016 y las horas 10:00 /  15:00 el datagridview me debería mostrar todos los registros desde el 12-04-2016 de las 10 AM en adelante hasta las 15:00 PM del día 14-04-2016.

    Soy bastante nuevo en esto de visual basic y solamente he conseguido filtrar el rango de fechas, pero de horas aun nada. Estoy utilizando 4 DateTimePicker y un botón que realiza la consulta. les dejo el código para ver si alguien me puede ayudar.

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            Dim conexionSQL As New SqlConnection(My.Settings.prueba3ConnectionString)
            Dim Fsql As String = "select pos.Fecha,pos.Hora,pos.Lat,pos.Lon,vari.Nombre,vari.NombreBodega,vari.Nivel from  PosiciónBarco pos inner join  Variable vari on pos.Id=vari.Id  where Fecha between '" & Format(DateTimePicker1.Value.Date.ToString, "short date") & _
            " 'and fecha ' " & Format(DateTimePicker2.Value.Date.ToString, "short date") & " 'and Hora between '" & Format(DateTimePicker3, "time") & " 'and hora ' " & Format(DateTimePicker4, "time") ' "

            Try
                conexionSQL.Open()
                Dim comandoSql As New SqlCommand(Fsql, conexionSQL)
                Dim adaptador As New SqlDataAdapter(comandoSql)
                Dim datatable As New DataTable
                adaptador.Fill(datatable)
                DataGridView1.DataSource = datatable
            Finally
                conexionSQL.Close()
            End Try
        End Sub

     

    martes, 26 de abril de 2016 12:39

Respuestas

  • Hola Adrian,

    varias cosas.

    Por un lado éste no es el foro correcto. Las versiones de Visual Basic 5/6 son versiones antiguas anteriores a la aparición de la tecnología .NET. Deberías hacer tu consulta en el foro de VB.NET:

    Lenguaje VB.NET

    Además, por diversas razones (claridad de código, seguridad, rendimiento), siempre es recomendable utilizar parámetros en las sentencias SQL, en lugar de concatenar los valores directamente en ellas.

    Si quieres ver cómo realizar una consulta parametrizada puedes echar un vistazo a la documentación de MSDN:

    SqlParameterCollection.AddWithValue (Método) (String, Object)

    Por otro lado ¿por qué guardas por separado la fecha y la hora? ¿de qué tipo de datos son los campos Fecha y Hora? Resultaría más manejable si lo tuvieras en un único campo DateTime.

    Además, aunque te funcionase, tal y como montas la WHERE se quedarían fuera todos los registros que no estuviesen en el rango de horas que marcas, aunque esté en un día dentro del rango. Es decir, con los datos de tu ejemplo, el 13-04-2016 a las 18:00 quedaría fuera por no encontrarse entre las 10:00 y las 15:00.

    Tendrías que componer la fecha/hora de inicio y la fecha/hora de fin y compararlas con la fecha/hora generada a partir de los campos Fecha y Hora. Pero para ver cómo hacerlo haría falta saber el tipo de datos de estos campos y en qué formato se guardan los valores.


    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, ...

    • Marcado como respuesta adriian.91 viernes, 27 de mayo de 2016 13:47
    martes, 26 de abril de 2016 13:53

Todas las respuestas

  • Hola Adrian,

    varias cosas.

    Por un lado éste no es el foro correcto. Las versiones de Visual Basic 5/6 son versiones antiguas anteriores a la aparición de la tecnología .NET. Deberías hacer tu consulta en el foro de VB.NET:

    Lenguaje VB.NET

    Además, por diversas razones (claridad de código, seguridad, rendimiento), siempre es recomendable utilizar parámetros en las sentencias SQL, en lugar de concatenar los valores directamente en ellas.

    Si quieres ver cómo realizar una consulta parametrizada puedes echar un vistazo a la documentación de MSDN:

    SqlParameterCollection.AddWithValue (Método) (String, Object)

    Por otro lado ¿por qué guardas por separado la fecha y la hora? ¿de qué tipo de datos son los campos Fecha y Hora? Resultaría más manejable si lo tuvieras en un único campo DateTime.

    Además, aunque te funcionase, tal y como montas la WHERE se quedarían fuera todos los registros que no estuviesen en el rango de horas que marcas, aunque esté en un día dentro del rango. Es decir, con los datos de tu ejemplo, el 13-04-2016 a las 18:00 quedaría fuera por no encontrarse entre las 10:00 y las 15:00.

    Tendrías que componer la fecha/hora de inicio y la fecha/hora de fin y compararlas con la fecha/hora generada a partir de los campos Fecha y Hora. Pero para ver cómo hacerlo haría falta saber el tipo de datos de estos campos y en qué formato se guardan los valores.


    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, ...

    • Marcado como respuesta adriian.91 viernes, 27 de mayo de 2016 13:47
    martes, 26 de abril de 2016 13:53
  • ok gracias por la info, continuare la consulta en el otro foro, pero los datos que deseo guardar son date y time...   la verdad es que he pensado en usar un solo campo datetime pero la verdad es que no se me ha ocurrido como hacerlo.

    martes, 26 de abril de 2016 14:25