Foxtable(狐表)用户栏目专家坐堂 → [求助]优化代码速度


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

主题:[求助]优化代码速度

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


加好友 发短信
等级:三尾狐 帖子:658 积分:7902 威望:0 精华:0 注册:2013/12/11 17:49:00
[求助]优化代码速度  发帖心情 Post By:2014/11/4 14:11:00 [显示全部帖子]

以下代码能正常执行,但就是速度太慢,如果有200条数据的话要执行好几分钟,请教老师,帮我优化一下      

  For Each dr As DataRow In DataTables("表D").Datarows   
            For Each dc As DataCol In DataTables("表D").DataCols
                Dim gx As String
                gx=dc.name
                
                If gx <>"姓名" And gx <>"单据编号" And gx <> "员工编号" And  gx <> "生产任务单号" Then
                    If dr(gx) > 0 And dr("姓名") <> "可申报最大数量" Then
                        dr(gx) = math.Floor( dr(gx) * 10000) / 10000 '取小数位前四位
                        Dim dr1 As DataRow = DataTables("工资明细表").Addnew
                        dr1("生产任务单号") = scrwdh.Value
                        dr1("单据编号") = dr("单据编号")
                        dr1("员工编号") = dr("员工编号")
                        dr1("工序名称") = gx
                        dr1("数量") = dr(gx)
                        dr1("销售订单号") = xsddh.Value
                        dr1("产品名称") = cpmc.Value
                        dr1("工资日期") = gzrq.Value
                        dr1("单据类型") = djlx.Value
                        dr1("工资所属车间") = cjmc.Value
                        dr1("制单时间") = zdsj.Value 
                    End If
                End If
            Next
        Next


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


加好友 发短信
等级:三尾狐 帖子:658 积分:7902 威望:0 精华:0 注册:2013/12/11 17:49:00
  发帖心情 Post By:2014/11/4 14:55:00 [显示全部帖子]

将一张表的内容写到另一张表,表D的列名, 写到了工资明细表 工序名称字段 ,数量也就写到数量字段 

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


加好友 发短信
等级:三尾狐 帖子:658 积分:7902 威望:0 精华:0 注册:2013/12/11 17:49:00
  发帖心情 Post By:2014/11/4 15:24:00 [显示全部帖子]





图片点击可在新窗口打开查看

上图为表D
下图为工资明细表


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


[此贴子已经被作者于2014-11-5 8:08:34编辑过]

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


加好友 发短信
等级:三尾狐 帖子:658 积分:7902 威望:0 精华:0 注册:2013/12/11 17:49:00
  发帖心情 Post By:2014/11/4 15:29:00 [显示全部帖子]

我是指插入后总数据有240多条吧,需要3分钟左右

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


加好友 发短信
等级:三尾狐 帖子:658 积分:7902 威望:0 精华:0 注册:2013/12/11 17:49:00
  发帖心情 Post By:2014/11/4 15:55:00 [显示全部帖子]

 For Each dr As DataRow In DataTables("表D").Datarows
            
            For Each dc As DataCol In DataTables("表D").DataCols
                Dim gx As String
                gx=dc.name
                
                If gx <>"姓名" And gx <>"单据编号" And gx <> "员工编号" And  gx <> "生产任务单号" Then
                    If dr(gx) > 0 And dr("姓名") <> "可申报最大数量" Then
                        dr(gx) = math.Floor( dr(gx) * 10000) / 10000 '取小数位前四位
                        'Dim dr1 As DataRow = DataTables("工资明细表").Addnew
                        'dr1("生产任务单号") = scrwdh.Value
                        'dr1("单据编号") = dr("单据编号")
                        'dr1("员工编号") = dr("员工编号")
                        'dr1("工序名称") = gx
                        'dr1("数量") = dr(gx)
                        'dr1("销售订单号") = xsddh.Value
                        'dr1("产品名称") = cpmc.Value
                        'dr1("工资日期") = gzrq.Value
                        'dr1("单据类型") = djlx.Value
                        'dr1("工资所属车间") = cjmc.Value
                        'dr1("制单时间") = zdsj.Value
                        Dim cmd9 As New SQLCommand
                        Dim dt9 As DataTable
                        cmd9.C
                        cmd9.CommandText = "INSERT INTO 工资明细表(生产任务单号,单据编号,员工编号,工序名称,数量,销售订单号 ,产品名称,工资日期,单据类型,工资所属车间,制单时间) VALUES( '" & scrwdh.Value & "' ,'" & dr("单据编号") & "' ,'" & dr("员工编号") & "' ,'" & gx & "' ,'" & dr(gx) & "' ,'" & xsddh.Value & "', '" & cpmc.Value & "' ,'" & gzrq.Value & "' ,'" & djlx.Value & "' ,'" & cjmc.Value & "' ,'" & zdsj.Value & "'   )"
                        
                        dt9 = cmd9.ExecuteReader()
                        '
                    End If
                End If
            Next
        Next
我把蓝色的代码替换成红色的代码后执行速度非常的快,但是,[_Locked]
      ,[_SortKey] 这两个字段在数据库里的值就为NULL.这有什么影响吗?

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


加好友 发短信
等级:三尾狐 帖子:658 积分:7902 威望:0 精华:0 注册:2013/12/11 17:49:00
  发帖心情 Post By:2014/11/4 16:15:00 [显示全部帖子]

有点甜老师,我试过你刚才的代码了,速度也很快,我现在找到执行慢的原因了,是datacolchanged 事件中的代码影响的执行速度了
请问一下这段代码要如何优化一下
If e.DataCol.Name = "员工编号"  Then
    Dim dr As DataRow
    Dim Filter As String
    Filter = "[员工编号] = '" & e.DataRow("员工编号") & "' "


'生成数据表
Dim cmd As New SQLCommand
Dim dt As DataTable
cmd.C
cmd.CommandText = "Declare @kk As VARCHAR(10) set @kk='k'+substring(convert(varchar(10),getdate(),112),3,4)+'bm' exec('select a.name as 姓名 ,a.gh as 工号 ,a.id as 员工编号,b.bm_name as 部门名称,a.outdate as 离职日期 ,a.lanpd as lanpd from krs a left join '+@kk+ ' b  on a.bm_no=b.bm_no ' )"
dt = cmd.ExecuteReader()
'生成目录树

    dr = dt.Find(Filter)
    If dr IsNot Nothing Then
        e.DataRow("姓名") = dr("姓名")
        e.DataRow("工号") = dr("工号")
        e.DataRow("车间名称") = dr("部门名称")
    Else
        e.DataRow("姓名") = Nothing
        e.DataRow("工号") = Nothing
        e.DataRow("车间名称") = Nothing
    End If
End If


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


加好友 发短信
等级:三尾狐 帖子:658 积分:7902 威望:0 精华:0 注册:2013/12/11 17:49:00
  发帖心情 Post By:2014/11/4 17:29:00 [显示全部帖子]

谢谢甜老师,是这个地方出了问题

 回到顶部