Foxtable(狐表)用户栏目专家坐堂 → 如何实现多表导入数据计算


  共有2692人关注过本帖树形打印复制链接

主题:如何实现多表导入数据计算

帅哥哟,离线,有人找我吗?
lgz518
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1252 积分:8468 威望:0 精华:0 注册:2019/6/13 9:57:00
如何实现多表导入数据计算  发帖心情 Post By: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 = {"品名","型号","规格","单价"}
    If
e.NewValue Is Nothing Then

        For
Each nm As String In nms

            e
.DataRow(nm) = Nothing

        Next

    Else

        Dim
dr As DataRow

        dr
= DataTables("产品").Find("[产品编号] = '" & e.NewValue &
"'")
        If
dr IsNot Nothing
            For Each
nm As String In nms
               
e.DataRow(nm) = dr(nm)
            Next
        End If
    End If
End If

这样不管有多少列,我们都只需修改下面这样代码,增加和删除列名即可:

Dim nms() As String = {"品名","型号","规格","单价"}

这种编码方式在处理大量重复任务的时候很实用,应该仔细体会掌握。


不知道如何实现,请老师指教,谢谢!




 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110334 积分:561518 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1252 积分:8468 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2019/8/19 17:16:00 [只看该作者]

老师,把您的代码放在DataColChanged的事件操作没有报错,也没数据。如果要放在窗口上如何操作?谢谢


 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110334 积分:561518 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/8/19 17:20:00 [只看该作者]

旧数据要重置一下列。

改到按钮使用把e.DataRow改为使用当前行,如tables(某某表).current这种

 回到顶部
帅哥哟,离线,有人找我吗?
lgz518
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1252 积分:8468 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2019/8/19 19:54:00 [只看该作者]

老师,1.重置一下列,也没有反映;2.按钮Dim r As Row = Tables("员工工资表").current,报错,希望用按键操作且是批量操作(带FOR NEXT);3.比较好的做法是到数据库建一个查询或者视图,把这些需要查询的表的数据合并到一个查询表中,然后只需要查一个表即可,"员工工资表"是类似各表的查询表,不知道操作,这个方面的实例?谢谢



 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110334 积分:561518 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/8/19 20:34:00 [只看该作者]

1/2、上传具体实例说明


 回到顶部
帅哥哟,离线,有人找我吗?
lgz518
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1252 积分:8468 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2019/8/20 10:38:00 [只看该作者]

 老师,上传实例,请指导,谢谢
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:多表.table



 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110334 积分:561518 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/8/20 11:11:00 [只看该作者]

2楼的带要学会改为合适的表名和列名啊,如果看不懂,也不会改代码,先学好基础:http://www.foxtable.com/webhelp/topics/1592.htm

员工月工资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

窗口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
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1252 积分:8468 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By:2019/8/20 11:53:00 [只看该作者]

 老师,下面代码还是没执行,我检查几次,不知问题在哪里,请指导,谢谢

 回到顶部
帅哥哟,离线,有人找我吗?
lgz518
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1252 积分:8468 威望:0 精华:0 注册:2019/6/13 9:57:00
  发帖心情 Post By: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

 回到顶部
总数 12 1 2 下一页