2013-04-14 84 views
0

我正在製作一個工資系統,使用vb6和ms access作爲數據庫。我就是在毫秒訪問3個表:使用從vb6到msaccess的查詢計算工作總天數

tblemployee, tblattendance, tblpayroll 

我希望得到全體員工的工資爲前四月份,2013年所有這些DATAS將從tblattendance。

Ex。 (某些字段是隱藏的) tblattendance:

 Empid Day Month Year totalhourworkfor1day 
     1  1 april 2013 8 
     2  1 april 2013 5 
     1  2 april 2013 8 
     2  2 april 2013 5 

tblpayroll:

 empid month year Totalhoursworkfor1month 
     1  april 2013 16 
     2  april 2013 10 

查詢四月2013年的一個月後,所有的1名員工的totalhourworkfor1day將相加,結果將保存在到Totalhoursworkfor1month。

如何做到這一點?考慮到從我的VB6,我只需要選擇年份和月份生成工資後它會顯示在列表視圖

嘗試代碼:

insert into tblpayroll(empid,month,year,hourswork) 
select id,month, year, sum(hourswork) from tblattendance where empid=id group by empid; 
+0

是的,我試過代碼,但這些都遠離正確的一個。我沒有發佈我的代碼,因爲我知道這些是非常錯誤的。 –

+0

已經發布我的代碼。我仍然是一個初學者,當談到更深入的sql編碼時,還沒有真正嘗試過。 –

+2

是的我已經知道如何在vb6中運行查詢,只有如何進行查詢,構建和創建查詢。特別是當需要更多的理解和分析查詢時,會有困難。 –

回答

1

這是否幫助? 日期只是一個字段。我已經使用了MinOfWorkDay,以避免在28,29,30,31月結束的複雜情況。但是如果你想要「月末」,這可以解決。無論如何,您都可以將結果格式化爲僅顯示月份/年份。

可以通過HAVING子句默認到剛剛結束的月份或使用從表單輸入的「從」和「到」日期來進一步增強它。

INSERT INTO tblPayroll (Empid, HoursWorked, MonthEnd) 
SELECT tblWork.Empid, Sum(tblWork.WorkHours) AS SumOfWorkHours, Min(tblWork.Workday) AS MinOfWorkday 
FROM tblWork 
GROUP BY tblWork.Empid 
HAVING (((Min(tblWork.Workday)) Between #4/1/2013# And #4/30/2013#)); 

如果您回答更多問題,我很樂意提供更多幫助。 4月15日:我躺在牀上!我以爲你會在MS Access中處理你的數據。我不知道VB6,所以不能再幫忙了。您的整個項目可以在訪問中完成嗎?

+0

這是否也適用,如果我只從我的vb6中選擇月份和年份?如果是這樣,我是否必須將我的「月」轉換爲其相應的月份號?使用您的代碼,我應該從vb6中選擇我能夠運行的代碼 –

+0

您將上述SQL語句保存在MS Access查詢中,那麼你只需從VB6運行查詢,但是VB6/MS Access是過度殺毒的,幾乎所有你在VB6中做的事情你都可以在MS Access中做,所以你爲什麼不把它保留在一個平臺上以保持簡單。 –