以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 如何实现多表导入数据计算 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=139690) |
||||
-- 作者:lgz518 -- 发布时间:2019/8/19 15:15:00 -- 如何实现多表导入数据计算 如何实现多表导入数据计算 1.“员工工资表”有“年月,员工编号,姓名,应出勤天数,实际出勤,计时工资, ,计件工资,附加工资”字段; 2.“员工工资表”中的“年月,员工编号,姓名"字段与“考勤表”“员工附加表” “员工计时工资表”的字段相同; 3. “员工工资表”计算工资,须从“考勤表”引入考勤记录,从“员工附加表”引入员工附加金额,从“员工计件表”引入计件工资,从“员工 计时工资表”引入计时工资,后才能计算; 4.实际出勤,是考勤表用表达式计算出来的值,附加工资,是员工附加表用表达式 计算出来的的值。 1.1考勤表 年月, 员工编号,姓名,应出勤天数,实际出勤 201907 A01 张三 22 21 201907 A02 李四 22 21 1.2员工附加表 年月, 员工编号,姓名,总附加金额 201907 A01 张三 22 0 201907 A02 李四 52 0 1.3计时工资 年月, 员工编号,姓名,总计时工资 201907 A01 张三 22 0 2 201907 A02 李四 52 0 2 1.4计件工资 年月, 员工编号,姓名,总计件工资 201907 A01 张三 12 0 2 201907 A02 李四 22 0 2 要计算 1.5员工工资表 年月,员工编号,姓名,应出勤天数,实际出勤,计时工资,计件工资,附加工资 合计 注,如果无出勤员工的记录,其附加工资等相关记录为“0”,不导入或不显示。 注,用跨表引用实现不了 如果有十几列甚至更多列的数据需要继承,上面代码可能会显得过于繁琐,为此我们可以考虑将代码改写为: If
e.DataCol.Name
= "产品编号"
Then 这样不管有多少列,我们都只需修改下面这样代码,增加和删除列名即可: Dim nms() As String = {"品名","型号","规格","单价"} 这种编码方式在处理大量重复任务的时候很实用,应该仔细体会掌握。 不知道如何实现,请老师指教,谢谢! |
||||
-- 作者:有点蓝 -- 发布时间:2019/8/19 16:30:00 -- 需要逐个表查询,如: If e.DataCol.Name = "员工编号" Then Dim dr As DataRow = DataTables("考勤表").Find("[员工编号] = \'" & e.NewValue & "\'") If dr IsNot Nothing e.DataRow("应出勤天数") = dr("应出勤天数") End If dr = DataTables("员工附加表").Find("[员工编号] = \'" & e.NewValue & "\'") If dr IsNot Nothing e.DataRow("总附加金额") = dr("总附加金额") End If End If 比较好的做法是到数据库建一个查询或者视图,把这些需要查询的表的数据合并到一个查询表中,然后只需要查一个表即可 |
||||
-- 作者:lgz518 -- 发布时间:2019/8/19 17:16:00 -- 老师,把您的代码放在DataColChanged的事件操作没有报错,也没数据。如果要放在窗口上如何操作?谢谢 |
||||
-- 作者:有点蓝 -- 发布时间:2019/8/19 17:20:00 -- 旧数据要重置一下列。 改到按钮使用把e.DataRow改为使用当前行,如tables(某某表).current这种 |
||||
-- 作者:lgz518 -- 发布时间:2019/8/19 19:54:00 -- 老师,1.重置一下列,也没有反映;2.按钮Dim r As Row = Tables("员工工资表").current,报错,希望用按键操作且是批量操作(带FOR NEXT);3.比较好的做法是到数据库建一个查询或者视图,把这些需要查询的表的数据合并到一个查询表中,然后只需要查一个表即可,"员工工资表"是类似各表的查询表,不知道操作,这个方面的实例?谢谢 |
||||
-- 作者:有点蓝 -- 发布时间:2019/8/19 20:34:00 -- 1/2、上传具体实例说明 |
||||
-- 作者:lgz518 -- 发布时间:2019/8/20 10:38:00 -- 老师,上传实例,请指导,谢谢
|
||||
-- 作者:有点蓝 -- 发布时间:2019/8/20 11:11:00 -- 2楼的带要学会改为合适的表名和列名啊,如果看不懂,也不会改代码,先学好基础:http://www.foxtable.com/webhelp/topics/1592.htm If e.DataCol.Name = "员工编号" Then Dim dr As DataRow = DataTables("考勤").Find("[员工编号] = \'" & e.NewValue & "\'") If dr IsNot Nothing e.DataRow("实际出勤天数") = dr("实际出勤天数") End If dr = DataTables("计件工资").Find("[员工编号] = \'" & e.NewValue & "\'") If dr IsNot Nothing e.DataRow("计件工资") = dr("计件工资") End If End If 窗口1 按钮 For Each bh As String In DataTables("员工工资").GetValues("员工编号") Dim r As Row = Tables("员工月工资").AddNew r("员工编号") = bh Next [此贴子已经被作者于2019/8/20 11:11:40编辑过]
|
||||
-- 作者:lgz518 -- 发布时间:2019/8/20 11:53:00 -- 老师,下面代码还是没执行,我检查几次,不知问题在哪里,请指导,谢谢 |
||||
-- 作者:lgz518 -- 发布时间:2019/8/20 11:54:00 -- 老师,下面代码还是没执行,我检查几次,不知问题在哪里,请指导,谢谢 员工月工资datacolchanged事件
If e.DataCol.Name = "员工编号" Then Dim dr As DataRow = DataTables("考勤").Find("[员工编号] = \'" & e.NewValue & "\'") If dr IsNot Nothing e.DataRow("实际出勤天数") = dr("实际出勤天数") End If dr = DataTables("计件工资").Find("[员工编号] = \'" & e.NewValue & "\'") If dr IsNot Nothing e.DataRow("计件工资") = dr("计件工资") End If End If
|