Principales respuestas
Rango de horas

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
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:
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 .NETPí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
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:
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 .NETPí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
-