none
Saber si la hora actual del sistema esta en un rangos de horas grabadas en una base de datos en SQlite. RRS feed

  • Pregunta

  • Buenas tardes a todos, a como dice el titulo, estoy tratando de crear un función que me permita cargar un DataTable con las horas registradas en una base de datos en SQLite, una vez cargados el DataTable poder recorrerlo y que me diga si la hora actual del sistema encaja en algún rango de la lista de horas grabadas en la bd de SQLite.

    Les muestro lo que tengo hasta ahora haver si alguien puede brindarme su apoyo,

    saludos cordiales.

    tabla en la base de datos SQLite:

    Classe en vb.net

    Imports System.Drawing.Drawing2D
    Imports FontAwesome.Sharp
    Imports System.Data.SQLite
    Imports System.Text
    Imports System.Runtime.InteropServices
    Imports System.Threading
    Imports CrystalDecisions.CrystalReports.Engine
    Imports CrystalDecisions.Shared
    Imports CrystalDecisions.Windows.Forms
    Public Class ClassAlgoritmoHora
    
        Shared Function obtenerhorasistema() As String
            Dim hora As String = Now.ToString("hh:mm tt")
            Return hora
        End Function
    
        Shared Function obtenerDiaSistema() As Integer
            Dim dia As Integer = DateTime.Now.DayOfWeek
            Return dia
        End Function
    
        Shared Function buscarRango() As String
    
            Dim dia_actual As Integer = obtenerDiaSistema()
            Dim hora_actual As String = obtenerhorasistema()
    
            Dim hora_grabada_i, hora_grabada_f As DateTime
            Dim cadena_devuelta As String
    
            Dim dt As New DataTable("Datos")
            Using cnn As New SQLiteConnection(CS)
                Dim cmd As SQLiteCommand = cnn.CreateCommand()
                cmd.CommandText = "select iddia, hi, hf, sorteo from CantSorteosxSemanas Where iddia='" & dia_actual & "order by sorteo asc'"
                Dim da As New SQLiteDataAdapter(cmd)
                da.Fill(dt)
            End Using
    
    
            For Each row As DataRow In dt.Rows
    
                    hora_grabada_i = Convert.ToDateTime(row(1).Value)
                    hora_grabada_f = Convert.ToDateTime(row(2).Value)
    
                    If hora_actual >= hora_grabada_i And hora_actual <= hora_grabada_f Then
                        cadena_devuelta = "Las :" + "" + CStr(hora_actual) + "" + ", esta en el siguiente rango :" + "" + CStr(hora_grabada_i) + "" + CStr(hora_grabada_f)
                        Return cadena_devuelta
    
                End If
    
                Next
    
    
        End Function
    
    
    End Class

    Llamada de la clase y mostrar en un form el resultado:

    Código de llamada en evento clip del botón:

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
            Me.lblmsgbox.Text = ClassAlgoritmoHora.buscarRango()
        End Sub

    miércoles, 6 de mayo de 2020 23:42

Respuestas

  • Hola:
    En un Form como el de la imagen

    Copia y pega el siguiente codigo

    Option Strict On
    Option Explicit On
    Public Class Form3
        Private mdtDataTable As New DataTable
        Private Sub Form3_Load(sender As Object, e As EventArgs) Handles Me.Load
            dtpHora.Format = DateTimePickerFormat.Custom
            dtpHora.CustomFormat = "HH:mm"
            'Añadir columna al datatable de validacion
            mdtDataTable.Columns.Add(New DataColumn("HoraIni", Type.GetType("System.DateTime")))
            mdtDataTable.Columns.Add(New DataColumn("HoraFin", Type.GetType("System.DateTime")))
            Dim lDataRow As DataRow
            lDataRow = mdtDataTable.NewRow
            lDataRow.Item("HoraIni") = Convert.ToDateTime("06:00")
            lDataRow.Item("HoraFin") = Convert.ToDateTime("09:00")
            mdtDataTable.Rows.Add(lDataRow)
            lDataRow = mdtDataTable.NewRow
            lDataRow.Item("HoraIni") = Convert.ToDateTime("09:00")
            lDataRow.Item("HoraFin") = Convert.ToDateTime("14:00")
            mdtDataTable.Rows.Add(lDataRow)
            lDataRow = mdtDataTable.NewRow
            lDataRow.Item("HoraIni") = Convert.ToDateTime("14:00")
            lDataRow.Item("HoraFin") = Convert.ToDateTime("21:00")
            mdtDataTable.Rows.Add(lDataRow)
        End Sub
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            chkHoraValida.Checked = Buscar()
        End Sub

        Private Function Buscar() As Boolean
            Dim Retorno As Boolean = False
            Dim liHora As Integer = DatePart(DateInterval.Hour, Me.dtpHora.Value)
            Dim liMinuto As Integer = DatePart(DateInterval.Minute, Me.dtpHora.Value)
            Dim TiempoCompara As New Tiempo(liHora, liMinuto)
            Dim CantidadCompara As Integer = TiempoCompara.Minutos(TiempoCompara)
            Dim TiempoIni As Tiempo
            Dim CantidadIni As Integer
            Dim TiempoFin As Tiempo
            Dim CantidadFin As Integer
            '
            For Each Fila As DataRow In mdtDataTable.Rows
                TiempoIni = New Tiempo(DatePart(DateInterval.Hour, Convert.ToDateTime(Fila.Item("HoraIni"))), DatePart(DateInterval.Minute, Convert.ToDateTime(Fila.Item("HoraIni"))))
                CantidadIni = TiempoIni.Minutos(TiempoIni)
                TiempoFin = New Tiempo(DatePart(DateInterval.Hour, Convert.ToDateTime(Fila.Item("HoraFin"))), DatePart(DateInterval.Minute, Convert.ToDateTime(Fila.Item("HoraFin"))))
                CantidadFin = TiempoFin.Minutos(TiempoFin)
                If CantidadCompara >= CantidadIni And CantidadCompara <= CantidadFin Then
                    Retorno = True
                    Exit For
                End If
            Next
            Return Retorno
        End Function
    End Class

    Se hace uso de esta clase

    Public Class Tiempo
        Public Property Hora As Integer
        Public Property Minuto As Integer
        Public Sub New(vhora As Integer, vminuto As Integer)
            Hora = vhora
            Minuto = vminuto
        End Sub
        Public Function Minutos(vTiempo As Tiempo) As Integer
            Return vTiempo.Hora * 60 + vTiempo.Minuto
        End Function
    End Class

    Un saludo desde Bilbo
    Carlos

    jueves, 7 de mayo de 2020 10:17

Todas las respuestas

  • Hola:
    En un Form como el de la imagen

    Copia y pega el siguiente codigo

    Option Strict On
    Option Explicit On
    Public Class Form3
        Private mdtDataTable As New DataTable
        Private Sub Form3_Load(sender As Object, e As EventArgs) Handles Me.Load
            dtpHora.Format = DateTimePickerFormat.Custom
            dtpHora.CustomFormat = "HH:mm"
            'Añadir columna al datatable de validacion
            mdtDataTable.Columns.Add(New DataColumn("HoraIni", Type.GetType("System.DateTime")))
            mdtDataTable.Columns.Add(New DataColumn("HoraFin", Type.GetType("System.DateTime")))
            Dim lDataRow As DataRow
            lDataRow = mdtDataTable.NewRow
            lDataRow.Item("HoraIni") = Convert.ToDateTime("06:00")
            lDataRow.Item("HoraFin") = Convert.ToDateTime("09:00")
            mdtDataTable.Rows.Add(lDataRow)
            lDataRow = mdtDataTable.NewRow
            lDataRow.Item("HoraIni") = Convert.ToDateTime("09:00")
            lDataRow.Item("HoraFin") = Convert.ToDateTime("14:00")
            mdtDataTable.Rows.Add(lDataRow)
            lDataRow = mdtDataTable.NewRow
            lDataRow.Item("HoraIni") = Convert.ToDateTime("14:00")
            lDataRow.Item("HoraFin") = Convert.ToDateTime("21:00")
            mdtDataTable.Rows.Add(lDataRow)
        End Sub
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            chkHoraValida.Checked = Buscar()
        End Sub

        Private Function Buscar() As Boolean
            Dim Retorno As Boolean = False
            Dim liHora As Integer = DatePart(DateInterval.Hour, Me.dtpHora.Value)
            Dim liMinuto As Integer = DatePart(DateInterval.Minute, Me.dtpHora.Value)
            Dim TiempoCompara As New Tiempo(liHora, liMinuto)
            Dim CantidadCompara As Integer = TiempoCompara.Minutos(TiempoCompara)
            Dim TiempoIni As Tiempo
            Dim CantidadIni As Integer
            Dim TiempoFin As Tiempo
            Dim CantidadFin As Integer
            '
            For Each Fila As DataRow In mdtDataTable.Rows
                TiempoIni = New Tiempo(DatePart(DateInterval.Hour, Convert.ToDateTime(Fila.Item("HoraIni"))), DatePart(DateInterval.Minute, Convert.ToDateTime(Fila.Item("HoraIni"))))
                CantidadIni = TiempoIni.Minutos(TiempoIni)
                TiempoFin = New Tiempo(DatePart(DateInterval.Hour, Convert.ToDateTime(Fila.Item("HoraFin"))), DatePart(DateInterval.Minute, Convert.ToDateTime(Fila.Item("HoraFin"))))
                CantidadFin = TiempoFin.Minutos(TiempoFin)
                If CantidadCompara >= CantidadIni And CantidadCompara <= CantidadFin Then
                    Retorno = True
                    Exit For
                End If
            Next
            Return Retorno
        End Function
    End Class

    Se hace uso de esta clase

    Public Class Tiempo
        Public Property Hora As Integer
        Public Property Minuto As Integer
        Public Sub New(vhora As Integer, vminuto As Integer)
            Hora = vhora
            Minuto = vminuto
        End Sub
        Public Function Minutos(vTiempo As Tiempo) As Integer
            Return vTiempo.Hora * 60 + vTiempo.Minuto
        End Function
    End Class

    Un saludo desde Bilbo
    Carlos

    jueves, 7 de mayo de 2020 10:17
  • Excelente aporte Carlos de Bilbo.

    código:

    'Option Strict On
    'Option Explicit On
    
    Imports System.Drawing.Drawing2D
    Imports FontAwesome.Sharp
    Imports System.Data.SQLite
    Imports System.Text
    Imports System.Runtime.InteropServices
    Imports System.Threading
    Imports CrystalDecisions.CrystalReports.Engine
    Imports CrystalDecisions.Shared
    Imports CrystalDecisions.Windows.Forms
    
    Public Class FormProbarHoras
    
        Private mdtDataTable As New DataTable
    
    
        Public Sub llenarDataTable()
    
            Dim dia_actual As Integer = ClassAlgoritmoHora.obtenerDiaSistema
            lblndia.Text = dia_actual
    
            Using cnn As New SQLiteConnection(CS)
                Dim cmd As SQLiteCommand = cnn.CreateCommand()
                cmd.CommandText = "select iddia, hi, hf, sorteo from CantSorteosxSemanas Where iddia='" & Me.lblndia.Text & "'"
                Dim da As New SQLiteDataAdapter(cmd)
                da.Fill(mdtDataTable)
    
            End Using
    
            Me.DataGridView1.DataSource = mdtDataTable
    
        End Sub
    
        Private Sub FormProbarHoras_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
            dtpHora.Format = DateTimePickerFormat.Custom
            dtpHora.CustomFormat = "HH:mm"
    
            llenarDataTable()
    
    
    
        End Sub
    
    
        Private Function Buscar() As Boolean
            Dim Retorno As Boolean = False
            Dim liHora As Integer = DatePart(DateInterval.Hour, Me.dtpHora.Value)
            Dim liMinuto As Integer = DatePart(DateInterval.Minute, Me.dtpHora.Value)
            Dim TiempoCompara As New Tiempo(liHora, liMinuto)
            Dim CantidadCompara As Integer = TiempoCompara.Minutos(TiempoCompara)
            Dim TiempoIni As Tiempo
            Dim CantidadIni As Integer
            Dim TiempoFin As Tiempo
            Dim CantidadFin As Integer
            '
            For Each Fila As DataRow In mdtDataTable.Rows
                TiempoIni = New Tiempo(DatePart(DateInterval.Hour, Convert.ToDateTime(Fila.Item(1))), DatePart(DateInterval.Minute, Convert.ToDateTime(Fila.Item(1))))
                CantidadIni = TiempoIni.Minutos(TiempoIni)
                TiempoFin = New Tiempo(DatePart(DateInterval.Hour, Convert.ToDateTime(Fila.Item(2))), DatePart(DateInterval.Minute, Convert.ToDateTime(Fila.Item(2))))
                CantidadFin = TiempoFin.Minutos(TiempoFin)
                If CantidadCompara >= CantidadIni And CantidadCompara <= CantidadFin Then
                    Retorno = True
                    Exit For
                End If
            Next
            Return Retorno
        End Function
    
        Public Class Tiempo
            Public Property Hora As Integer
            Public Property Minuto As Integer
            Public Sub New(vhora As Integer, vminuto As Integer)
                Hora = vhora
                Minuto = vminuto
            End Sub
            Public Function Minutos(vTiempo As Tiempo) As Integer
                Return vTiempo.Hora * 60 + vTiempo.Minuto
            End Function
        End Class
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            chkHoraValida.Checked = Buscar()
    
            ' llenarDataTable()
    
        End Sub
    End Class

    Resultado:

    Gracias.

    jueves, 7 de mayo de 2020 22:21