Hi Orange,
Here is my complete code for my payroll calculation:
Code:
Sub PayrollCalc()
Dim db As DAO.Database
Dim rstFrom As DAO.Recordset
Dim strSQLFrom As String
Dim rstTo As DAO.Recordset
Dim strSQLTo As String
Dim fld As Field, Counter As Long, i As Integer
ReDim Period(999) As String
Period(101) = "F_Jan"
Period(102) = "F_Feb"
Period(103) = "F_Mar"
Period(104) = "F_Apr"
Period(105) = "F_May"
Period(106) = "F_Jun"
Period(107) = "F_Jul"
Period(108) = "F_Aug"
Period(109) = "F_Sep"
Period(110) = "F_Oct"
Period(111) = "F_Nov"
Period(112) = "F_Dec"
Period(201) = "B_Jan"
Period(202) = "B_Feb"
Period(203) = "B_Mar"
Period(204) = "B_Apr"
Period(205) = "B_May"
Period(206) = "B_Jun"
Period(207) = "B_Jul"
Period(208) = "B_Aug"
Period(209) = "B_Sep"
Period(210) = "B_Oct"
Period(211) = "B_Nov"
Period(212) = "B_Dec"
Set db = CurrentDb
'table is located in BE
strSQLFrom = "SELECT * FROM tblEmployeeList;"
Set rstFrom = db.OpenRecordset(strSQLFrom, dbOpenSnapshot)
'table is located in FE
strSQLTo = "SELECT * FROM tblPayrollCost;"
Set rstTo = db.OpenRecordset(strSQLTo, dbOpenDynaset)
' Move to last record of the table to get the total number of records.
rstFrom.MoveLast
Counter = rstFrom.RecordCount
' Move back to first record.
rstFrom.MoveFirst
For i = 1 To Counter
'Copy the values from tblEmployeeList to tblPayrollCost and calculate for the cost
' calculate for Basic Pay
rstTo.AddNew
For Each fld In rstFrom.Fields
If Left(fld.Name, 2) = "F_" Or Left(fld.Name, 2) = "B_" Then
For Counter = 101 To 212
If fld.Name = Period(Counter) Then
rstTo(fld.Name) = CalculateAmount(1000, rstFrom!JobTitle)
Exit For
End If
Next
Else
rstTo(fld.Name) = rstFrom(fld.Name)
End If
Next
rstTo.Update
' calculate for Overtime
rstTo.AddNew
For Each fld In rstFrom.Fields
If Left(fld.Name, 2) = "F_" Or Left(fld.Name, 2) = "B_" Then
For Counter = 101 To 212
If fld.Name = Period(Counter) Then
rstTo(fld.Name) = CalculateAmount(2000, rstFrom!JobTitle)
Exit For
End If
Next
Else
rstTo(fld.Name) = rstFrom(fld.Name)
End If
Next
rstTo.Update
' calculate for Food Allowance
rstTo.AddNew
For Each fld In rstFrom.Fields
If Left(fld.Name, 2) = "F_" Or Left(fld.Name, 2) = "B_" Then
For Counter = 101 To 212
If fld.Name = Period(Counter) Then
rstTo(fld.Name) = CalculateAmount(3000, rstFrom!JobTitle)
Exit For
End If
Next
Else
rstTo(fld.Name) = rstFrom(fld.Name)
End If
Next
rstTo.Update
' calculate for Car Allowance
rstTo.AddNew
For Each fld In rstFrom.Fields
If Left(fld.Name, 2) = "F_" Or Left(fld.Name, 2) = "B_" Then
For Counter = 101 To 212
If fld.Name = Period(Counter) Then
rstTo(fld.Name) = CalculateAmount(4000, rstFrom!JobTitle)
Exit For
End If
Next
Else
rstTo(fld.Name) = rstFrom(fld.Name)
End If
Next
rstTo.Update
rstFrom.MoveNext
Next i
rstFrom.Close
Set rstFrom = Nothing
rstTo.Close
Set rstTo = Nothing
db.Close
Set db = Nothing
End Sub
Function CalculateAmount(ByVal WageType As Long, ByVal JobTitle As String)
Dim db As DAO.Database, rst As DAO.Recordset, strSQL As String
Set db = CurrentDb
strSQL = "SELECT * FROM tblSalaryCost WHERE " & _
"((WageType=" & WageType & ") OR (JobTitle='" & JobTitle & "');"
Set rst = db.OpenRecordset(strSQL, dbOpenSnapshot)
With rst
If .EOF Then Exit Function
CalculateAmount = !Amount
End With
End Function