Foxtable(狐表)用户栏目专家坐堂 → 1.不想自动填入数据;2.累计计算太慢


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

主题:1.不想自动填入数据;2.累计计算太慢

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


加好友 发短信
等级:童狐 帖子:250 积分:1813 威望:0 精华:0 注册:2012/6/28 13:53:00
1.不想自动填入数据;2.累计计算太慢  发帖心情 Post By:2017/11/8 15:29:00 [只看该作者]

1、在统计表中,增加“商丘市虞城县产业集聚区道路工程(马拉松跑道)”新增一个统计日期时,完成明细表自动复制清单内容,问题是:完成明细表的完成数量列第一行会自动填入数据,这是我不希望的,一直找不到原因,老师帮忙看下!

2、完成明细表内累计完成数量列,不能自动计算,重置完成明细ID列,计算过程太慢,有没有更好的方法?

[此贴子已经被作者于2017/11/9 14:18:52编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/8 16:57:00 [只看该作者]

1、

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:成本测算.foxdb

2、重置列单独做一个按钮执行代码

 

For Each r As Row In Tables("统计.完成明细").rows
    r.DataRow.DataTable.DataCols("清单id").RaiseDataColChanged(r.DataRow)
Next


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


加好友 发短信
等级:童狐 帖子:250 积分:1813 威望:0 精华:0 注册:2012/6/28 13:53:00
  发帖心情 Post By:2017/11/9 9:04:00 [只看该作者]

目前数据不多,数据已经很慢,可不可以优化


Select Case e.DataCol.Name
    Case "清单ID", "完成数量"
        Dim drs As List(of DataRow)
        Dim Filter As String
        Filter = "[_SortKey] >= " & e.DataRow("_SortKey") & " And [清单ID] = '" & e.DataRow("清单ID") & "'"
        drs = e.DataTable.Select(Filter)
        For Each dr As DataRow In drs
            Filter = "[_SortKey] <= " & dr("_SortKey") & " And [清单ID] = '" & dr("清单ID") & "'"
            Dim Val1 As Double = e.DataTable.Compute("Sum(完成数量)",Filter)
            dr("累计完成数量") = Val1
        Next
        If e.DataCol.Name = "清单ID" AndAlso e.OldValue IsNot Nothing AndAlso e.OldValue <> e.NewValue Then
            Filter = "[_SortKey] > " & e.DataRow("_SortKey") & " And [清单ID] = '" & e.OldValue & "'"
            drs = e.DataTable.Select(Filter)
            For Each dr As DataRow In drs
                Filter = "[_SortKey] <= " & dr("_SortKey") & " And [清单ID] = '" & dr("清单ID") & "'"
                Dim Val1 As Double = e.DataTable.Compute("Sum(完成数量)",Filter)
                dr("累计完成数量") = Val1
            Next
        End If
End Select
'
非等于比较中说是可以从390秒到2秒,再从2秒到0.9秒,可见代码的优化对于效率的提升是何其重要。但是我做的代码好像不对,没有按清单ID分类累计,请老师看看

Dim drs As List(of DataRow) = DataTables("完成明细").Select("", "清单ID,统计日期") '注意排序参数
drs(0)("累计完成数量") = drs(0)("完成数量") '设置第一行的累计完成数量
For i As Integer = 1 To drs.Count - 1  '从第二行开始逐行计算累计完成数量
    If drs(i)("清单ID") = drs(i - 1)("清单ID") Then
        drs(i)("累计完成数量") = drs(i-1)("累计完成数量") + drs(i)("完成数量")
    Else
        drs(i)("累计完成数量") = drs(i)("完成数量")
    End If
Next

[此贴子已经被作者于2017/11/9 9:10:20编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2017/11/9 9:08:00 [只看该作者]

1、可以这样优化

 

http://www.foxtable.com/webhelp/scr/2136.htm

 

2、流水账本身计算就是很慢的,不要重置列,如果要重新计算,也要在按钮里写代码处理,如

 

For Each r As Row In Tables("统计.完成明细").rows
    r.DataRow.DataTable.DataCols("清单id").RaiseDataColChanged(r.DataRow)
Next


 回到顶部