在 VB.NET 中访问 DB 和计时器 - 当程序为 运行 且仅在启动时运行时不在 运行
Access DB and Timer in VB.NET - Not running when program is running and only runs upon startup
我遇到了一个提醒程序在该做某事时没有启动的问题。
看来我设置的计时器不会在后台 运行,并且只会在启动期间 运行 一次。
你能告诉我下面这段代码有什么问题吗?
我已经尝试过其他论坛无济于事,下面的这段代码在后台 运行 时根本不会 运行。
提醒将在预定时间之前显示。
Using connection As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\rmd.mdb")
Dim command As New OleDbCommand("select * from rmd1", connection)
Dim recurr As Boolean
Dim recurrweek As String
Dim recurrdow As String
Dim recurrby As String
Dim reccurrmonth As String
Dim active As Boolean
Dim recurrmonthly As Boolean
Dim recurrweekly As Boolean
Dim recurrdaily As Boolean
Dim monthofday As Integer
connection.Open()
Dim reader As OleDbDataReader = command.ExecuteReader()
While reader.Read()
recurr = reader(3)
reccurrmonth = reader(2).ToString
recurrby = reader(4).ToString
recurrweek = reader(5).ToString
active = reader(6)
Select Case reccurrmonth
Case 0
monthofday = 1
Case 1
monthofday = 2
Case 2
monthofday = 3
Case 3
monthofday = 4
Case 4
monthofday = 5
Case 5
monthofday = 6
Case 6
monthofday = 7
Case 7
monthofday = 8
Case 8
monthofday = 9
Case 9
monthofday = 10
Case 10
monthofday = 11
Case 11
monthofday = 12
End Select
Select Case recurrweek
Case 0
recurrdow = DayOfWeek.Sunday
Case 1
recurrdow = DayOfWeek.Monday
Case 2
recurrdow = DayOfWeek.Tuesday
Case 3
recurrdow = DayOfWeek.Wednesday
Case 4
recurrdow = DayOfWeek.Thursday
Case 5
recurrdow = DayOfWeek.Friday
Case 6
recurrdow = DayOfWeek.Saturday
Case 7
recurrdow = Nothing
End Select
Select Case recurrby
Case 0
recurrdaily = True
recurrmonthly = False
recurrweekly = False
Case 1
recurrweekly = True
recurrdaily = False
recurrmonthly = False
Case 2
recurrmonthly = True
recurrdaily = False
recurrweekly = False
End Select
Dim currentTime As TimeSpan = Date.Now.TimeOfDay
Dim reminderTime As TimeSpan = reader.GetDateTime(reader.GetOrdinal("time")).TimeOfDay
If reminderTime.Hours = currentTime.Hours AndAlso reminderTime.Minutes = currentTime.Minutes AndAlso reminderTime.Seconds = currentTime.Seconds Then
If recurr = True Then
If active = True Then
Else
Exit Sub
End If
If recurrdaily = True Then
ElseIf recurrweekly = True Then
If Now.DayOfWeek = recurrdow Then
End If
ElseIf recurrmonthly = True Then
If Now.Month = monthofday Then
End If
Else
Exit Sub
End If
ElseIf recurr = False Then
Exit Sub
End If
Me.TextBox1.Text += "Task:" + reader(1).ToString() + "Date:" + reminderTime.ToString + vbNewLine
ReminderForm.PictureBox1.Image = Image.FromFile(reader(8).ToString)
ReminderForm.lbltime.Text = reminderTime.ToString
ReminderForm.Label1.Text = reader(1).ToString
ReminderForm.Show()
tmrrmd.Stop()
End If
End While
End Using
计时器不适用于上面的代码。
谢谢
我已经尝试理顺代码了一点,但我仍然不知道您要做什么。带有空块的 If 语句没有意义。如果您想要与条件相反,请使用 Not。布尔值不需要 = True 或 False。它们是布尔值,将被这样计算。
Private Function GetData() As DataTable
Dim dt As New DataTable
Using connection As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\rmd.mdb"),
command As New OleDbCommand("select * from rmd1", connection)
connection.Open()
Using reader = command.ExecuteReader()
dt.Load(reader)
End Using
End Using
Return dt
End Function
Private Sub OPCode()
Dim dt = GetData()
Dim recurr As Boolean
Dim recurrweek As Integer
Dim recurrdow As Integer
Dim recurrby As Integer
Dim reccurrmonth As Integer
Dim active As Boolean
Dim recurrmonthly As Boolean
Dim recurrweekly As Boolean
Dim recurrdaily As Boolean
Dim monthofday As Integer
Dim sb As New StringBuilder
For Each row As DataRow In dt.Rows
recurr = CBool(row(3))
reccurrmonth = CInt(row(2))
recurrby = CInt(row(4))
recurrweek = CInt(row(5))
active = CBool(row(6))
Select Case reccurrmonth
Case 0
monthofday = 1
Case 1
monthofday = 2
Case 2
monthofday = 3
Case 3
monthofday = 4
Case 4
monthofday = 5
Case 5
monthofday = 6
Case 6
monthofday = 7
Case 7
monthofday = 8
Case 8
monthofday = 9
Case 9
monthofday = 10
Case 10
monthofday = 11
Case 11
monthofday = 12
End Select
Select Case recurrweek
Case 0
recurrdow = DayOfWeek.Sunday
Case 1
recurrdow = DayOfWeek.Monday
Case 2
recurrdow = DayOfWeek.Tuesday
Case 3
recurrdow = DayOfWeek.Wednesday
Case 4
recurrdow = DayOfWeek.Thursday
Case 5
recurrdow = DayOfWeek.Friday
Case 6
recurrdow = DayOfWeek.Saturday
Case 7
recurrdow = 0
End Select
Select Case recurrby
Case 0
recurrdaily = True
recurrweekly= False
recurrmonthly = False
Case 1
recurrdaily = False
recurrweekly = True
recurrmonthly = False
Case 2
recurrdaily = False
recurrweekly = False
recurrmonthly = True
End Select
Dim currentTime As TimeSpan = Date.Now.TimeOfDay
Dim reminderTime As TimeSpan = CDate(row("time")).TimeOfDay
If reminderTime.Hours = currentTime.Hours Then
If recurr = True Then
If Not active OrElse Not recurrdaily Then
Exit Sub
End If
Else
Exit Sub
End If
sb.AppendLine($"Task:{row(1)}Date:{reminderTime}")
ReminderForm.PictureBox1.Image = Image.FromFile(row(8).ToString)
ReminderForm.lbltime.Text = reminderTime.ToString
ReminderForm.Label1.Text =row(1).ToString
ReminderForm.Show()
tmrrmd.Stop()
End If
Next
TextBox1.Text = sb.ToString
End Sub
编辑
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
OPCode()
End Sub
我遇到了一个提醒程序在该做某事时没有启动的问题。 看来我设置的计时器不会在后台 运行,并且只会在启动期间 运行 一次。 你能告诉我下面这段代码有什么问题吗? 我已经尝试过其他论坛无济于事,下面的这段代码在后台 运行 时根本不会 运行。 提醒将在预定时间之前显示。
Using connection As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\rmd.mdb")
Dim command As New OleDbCommand("select * from rmd1", connection)
Dim recurr As Boolean
Dim recurrweek As String
Dim recurrdow As String
Dim recurrby As String
Dim reccurrmonth As String
Dim active As Boolean
Dim recurrmonthly As Boolean
Dim recurrweekly As Boolean
Dim recurrdaily As Boolean
Dim monthofday As Integer
connection.Open()
Dim reader As OleDbDataReader = command.ExecuteReader()
While reader.Read()
recurr = reader(3)
reccurrmonth = reader(2).ToString
recurrby = reader(4).ToString
recurrweek = reader(5).ToString
active = reader(6)
Select Case reccurrmonth
Case 0
monthofday = 1
Case 1
monthofday = 2
Case 2
monthofday = 3
Case 3
monthofday = 4
Case 4
monthofday = 5
Case 5
monthofday = 6
Case 6
monthofday = 7
Case 7
monthofday = 8
Case 8
monthofday = 9
Case 9
monthofday = 10
Case 10
monthofday = 11
Case 11
monthofday = 12
End Select
Select Case recurrweek
Case 0
recurrdow = DayOfWeek.Sunday
Case 1
recurrdow = DayOfWeek.Monday
Case 2
recurrdow = DayOfWeek.Tuesday
Case 3
recurrdow = DayOfWeek.Wednesday
Case 4
recurrdow = DayOfWeek.Thursday
Case 5
recurrdow = DayOfWeek.Friday
Case 6
recurrdow = DayOfWeek.Saturday
Case 7
recurrdow = Nothing
End Select
Select Case recurrby
Case 0
recurrdaily = True
recurrmonthly = False
recurrweekly = False
Case 1
recurrweekly = True
recurrdaily = False
recurrmonthly = False
Case 2
recurrmonthly = True
recurrdaily = False
recurrweekly = False
End Select
Dim currentTime As TimeSpan = Date.Now.TimeOfDay
Dim reminderTime As TimeSpan = reader.GetDateTime(reader.GetOrdinal("time")).TimeOfDay
If reminderTime.Hours = currentTime.Hours AndAlso reminderTime.Minutes = currentTime.Minutes AndAlso reminderTime.Seconds = currentTime.Seconds Then
If recurr = True Then
If active = True Then
Else
Exit Sub
End If
If recurrdaily = True Then
ElseIf recurrweekly = True Then
If Now.DayOfWeek = recurrdow Then
End If
ElseIf recurrmonthly = True Then
If Now.Month = monthofday Then
End If
Else
Exit Sub
End If
ElseIf recurr = False Then
Exit Sub
End If
Me.TextBox1.Text += "Task:" + reader(1).ToString() + "Date:" + reminderTime.ToString + vbNewLine
ReminderForm.PictureBox1.Image = Image.FromFile(reader(8).ToString)
ReminderForm.lbltime.Text = reminderTime.ToString
ReminderForm.Label1.Text = reader(1).ToString
ReminderForm.Show()
tmrrmd.Stop()
End If
End While
End Using
计时器不适用于上面的代码。 谢谢
我已经尝试理顺代码了一点,但我仍然不知道您要做什么。带有空块的 If 语句没有意义。如果您想要与条件相反,请使用 Not。布尔值不需要 = True 或 False。它们是布尔值,将被这样计算。
Private Function GetData() As DataTable
Dim dt As New DataTable
Using connection As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\rmd.mdb"),
command As New OleDbCommand("select * from rmd1", connection)
connection.Open()
Using reader = command.ExecuteReader()
dt.Load(reader)
End Using
End Using
Return dt
End Function
Private Sub OPCode()
Dim dt = GetData()
Dim recurr As Boolean
Dim recurrweek As Integer
Dim recurrdow As Integer
Dim recurrby As Integer
Dim reccurrmonth As Integer
Dim active As Boolean
Dim recurrmonthly As Boolean
Dim recurrweekly As Boolean
Dim recurrdaily As Boolean
Dim monthofday As Integer
Dim sb As New StringBuilder
For Each row As DataRow In dt.Rows
recurr = CBool(row(3))
reccurrmonth = CInt(row(2))
recurrby = CInt(row(4))
recurrweek = CInt(row(5))
active = CBool(row(6))
Select Case reccurrmonth
Case 0
monthofday = 1
Case 1
monthofday = 2
Case 2
monthofday = 3
Case 3
monthofday = 4
Case 4
monthofday = 5
Case 5
monthofday = 6
Case 6
monthofday = 7
Case 7
monthofday = 8
Case 8
monthofday = 9
Case 9
monthofday = 10
Case 10
monthofday = 11
Case 11
monthofday = 12
End Select
Select Case recurrweek
Case 0
recurrdow = DayOfWeek.Sunday
Case 1
recurrdow = DayOfWeek.Monday
Case 2
recurrdow = DayOfWeek.Tuesday
Case 3
recurrdow = DayOfWeek.Wednesday
Case 4
recurrdow = DayOfWeek.Thursday
Case 5
recurrdow = DayOfWeek.Friday
Case 6
recurrdow = DayOfWeek.Saturday
Case 7
recurrdow = 0
End Select
Select Case recurrby
Case 0
recurrdaily = True
recurrweekly= False
recurrmonthly = False
Case 1
recurrdaily = False
recurrweekly = True
recurrmonthly = False
Case 2
recurrdaily = False
recurrweekly = False
recurrmonthly = True
End Select
Dim currentTime As TimeSpan = Date.Now.TimeOfDay
Dim reminderTime As TimeSpan = CDate(row("time")).TimeOfDay
If reminderTime.Hours = currentTime.Hours Then
If recurr = True Then
If Not active OrElse Not recurrdaily Then
Exit Sub
End If
Else
Exit Sub
End If
sb.AppendLine($"Task:{row(1)}Date:{reminderTime}")
ReminderForm.PictureBox1.Image = Image.FromFile(row(8).ToString)
ReminderForm.lbltime.Text = reminderTime.ToString
ReminderForm.Label1.Text =row(1).ToString
ReminderForm.Show()
tmrrmd.Stop()
End If
Next
TextBox1.Text = sb.ToString
End Sub
编辑
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
OPCode()
End Sub