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


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

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

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


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


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


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2014/11/4 15:34:00 [只看该作者]

以下是引用lshshlxsh在2014-11-4 15:29:00的发言:
我是指插入后总数据有240多条吧,需要3分钟左右

3分钟,打个瞌睡,绰绰有余。图片点击可在新窗口打开查看


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


加好友 发短信
等级:三尾狐 帖子:653 积分:7667 威望: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.这有什么影响吗?

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


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

没有影响,不过影响排序

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


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

SystemReady = False
DataTables("工资明细表").StopRedraw
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
DataTables("工资明细表").ResumeRedraw
SystemReady = True

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


加好友 发短信
等级:小狐 帖子:392 积分:3026 威望:0 精华:0 注册:2014/9/20 23:56:00
  发帖心情 Post By:2014/11/4 16:09:00 [只看该作者]

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=52855&replyID=&skin=1

 

看这个帖子 用insert 多行一次插入那个

 

我昨晚也测试了一下 500条数据互联网保存到sql数据库 用狐表自己的save 大概3分钟,逐行插入40-42秒,多行一次插入16-20秒


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


加好友 发短信
等级:三尾狐 帖子:653 积分:7667 威望: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


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


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

 不知道你的意图。

 

 你的dt是不是不应该每次都生成,生成一次行不行。


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


加好友 发短信
等级:三尾狐 帖子:653 积分:7667 威望:0 精华:0 注册:2013/12/11 17:49:00
  发帖心情 Post By:2014/11/4 17:29:00 [只看该作者]

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

 回到顶部
总数 19 上一页 1 2