保存秒表以访问数据库vb.net



我正在创建一个虚拟时钟,这样员工就可以在一个月内跟踪他们的工作时间。用户将按下屏幕上的一个按钮,该按钮将在他们打卡时启动/停止计时器。此功能的示例代码如下:

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:DataPathDatabase.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

我可以毫无问题地记录日期和时间,但我得到了"条件表达式中的数据类型不匹配"尝试录制计时器文本时出错。作为一个测试,我创建了一个新标签,并将其设置为CATimer.Text=label.Text,因此当计时器更新时,它也会更新标签。如果我更改上面的代码以保存label.text而不是CATimer.text,它就可以工作了。很明显,它不喜欢录制计时器,但我不知道是什么。有人有什么想法吗?

此外,有没有一种方法可以让这种情况自动发生,比如说每分钟一次,而不是通过按下按钮来处理这个更新命令?

谢谢

始终将日期和时间存储为DateTime,而不是文本,并且没有理由拆分此信息。

因此,将RecordedTime的数据类型更改为DateTime

cmd.Parameters.Add("@Time", OleDbType.Date).Value = DateTime.Now

原来这是一个错误:数据库字段被设置为整数,显然不接受.text字段输入。我将字段类型更改为文本,它得到了解决。

最新更新