Foxtable(狐表)用户栏目专家坐堂 → 代码优化


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

主题:代码优化

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


加好友 发短信
等级:三尾狐 帖子:693 积分:5206 威望:0 精华:0 注册:2011/3/15 12:34:00
代码优化  发帖心情 Post By:2014/5/16 21:01:00 [只看该作者]

以下代码可以正常执行,但有二个问题,1、执行速度很慢,300条成绩在二表之间转入需要2分钟才能执行完成;2、在 2分钟的等待过程中屏幕给人以假死现象。请老师将 以下代码给以优化,提高执行速度。

For Each r As Row In Tables("成绩管理").Rows
    Dim dr As DataRow = DataTables("成绩导入").Find("注册学号 = '" & r("注册学号") & "' And 姓名 = '" & r("姓名") & "'")
    If dr IsNot Nothing Then
        For Each s As String In "成绩".Split("|")
            r(s) = dr(s)
        Next
    End If
Next

 回到顶部
帅哥,在线噢!
y2287958
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:4761 积分:34613 威望:0 精华:0 注册:2008/8/31 22:44:00
  发帖心情 Post By:2014/5/16 21:07:00 [只看该作者]

上例子。

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


加好友 发短信 一级勋章
等级:超级版主 帖子:7258 积分:40773 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2014/5/16 23:19:00 [只看该作者]

Dim dr As DataRow
For Each r As Row In Tables("成绩管理").Rows
     dr = DataTables("成绩导入").Find("注册学号 = '" & r("注册学号")  & "'")
    If dr IsNot Nothing Then
          r("成绩") = dr(“成绩”)
    End If
Next

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


加好友 发短信 一级勋章
等级:超级版主 帖子:7258 积分:40773 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2014/5/16 23:20:00 [只看该作者]

用其它办法会更快,但需要示例文件!

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


加好友 发短信
等级:版主 帖子:1693 积分:12135 威望:0 精华:7 注册:2013/7/11 10:52:00
  发帖心情 Post By:2014/5/17 8:43:00 [只看该作者]

看看狐爸的帮助,  http://www.foxtable.com/help/topics/2225.htm

 

试试把查询和赋值分开,是否有用。


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


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

下面的代码,有三个循环,虽然只有300条记录,但循环的排列组合,就惊人了。
For Each r As Row In Tables("成绩管理").Rows '1
    Dim dr As DataRow = DataTables("成绩导入").Find("注册学号 = '" & r("注册学号") & "' And 姓名 = '" & r("姓名") & "'") '2
    If dr IsNot Nothing Then
        For Each s As String In "成绩".Split("|") '3
            r(s) = dr(s)
        Next
    End If
Next
 
把例子传上来,让大家试试,有没有变通的方法,提高效率。

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


加好友 发短信
等级:三尾狐 帖子:693 积分:5206 威望:0 精华:0 注册:2011/3/15 12:34:00
  发帖心情 Post By:2014/5/18 12:16:00 [只看该作者]

我现在把例子上传,由于商业版有点问题,所以上传了专业版,请各位老师指导!
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:成绩导入.rar



图片点击可在新窗口打开查看此主题相关图片如下:要实现的效果.jpg
图片点击可在新窗口打开查看



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


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

 datacolchanged事件影响的。

 

SystemReady = False
For Each r As Row In Tables("成绩管理").Rows
    Dim dr As DataRow = DataTables("成绩导入").Find("注册学号 = '" & r("注册学号") & "' And 姓名 = '" & r("姓名") & "'")
    If dr IsNot Nothing Then
        For Each s As String In "成绩".Split("|")
            r(s) = dr(s)
        Next
    End If
Next
SystemReady = True

 


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


加好友 发短信
等级:三尾狐 帖子:693 积分:5206 威望:0 精华:0 注册:2011/3/15 12:34:00
  发帖心情 Post By:2014/5/18 19:49:00 [只看该作者]

甜老师,我希望取消datacolchanged事件的以下代码,改用‘按钮’代码来实现以下功能。也就是等到毕业生的所有课程的成绩都录入以后,把毕业生筛选出来,再使用‘按钮’代码来实现"毕业成绩" = "成绩不合格" 和 "毕业成绩" = "成绩合格" 的判断,这样更科学些,请问‘按钮’代码如何写?

Select Case e.DataCol.Name
    Case "注册学号","成绩","补考","补考2","补考3"
        Dim drs1,drs2 As List(of DataRow)
        drs1 = e.DataTable.Select("注册学号 = '" & e.DataRow("注册学号") & "' And Substring([注册年级],1,4) = '" & Date.Today.Year - 3 & "'")
        drs2 = e.DataTable.Select("注册学号 = '" & e.DataRow("注册学号") & "' And 最终成绩 = '及格' And Substring([注册年级],1,4) = '" & Date.Today.Year - 3 & "'")
        If drs1.Count > 0 Then
            If drs1.Count > drs2.Count
                For i As Integer = 0 To drs1.Count - 1
                    If drs1(i)("最终成绩") = "不及格" Then
                        drs1(i)("毕业成绩") = "成绩不合格"
                        Exit For
                    End If
                Next
            Else
                drs1(0)("毕业成绩") = "成绩合格"
            End If
        End If
End Select


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


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

 如下

 

For Each dr As DataRow In DataTables("成绩管理").DataRows
    Dim drs1, drs2 As List(of DataRow)
    drs1 = DataTables("成绩管理").Select("注册学号 = '" & dr("注册学号") & "' And Substring([注册年级],1,4) = '" & Date.Today.Year - 3 & "'")
    drs2 = DataTables("成绩管理").Select("注册学号 = '" & dr("注册学号") & "' And 最终成绩 = '及格' And Substring([注册年级],1,4) = '" & Date.Today.Year - 3 & "'")
    If drs1.Count > 0 Then
        If drs1.Count > drs2.Count
            For i As Integer = 0 To drs1.Count - 1
                If drs1(i)("最终成绩") = "不及格" Then
                    drs1(i)("毕业成绩") = "成绩不合格"
                    Exit For
                End If
            Next
        Else
            drs1(0)("毕业成绩") = "成绩合格"
        End If
    End If
Next


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