-1

我对 Acces 非常陌生,我正在尝试根据工作日数计算员工的工资。为此,我创建了一个表单来输入当前天数并根据输入计算工资。现在我想将这个工资值传递给表格字段。你能帮我么

4

2 回答 2

1

首先是一些家务;使用您的字段名称时,最好不要在其中包含任何空格,这样更容易编码(从您的 SQL 字符串看来,您可能已经这样做了,但只是检查一下)。此外,避免使用保留字作为字段名,例如不要使用 Name 作为字段名,这里有一个 Visual Basic 保留字列表它将涵盖 VBA 的所有内容以及更多内容。

其次,您似乎正在存储一个计算字段 - EarnedSalary 是 BasicPay、TotalWorkingDaysInMonth 和 ActualWorkedDays 的计算。通常存储计算字段被认为是禁忌,请参考 Allen Browne关于计算字段的页面。在此页面上,Allen 提供了一些有关计算字段的提示,这些提示可能会有所帮助,特别是如果您决定确实要存储它并使用 Access 2010(我只在 2007 年......)。

至于您的问题,您仍然没有告诉我您的错误在哪里,因此很难确定问题所在。我的猜测是您在错误的位置调用了更新 Sub - 您想要更新 EarnedSalary 但您在该控件的 AfterUpdate 中调用该过程,因此在您更新代码要更新的字段之前代码不会触发. 代码需要在 ActualWorkedDays 的 AfterUpdate 中。

此外,您似乎正在使用绑定表单,这意味着您不需要使用 SQL 更新,类似于 Allen 示例的解决方案就足够了:

如果您对计算中涉及的每个字段都有控制权,请在表单上:

Private Sub ActualWorkedDays_AfterUpdate()
     Me.EarnedSalary = Me!BasicPay / Me!TotalWorkingDays * Me!ActualWorkedDays
End Sub
于 2013-11-10T23:23:21.643 回答
0

非常通用,因为您没有提供太多详细信息,但是 AfterUpdate 中的类似内容应该可以工作:

假设表单上的控件是:

txtEmpID 表示员工 ID,txtHourlyRate 表示将数字或小时数乘以多少,txtHoursWorked 作为您输入的工作小时数

Dim dblEarnings as Double

dblEarnings = me!txtHourlyRate * me!HoursWorked

CurrentDb.Execute "INSERT INTO [tblYourTable] (EmployeeID, EarnedSalary) VALUES (" _
    & Me!txtEmpID & "," & dblEarnings & ")",dbFailOnError

我可能希望记录工作时间和小时费率并即时计算工资,而不是存储计算出的数字。或存储小时数和总数,并在需要时计算小时费率。

于 2013-11-06T04:17:31.563 回答