2013-04-14 44 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中做,所以你为什么不把它保留在一个平台上以保持简单。 –