Foxtable(狐表)用户栏目专家坐堂 → 这样的代码,还能优化吗?


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

主题:这样的代码,还能优化吗?

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


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57634 威望:0 精华:15 注册:2008/9/1 9:45:00
这样的代码,还能优化吗?  发帖心情 Post By:2013/9/17 8:39:00 [显示全部帖子]

'''...
Dim y As Integer = Date.Today.Year
Dim m As Integer = Date.Today.Month
Dim s_date As New Date(y, 1,1)
Dim e_date As New Date(y, 12,31)
Dim Filter As String
Filter = "日期 >= '" & s_date & "' And 日期 <= '" & e_date & "'"

Dim cmd As New SQLCommand
Dim dt As DataTable
cmd.C
cmd.CommandText = "SELECT DISTINCT  [_Identify],日期,部门,报表名称,项目,数据统计项目,统计类型,数值,统计部门,年,月,管组民警,组别,款号,品名,模具规格,工件名称,工件规格,区分 from{十监区管理} Where " & Filter & "And (组别 ='大件组' Or 组别='小件组')"
dt = cmd.ExecuteReader()

Dim dtb As New DataTableBuilder("统计")
dtb.AddDef("部门", Gettype(String), 50)
dtb.AddDef("组别", Gettype(String), 50)
dtb.AddDef("管组民警", Gettype(String), 50)
dtb.AddDef("项目", Gettype(String), 50)
dtb.AddDef("一月", Gettype(Double))
dtb.AddDef("二月", Gettype(Double))
dtb.AddDef("三月", Gettype(Double))
dtb.AddDef("四月", Gettype(Double))
dtb.AddDef("五月", Gettype(Double))
dtb.AddDef("六月", Gettype(Double))
dtb.AddDef("七月", Gettype(Double))
dtb.AddDef("八月", Gettype(Double))
dtb.AddDef("九月", Gettype(Double))
dtb.AddDef("十月", Gettype(Double))
dtb.AddDef("十一月", Gettype(Double))
dtb.AddDef("十二月", Gettype(Double))

Tables(e.Form.Name & "_Table1").DataSource = dtb.BuildDataSource

Dim i As Integer
For Each v As String() In dt.GetUniqueValues("","部门","组别","管组民警")
    Dim s() As String ={"额定工时","实际工时","产量(吨)"}
    For i = 0 To s.Length -1
        Dim dr1 As DataRow = Tables(e.form.Name & "_Table1").DataTable.AddNew()
        dr1("部门") = v(0)
        dr1("组别") = v(1)
        dr1("管组民警") = v(2)
        dr1("项目") = s(i)
    Next
Next


Dim Arys As List(Of String())
Dim Ar As DataRow
Dim dt1 As Date
Dim dt2 As Date
Dim Filter1 As String
Dim Val,Val1,Val2,Val3 As Double
Arys = dt.GetUniqueValues("","部门","组别","管组民警","数据统计项目")
For Each Ary As String() In Arys
    Filter = "[部门] = '" & Ary(0) & "' And 组别='" & Ary(1) & "'And 管组民警='" & Ary(2) & "' And 项目='" & Ary(3) & "'"
    If Filter > "" Then
        Ar = DataTables(e.form.Name & "_Table1").Find(Filter)
        If Ar IsNot Nothing Then
            Dim Vals() As String = {"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"}
            For index As Integer = 0 To Vals.Length - 1
                dt1 = New Date(y, index+1, 1)
                dt2 = New Date(y, index+1, Date.DaysInMonth(y,index+1)) '获取该月的最后一天
                Filter1 = "日期>='" & dt1 & "'And 日期<='" & dt2 & "' And [部门] = '" & Ary(0) & "' And 组别='" & Ary(1) & "'And 管组民警='" & Ary(2) & "' And 数据统计项目='" & Ary(3) & "' And 区分 ='生产数据录入'"
                Val= dt.Compute("Sum(数值)",Filter1)
                If Val > 0 Then
                    Ar(Vals(index)) = Val
                Else
                    Ar(Vals(index)) = 0
                End If
            Next
        End If
    End If
Next

Tables(e.form.Name & "_Table1").Datatable.Datacols.Add("累计",GetType(Double),"[一月]+[二月]+[三月]+[四月]+[五月]+[六月]+[七月]+[八月]+[九月]+[十月]+[十一月]+[十二月]")
Tables(e.form.Name & "_Table1").AutoSizeCols


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


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57634 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2013/9/17 9:19:00 [显示全部帖子]

啊 没人上班?

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


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57634 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2013/9/17 9:27:00 [显示全部帖子]

   bin 你的意思是小改动可以有质的飞跃,还是?    我知道是没法测试. 我只是说针对这个代码,如果能优化,你改一下 我来测试下,人后给你结果.

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


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57634 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2013/9/17 9:39:00 [显示全部帖子]

    哦,那我明白了.因为万一有人觉得速度慢,我首先考虑是不是我的代码出问题了,如果不是,那我就可以明确告诉客人不是代码的问题,有可能是数据量的问题.

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


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57634 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2013/9/17 9:49:00 [显示全部帖子]

bin  我的意思就是,想这个代码,如果在速度上有提升的话,代码怎么写  你能否写一个我参考下!  

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


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57634 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2013/9/17 10:01:00 [显示全部帖子]

哦 那好吧

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


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57634 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2013/9/17 11:41:00 [显示全部帖子]

什么意思,你说我的代码有严重问题?

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


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57634 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2013/9/17 17:29:00 [显示全部帖子]

以下是引用yan2006l在2013-9-17 12:01:00的发言:

有,虽然你的代码能算出结果,但是思路决定了效率。这个思路不行啊,会很卡的



  写一个我参考下.


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


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57634 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2013/9/17 17:30:00 [显示全部帖子]

以下是引用程兴刚在2013-9-17 15:35:00的发言:
结合全局表事件,不必要写这么多代码,有些判断是多余,尤其是遍历行的循环中,多余的判断一样会导至执行效率低!

  老大 你 说说 那一句代码 我多余 我 看下.


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


加好友 发短信 一级勋章
等级:狐仙 帖子:9879 积分:57634 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2013/9/17 17:31:00 [显示全部帖子]

  请大家给我个效率高一点的代码 我学习下,我多少觉得 有点卡.

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