以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 代码优化 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=51007) |
-- 作者:aygp -- 发布时间: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 -- 发布时间:2014/5/16 21:07:00 -- 上例子。 |
-- 作者:程兴刚 -- 发布时间: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
|
-- 作者:程兴刚 -- 发布时间:2014/5/16 23:20:00 -- 用其它办法会更快,但需要示例文件! |
-- 作者:逛逛 -- 发布时间:2014/5/17 8:43:00 -- 看看狐爸的帮助, http://www.foxtable.com/help/topics/2225.htm
试试把查询和赋值分开,是否有用。 |
-- 作者:lsy -- 发布时间: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 -- 发布时间:2014/5/18 12:16:00 -- 我现在把例子上传,由于商业版有点问题,所以上传了专业版,请各位老师指导! |
-- 作者:有点甜 -- 发布时间:2014/5/18 14:35:00 -- datacolchanged事件影响的。
SystemReady = False
|
-- 作者:aygp -- 发布时间: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 |
-- 作者:有点甜 -- 发布时间:2014/5/18 20:07:00 -- 如下
For Each dr As DataRow In DataTables("成绩管理").DataRows |