Ah I can't believe I've been so dumb! I've figured out the best way to do it is to have a table:
Tbl_shift(Shift_ID, Date_, Time_In, Time_Out, Time_Worked, Employee_ID)
Time worked will be calculated from Time in and out. That way each record will have the time worked for that shift and i can add all them up for each day!
So to add up the total time worked and work out the salary i can do...
Var total_time_worked:TDateTime;
begin
Tbl_Shift.Open;
Tbl_Shift.First;
Repeat
if Date=Desired date then
begin
total_time_worked:=total_time_worked + Tbl_ShiftTime_Worked.value;
Tbl_Shift.Next;
end
else tbl_Shift.Next;
Until Tbl_Shift.Eof;
Balance:=Total_time_worked*Rate_of_pay;
Something like that, probably a million errors in there but i'll find them when i get round to typing it into delphi. the rate of pay etc will come from the employee table i think. Oh and i'll need to stick that inside an if to check the employee ID is the same too.
As for the clock in, I like your idea Ooble. I'll set it to find the newest record for that employee, and if there is something present in the time_out field then clock in, else, clock out!
Ah things seem so much clearer when you try to explain to others what it is you are doing!
Thank you so much DaWei for your ideas and thanks to Ooble! You've helped me before! Thanks!

I owe ya one...don't quite know when you'd ever need my help but ah well! lol.