Foxtable(狐表)用户栏目专家坐堂 → 请大神指教 计算优化


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

主题:请大神指教 计算优化

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


加好友 发短信
等级:幼狐 帖子:148 积分:2075 威望:0 精华:0 注册:2013/3/3 12:34:00
请大神指教 计算优化  发帖心情 Post By:2017/11/19 20:16:00 [只看该作者]

算总数  几十秒钟,   算每一个物料 在一个时间点 之前的数据  怎么要那么长时间? 请大神指教




图片点击可在新窗口打开查看此主题相关图片如下:2.jpg
图片点击可在新窗口打开查看

[此贴子已经被作者于2017/11/19 21:46:40编辑过]

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


加好友 发短信
等级:幼狐 帖子:148 积分:2075 威望:0 精华:0 注册:2013/3/3 12:34:00
  发帖心情 Post By:2017/11/19 20:20:00 [只看该作者]

附件是模型
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:测试.rar


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


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

参考代码

 

MainTable = Tables("统计")

Dim wlbm As String = "17475000011232"

e.Form.Controls("Label1").Text = "正在处理数据..."
Application.DoEvents()

Dim drs = DataTables("sum").Select("物料编码='" & wlbm & "' and 日期时间 <= #" & Date.Today.AddDays(3) & "# and 日期时间 > #" & Date.Today & "#  ", "日期时间")
Dim p As WinForm.ProgressBar
p = e.Form.Controls("ProgressBar1")
p.Maximum = drs.Count  '设置最大值
p.Minimum = 0 '设置最小值
p.Value = 0 '设置当前值

DataTables("统计").ResumeRedraw
DataTables("统计").StopRedraw
Dim st As Date = Date.Now '将开始时间保存在变量st中
Dim sum = DataTables("sum").compute("sum(需求数量)", "物料编码='" & wlbm & "' and 日期时间 <= #" & Date.Today & "#")
For Each dr As DataRow In drs
    Dim dr1 As DataRow = DataTables("统计").AddNew()
   
    dr1("物料编码") = dr("物料编码")
    dr1("日期时间") = dr("日期时间")
    Dim temp As Double = sum
    For Each dr2 As DataRow In drs
        If dr2("日期时间") <= dr1("日期时间") Then
            temp += dr2("需求数量")
        Else
            Exit For
        End If
    Next
    dr1("在此之前的需求数量") = temp
   
    p.Value += 1 '当前值为已经完成的行数
Next

DataTables("统计").ResumeRedraw


If DataTables("统计").HasChanges Then
    'DataTables("统计").save
End If

e.Form.Controls("Label1").Text = " 更新完毕."

MessageBox.Show("耗时: " & (Date.Now - st).TotalSeconds & "秒") '计算并显示执行代码所花费的秒数


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


加好友 发短信
等级:幼狐 帖子:148 积分:2075 威望:0 精华:0 注册:2013/3/3 12:34:00
  发帖心情 Post By:2017/11/19 21:23:00 [只看该作者]

22
[此贴子已经被作者于2017/11/19 22:14:30编辑过]

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


加好友 发短信
等级:幼狐 帖子:148 积分:2075 威望:0 精华:0 注册:2013/3/3 12:34:00
  发帖心情 Post By:2017/11/19 21:28:00 [只看该作者]

12
[此贴子已经被作者于2017/11/19 21:32:18编辑过]

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


加好友 发短信
等级:幼狐 帖子:148 积分:2075 威望:0 精华:0 注册:2013/3/3 12:34:00
  发帖心情 Post By:2017/11/19 21:33:00 [只看该作者]

11
[此贴子已经被作者于2017/11/19 22:14:16编辑过]

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


加好友 发短信
等级:幼狐 帖子:148 积分:2075 威望:0 精华:0 注册:2013/3/3 12:34:00
  发帖心情 Post By:2017/11/19 22:27:00 [只看该作者]

领悟了 老哥的意思, 谢谢~~

Dim drs = DataTables("sum").Select(" 日期时间 <= #" & Date.Today.AddDays(3) & "# and 日期时间 > #" & Date.Today & "#  ")
 
For Each dr As DataRow In drs '统计未来两天的数据
    Dim dr1 As DataRow = DataTables("统计").AddNew()
    
    dr1("物料编码") = dr("物料编码")
    dr1("日期时间") = dr("日期时间")
    Dim temp As Single = 0
     For Each dr2 As DataRow In DataTables("sum").Select(" 物料编码= '" & dr("物料编码") & "' ")
           If dr2("日期时间") <= dr1("日期时间") Then
            temp += dr2("需求数量")
           Else
            Exit For
           End If
     Next
   dr1("在此之前的需求数量") = temp


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


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

回复7楼,你select的时候,要排序

 

For Each dr2 As DataRow In DataTables("sum").Select(" 物料编码= '" & dr("物料编码") & "'", "日期时间")


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


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

MainTable = Tables("统计")


e.Form.Controls("Label1").Text = "正在处理数据..."
Application.DoEvents()

Dim drs = DataTables("sum").Select("日期时间 <= #" & Date.Today.AddDays(1) & "# and 日期时间 > #" & Date.Today & "#  ", "物料编码,日期时间")
Dim p As WinForm.ProgressBar
p = e.Form.Controls("ProgressBar1")
p.Maximum = drs.Count  '设置最大值
p.Minimum = 0 '设置最小值
p.Value = 0 '设置当前值

DataTables("统计").ResumeRedraw
DataTables("统计").StopRedraw
Dim st As Date = Date.Now '将开始时间保存在变量st中
Dim pdr As DataRow = Nothing
Dim sum As Double = 0

For Each dr As DataRow In drs
    Dim dr1 As DataRow = DataTables("统计").AddNew()
   
    dr1("物料编码") = dr("物料编码")
    dr1("日期时间") = dr("日期时间")
   
    If pdr Is Nothing OrElse dr1("物料编码") <> pdr("物料编码") Then
        sum = 0
        For Each dr2 As DataRow In DataTables("sum").Select(" 物料编码= '" & dr("物料编码") & "' ","日期时间")
            If dr2("日期时间") <= dr1("日期时间") Then
                sum += dr2("需求数量")
            Else
                Exit For
            End If
        Next
    Else
        sum = pdr("在此之前的需求数量") + dr("需求数量")
    End If
    dr1("在此之前的需求数量") = sum
    pdr = dr1
    p.Value += 1 '当前值为已经完成的行数
    e.Form.Controls("Label1").Text = "..." & p.Value
    Application.DoEvents()
Next

DataTables("统计").ResumeRedraw


If DataTables("统计").HasChanges Then
    'DataTables("统计").save
End If

e.Form.Controls("Label1").Text = " 更新完毕."

MessageBox.Show("耗时: " & (Date.Now - st).TotalSeconds & "秒") '计算并显示执行代码所花费的秒数


 回到顶部