以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 跨表引用统计 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=61102) |
||||
-- 作者:一笑 -- 发布时间:2014/12/7 10:12:00 -- 跨表引用统计 各位上午好,有如下需求请求帮忙: 说明: 1. 任务书中左座和右座,总时间和经历时间都计入; 2. 如是观察员,只计入总时间,不计入经历时间; 3. 只有是操纵者,才计入起落次数; 例如在第一个任务中: 1. 黄山是左座,且是操纵者,所以人员任务书中左座和操纵者栏打钩,且是操作者,起落次数计入1,总时间和经历时间都计入; 2. 张力是右座,人员任务统计中右座打钩,总时间和经历时间都计入; 3. 苏峰是观察员,人员任务统计中观察员栏打钩,只计入总时间,不计入经历时间; 请教专家,如果通过编码来实现根据“任务书”录入信息自动生成“人员任务统计表”内容,谢谢!
|
||||
-- 作者:有点甜 -- 发布时间:2014/12/7 11:20:00 -- Dim dt As DataTable = DataTables("人员任务统计") dt.DataRows.Clear Dim cs() As String = {"左座", "右座", "操纵者", "观察员1"} For Each dr As DataRow In DataTables("任务书").Select("", "飞行日期") Dim ndr As DataRow For Each c As String In cs If dr.IsNull(c) = False Then If c = "操纵者" Then ndr = dt.Find("姓名 = \'" & dr(c) & "\'", "_Identify desc") Else ndr = dt.AddNew End If ndr("日期") = dr("飞行日期") ndr("机型") = dr("机型") ndr("姓名") = dr(c) ndr(c) = True If c = "操纵者" Then ndr("起落架次") = dt.Compute("sum(起落架次)", "姓名 = \'" & dr(c) & "\'") + dr("起落架次") Else ndr("总时间") = dt.Compute("sum(总时间)", "姓名 = \'" & dr(c) & "\'") + dr("总时间") ndr("经历时间") = dt.Compute("sum(经历时间)", "姓名 = \'" & dr(c) & "\'") + dr("经历时间") End If End If Next Next |
||||
-- 作者:一笑 -- 发布时间:2014/12/7 13:18:00 -- 谢谢甜老师,真给力,一定好好学习。 能否稍微调整一下代码: 1. “如果观察员1,只计入总时间,不计入经历时间;” 2. 另外,我看到代码有“dt.DataRows.Clear“,这是每次执行时,先要清空所有内容吗?如果任务较多,会不会很耗费资源?能否只统计新录入的任务。谢谢指点。
|
||||
-- 作者:有点甜 -- 发布时间:2014/12/7 14:10:00 -- Dim dt As DataTable = DataTables("人员任务统计") dt.DataRows.Clear Dim cs() As String = {"左座", "右座", "操纵者", "观察员1"} For Each dr As DataRow In DataTables("任务书").Select("", "飞行日期") Dim ndr As DataRow For Each c As String In cs If dr.IsNull(c) = False Then If c = "操纵者" Then ndr = dt.Find("姓名 = \'" & dr(c) & "\'", "_Identify desc") Else ndr = dt.AddNew End If ndr("日期") = dr("飞行日期") ndr("机型") = dr("机型") ndr("姓名") = dr(c) ndr(c) = True If c = "操纵者" Then ndr("起落架次") = dt.Compute("sum(起落架次)", "姓名 = \'" & dr(c) & "\'") + dr("起落架次") Else If c = "观察员1" Then ndr("总时间") = dt.Compute("sum(总时间)", "姓名 = \'" & dr(c) & "\'") + dr("总时间") Else ndr("总时间") = dt.Compute("sum(总时间)", "姓名 = \'" & dr(c) & "\'") + dr("总时间") ndr("经历时间") = dt.Compute("sum(经历时间)", "姓名 = \'" & dr(c) & "\'") + dr("经历时间") End If End If Next Next |
||||
-- 作者:有点甜 -- 发布时间:2014/12/7 14:13:00 -- 一次性统计比较好,不然你这种很可能造成重复统计。
或者你可以加入一列,计算列,勾选的话,就计算当前行。 |
||||
-- 作者:一笑 -- 发布时间:2014/12/7 22:31:00 -- 谢谢建议,我会认真采纳。 在大量导入处理时,出现一些问题,列举一些,麻烦看看: 1. 在第2个任务的两人的总时间和经历时间都是04:45,而统计出来黄山、张力的时间都是09:45,多了5小时; 2. 在第3个任务中两人的总时间和经历时间都应该是04:40,而统计出来苏锋的总时间是09:45; 3. 示例中虽未出现,但我测试大量统计中还出现起落架次多次累加。 水平有限,代码不太明白,看到使用了“Compute("sum”,个人感觉“人员任务统计”表中只是引用“任务书”中的时间,不需要进行累加,可能我表述需求不太明白。 谢谢专家!
|
||||
-- 作者:有点甜 -- 发布时间:2014/12/7 22:33:00 -- Dim dt As DataTable = DataTables("人员任务统计") ndr("总时间") = dr("总时间") |
||||
-- 作者:一笑 -- 发布时间:2014/12/7 23:05:00 --
|
||||
-- 作者:有点甜 -- 发布时间:2014/12/7 23:21:00 -- 哦,不用累加
[此贴子已经被作者于2014-12-7 23:21:30编辑过]
|
||||
-- 作者:一笑 -- 发布时间:2015/1/11 15:41:00 -- 谢谢专家代码,学习过程中对以下代码理解有困难,麻烦解释其意思、作用和目的,谢谢 If c = "操纵者" Then ndr = dt.Find("姓名 = \'" & dr(c) & "\'", "_Identify desc") |