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


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

主题:代码优化

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


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

谢谢甜老师!测试通过,要是执行速度再快一点就更好了,或者插入一个进度条。

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


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

哦,这样会快一些。进度条,你看这里 http://www.foxtable.com/help/topics/0793.htm

 

 

For Each xh As String In DataTables("成绩管理").GetValues("注册学号")
    Dim drs1, drs2 As List(of DataRow)
    drs1 = DataTables("成绩管理").Select("注册学号 = '" & xh & "' And Substring([注册年级],1,4) = '" & Date.Today.Year - 3 & "'")
    drs2 = DataTables("成绩管理").Select("注册学号 = '" & xh & "' 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


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


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

甜老师:执行速度还是很慢,这样处理一下,把代码中对毕业生的判断取消,我先把毕业生筛选出来,代码只对筛选出来学生成绩继续判断,这样执行速度可能要快一些,请试一下。

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


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

 帮你优化了一下,变成这样。

 

Dim drs As List(Of DataRow) = DataTables("成绩管理").Select("注册年级 = '" & Date.Today.Year - 3 & "'", "注册学号,最终成绩")
Dim pdr As DataRow = drs(0)
Dim result As String = "及格"
For i As Integer = 1 To drs.count - 1
    If pdr("注册学号") <> drs(i)("注册学号") Then
        pdr("毕业成绩") = result
        result = "及格"
        pdr = drs(i)
    End If
    If drs(i)("最终成绩") = "不及格" Then
        result = "成绩不及格"
    End If
Next

If  pdr("注册学号") = drs(drs.Count-1)("注册学号") Then
    pdr("毕业成绩") = result
End If


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


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

瞬间完成。执行速度提高了N个数量级。代码的学问太大了。谢谢甜老师!

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


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

甜老师:发现一个问题,第一个学生其中有一门课程‘不及格’,但在“毕业成绩”列中判断为‘及格’  ,第二个以后的学生判断都正确,请修改一下代码。

图片点击可在新窗口打开查看此主题相关图片如下:应该为不及格.jpg
图片点击可在新窗口打开查看

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:成绩导入.rar



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


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

 这样改

 

Dim drs As List(Of DataRow) = DataTables("成绩管理").Select("注册年级 = '" & Date.Today.Year - 3 & "'", "注册学号,最终成绩")
Dim pdr As DataRow = drs(0)
Dim result As String = "及格"
If pdr("最终成绩") = "不及格" Then
    result = "成绩不及格"
Else
    result = "及格"
End If

For i As Integer = 1 To drs.count - 1
    If pdr("注册学号") <> drs(i)("注册学号") Then
        pdr("毕业成绩") = result
        result = "及格"
        pdr = drs(i)
    End If
    If drs(i)("最终成绩") = "不及格" Then
        result = "成绩不及格"
    End If
Next

If  pdr("注册学号") = drs(drs.Count-1)("注册学号") Then
    pdr("毕业成绩") = result
End If


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


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

谢谢甜老师!

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


加好友 发短信
等级:八尾狐 帖子:1812 积分:12993 威望:0 精华:14 注册:2008/10/11 18:07:00
  发帖心情 Post By:2014/5/19 10:52:00 [只看该作者]

Dim dt1 As DataTable = DataTables("成绩管理")
Dim flt2 ,s1 As String
flt2="注册年级 = '" & Date.Today.Year - 3 & "' And 最终成绩 = '不及格'"
s1 = "成绩不合格"

dt1.StopRedraw
dt1.ReplaceFor("毕业成绩",s1,flt2)
dt1.ReplaceFor("毕业成绩",s1.Replace("不",""),flt2.Replace("不",""))
dt1.ResumeRedraw


[此贴子已经被作者于2014-5-19 10:54:36编辑过]

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