保存秒表以访问数据库 vb.net
Saving a stopwatch to access database vb.net
我正在创建一个虚拟时钟,以便员工可以跟踪他们整个月的时间。用户将在屏幕上按下一个按钮,该按钮将 start/stop 计时器计时 in/out。此函数的示例代码如下:
Private CAstopwatch As New Stopwatch
Private Sub timerca_tick(sender As Object, e As EventArgs) Handles Timerca.Tick
Dim elapsed As TimeSpan = CAstopwatch.Elapsed
CATimer.Text = String.Format("{000:00}:{1:00}",
Math.Floor(elapsed.TotalHours),
elapsed.Minutes)
End Sub
Private Sub CAButton_Click(sender As Object, e As EventArgs) Handles CAButton.Click
If CAButton.BackColor = Color.Silver Then
CAButton.BackColor = Color.Red
Timerca.Start()
CAstopwatch.Start()
ElseIf CAButton.BackColor = Color.Red Then
CAButton.BackColor = Color.Silver
Timerca.Stop()
CAstopwatch.Stop()
End If
End Sub
这段代码工作正常,但如果应用程序关闭,我想将信息保存到访问数据库中,以便在需要时恢复。
目前我只是通过按下按钮来测试这个以保存执行以下代码的数据
Private Sub TestButton_Click(sender As Object, e As EventArgs) Handles TestButton.Click
'connects application to database
Dim ConnString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\DataPath\Database.accdb"
Dim SqlString As String = "update SaintStaff set StaffHours = @CAHours, RecordedTime = @Time, RecordedDate = @Date where StaffName = @Staffname "
'updates record in SaintStaff table.
Using conn As New OleDbConnection(ConnString)
conn.Open()
Using cmd As New OleDbCommand(SqlString, conn)
cmd.CommandType = CommandType.Text
cmd.Parameters.Add("@CAHours", OleDbType.VarChar).Value = CATimer.Text
cmd.Parameters.Add("@Time", OleDbType.VarChar).Value = CurrentTime.Text
cmd.Parameters.Add("@Date", OleDbType.VarChar).Value = CurrentDate.Text
cmd.Parameters.Add("@Staffname", OleDbType.VarChar).Value = CAStaff.Text
cmd.ExecuteNonQuery()
End Using
conn.Close()
End Using
End Sub
我可以毫无问题地记录日期和时间,但在尝试记录计时器文本时出现 'Data type mismatch in criteria expression.' 错误。作为测试,我创建了一个新标签并将其设置为 CATimer.Text = Label.Text,因此当计时器更新时它也会更新标签。如果我更改上面的代码以保存 label.text 而不是 CATimer.text 它会起作用。显然它不喜欢记录计时器,但我不知道是什么。有人有什么想法吗?
此外,不是在按下按钮时处理此更新命令,有没有办法让它自动发生,比如每分钟一次?
谢谢
始终将日期和时间存储为 DateTime,而不是文本,并且没有理由拆分此信息。
所以,将 RecordedTime 的数据类型更改为 DateTime,跳过 _RecordedDate,并将两行替换为一行:
cmd.Parameters.Add("@Time", OleDbType.Date).Value = DateTime.Now
事实证明这是一个错误:数据库字段被设置为整数,显然不接受 .text 字段输入。我将字段类型更改为文本并已解决。
我正在创建一个虚拟时钟,以便员工可以跟踪他们整个月的时间。用户将在屏幕上按下一个按钮,该按钮将 start/stop 计时器计时 in/out。此函数的示例代码如下:
Private CAstopwatch As New Stopwatch
Private Sub timerca_tick(sender As Object, e As EventArgs) Handles Timerca.Tick
Dim elapsed As TimeSpan = CAstopwatch.Elapsed
CATimer.Text = String.Format("{000:00}:{1:00}",
Math.Floor(elapsed.TotalHours),
elapsed.Minutes)
End Sub
Private Sub CAButton_Click(sender As Object, e As EventArgs) Handles CAButton.Click
If CAButton.BackColor = Color.Silver Then
CAButton.BackColor = Color.Red
Timerca.Start()
CAstopwatch.Start()
ElseIf CAButton.BackColor = Color.Red Then
CAButton.BackColor = Color.Silver
Timerca.Stop()
CAstopwatch.Stop()
End If
End Sub
这段代码工作正常,但如果应用程序关闭,我想将信息保存到访问数据库中,以便在需要时恢复。
目前我只是通过按下按钮来测试这个以保存执行以下代码的数据
Private Sub TestButton_Click(sender As Object, e As EventArgs) Handles TestButton.Click
'connects application to database
Dim ConnString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\DataPath\Database.accdb"
Dim SqlString As String = "update SaintStaff set StaffHours = @CAHours, RecordedTime = @Time, RecordedDate = @Date where StaffName = @Staffname "
'updates record in SaintStaff table.
Using conn As New OleDbConnection(ConnString)
conn.Open()
Using cmd As New OleDbCommand(SqlString, conn)
cmd.CommandType = CommandType.Text
cmd.Parameters.Add("@CAHours", OleDbType.VarChar).Value = CATimer.Text
cmd.Parameters.Add("@Time", OleDbType.VarChar).Value = CurrentTime.Text
cmd.Parameters.Add("@Date", OleDbType.VarChar).Value = CurrentDate.Text
cmd.Parameters.Add("@Staffname", OleDbType.VarChar).Value = CAStaff.Text
cmd.ExecuteNonQuery()
End Using
conn.Close()
End Using
End Sub
我可以毫无问题地记录日期和时间,但在尝试记录计时器文本时出现 'Data type mismatch in criteria expression.' 错误。作为测试,我创建了一个新标签并将其设置为 CATimer.Text = Label.Text,因此当计时器更新时它也会更新标签。如果我更改上面的代码以保存 label.text 而不是 CATimer.text 它会起作用。显然它不喜欢记录计时器,但我不知道是什么。有人有什么想法吗?
此外,不是在按下按钮时处理此更新命令,有没有办法让它自动发生,比如每分钟一次?
谢谢
始终将日期和时间存储为 DateTime,而不是文本,并且没有理由拆分此信息。
所以,将 RecordedTime 的数据类型更改为 DateTime,跳过 _RecordedDate,并将两行替换为一行:
cmd.Parameters.Add("@Time", OleDbType.Date).Value = DateTime.Now
事实证明这是一个错误:数据库字段被设置为整数,显然不接受 .text 字段输入。我将字段类型更改为文本并已解决。