使用Access中表单的计算字段更新表

时间:2013-11-05 21:39:53

标签: ms-access

我是Acces的新手,我正在尝试根据工作天数来计算员工的挣工资。 为此我创建了一个表单来输入当前的天数并根据输入计算赚取的工资。现在我想将这个赚取的工资值传递给表字段。 你能帮我吗

2 个答案:

答案 0 :(得分:1)

首先是一些家务;使用您的字段名称,最好不要在其中包含任何空格,使代码更容易(从您的SQL字符串看起来您可能已经完成此操作但只是检查)。另外,避免使用保留字作为字段名称,例如,不要使用Name作为字段名称,有一个Visual Basic保留字here列表,它将涵盖所有VBA和更多一点。

其次,您似乎正在存储计算字段 - EarnedSalary是BasicPay,TotalWorkingDaysInMonth和ActualWorkedDays的计算。通常存储计算字段被认为是禁忌,参考Allen Browne的page on calculated fields。在这个页面上,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

答案 1 :(得分:0)

相当通用,因为你没有提供太多细节,但AfterUpdate中的这类内容应该有效:

假设表格上的控件是:

员工ID的txtEmpID, txtHourlyRate用于乘以数字或小时数, txtHours按工作小时数输入

Dim dblEarnings as Double

dblEarnings = me!txtHourlyRate * me!HoursWorked

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

我可能会记录工作小时数和小时费率并计算工资而不是存储计算出的数字。或者存储小时数和总数,并根据需要计算小时费率。