Foxtable(狐表)用户栏目专家坐堂 → 这段代码执行时非常慢,有没有优化些方法?


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

主题:这段代码执行时非常慢,有没有优化些方法?

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


加好友 发短信
等级:二尾狐 帖子:559 积分:6282 威望:0 精华:0 注册:2008/9/7 20:15:00
这段代码执行时非常慢,有没有优化些方法?  发帖心情 Post By:2018/7/8 21:00:00 [显示全部帖子]

在蓝版主的帮助下,完成了一个小小高考志愿查询筛选程序。在这里选感谢蓝版。有一个按钮代码在程序执行时非常慢,蓝版及各位老师看一下,还有没有化的方法,让其在执行的快一些。选谢谢各位版主及老师了。
选上图,看一下执行时间:

图片点击可在新窗口打开查看此主题相关图片如下:000.png
图片点击可在新窗口打开查看
代码如下:
e.Form.Controls("Label1").Text = "正在调入各年度最低分平均分及排名,请稍后..."
Application.DoEvents()
Dim timestart,timeend As Date
timestart=Date.now
Dim dt1 As DataTable = DataTables("年度院校提档线")
For Each ary As String() In dt1.GetValues("院校代码|文理分科|录取批次", "院校代码 is not null")
    Dim filter As String = "院校代码='" & ary(0) & "' and 文理分科 = '" & ary(1) & "' and 录取批次 = '" & ary(2) & "'"
    Dim filter1 As String = filter & " And 录取年度 = '2017'"
    Dim filter2 As String = filter & " And 录取年度 = '2016'"
    Dim filter3 As String = filter & " And 录取年度 = '2015'"
    
    Dim fdr1 = dt1.find(filter1)
    If fdr1 IsNot Nothing Then
        dt1.ReplaceFor("乙年最低分", fdr1("最低分"), filter)
        dt1.ReplaceFor("乙年平均分", fdr1("平均分"), filter)
        dt1.ReplaceFor("乙年最低分排名", fdr1("最低分排名"), filter)
        dt1.ReplaceFor("乙年平均分排名", fdr1("平均分排名"), filter)
    End If
    
    Dim fdr2 = dt1.find(filter2)
    If fdr2 IsNot Nothing Then
        dt1.ReplaceFor("丙年最低分", fdr2("最低分"), filter)
        dt1.ReplaceFor("丙年平均分", fdr2("平均分"), filter)
        dt1.ReplaceFor("丙年最低分排名", fdr2("最低分排名"), filter)
        dt1.ReplaceFor("丙年平均分排名", fdr2("平均分排名"), filter)
    End If
    
    Dim fdr3 = dt1.find(filter3)
    If fdr3 IsNot Nothing Then
        dt1.ReplaceFor("丁年最低分", fdr3("最低分"), filter)
        dt1.ReplaceFor("丁年平均分", fdr3("平均分"), filter)
        dt1.ReplaceFor("丁年最低分排名", fdr3("最低分排名"), filter)
        dt1.ReplaceFor("丁年平均分排名", fdr3("平均分排名"), filter)
    End If
Next
e.Form.Controls("Label1").Text = "调入完毕."
timeend=Date.now
e.Form.Controls("Label1").text="耗时" & (timeend-timestart).TotalSeconds & "秒"
Messagebox.Show("调入完毕!")


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


加好友 发短信
等级:二尾狐 帖子:559 积分:6282 威望:0 精华:0 注册:2008/9/7 20:15:00
  发帖心情 Post By:2018/7/8 21:34:00 [显示全部帖子]

原来是每年一个按钮,后来是合到一起的,每年一个的时候,也不是很快,因为要调试,所以没注意到这个细节,现在进一步
完善,所以才发现了这个问题,另外,老师说到的SQL中的存储语句是什么意思?怎么试?谢谢老师!

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


加好友 发短信
等级:二尾狐 帖子:559 积分:6282 威望:0 精华:0 注册:2008/9/7 20:15:00
  发帖心情 Post By:2018/7/9 8:48:00 [显示全部帖子]

自己顶一下。

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


加好友 发短信
等级:二尾狐 帖子:559 积分:6282 威望:0 精华:0 注册:2008/9/7 20:15:00
  发帖心情 Post By:2018/7/9 9:42:00 [显示全部帖子]

其它按钮几秒钟,这个432多秒,7分多鈡,我的意思如果有可以优化一下,快一点,如果没有这样就很好。非常感谢蓝版!!谢谢

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


加好友 发短信
等级:二尾狐 帖子:559 积分:6282 威望:0 精华:0 注册:2008/9/7 20:15:00
  发帖心情 Post By:2020/12/25 13:36:00 [显示全部帖子]

老问题,如果一楼的公式,换成Select函数,可以吗?公式怎么写呢?谢谢老师!

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


加好友 发短信
等级:二尾狐 帖子:559 积分:6282 威望:0 精华:0 注册:2008/9/7 20:15:00
  发帖心情 Post By:2020/12/25 15:09:00 [显示全部帖子]

因论坛附件限制,固更改了文件扩展名,老师下载附件后,直接去掉rar的扩展名,即可解压缩。谢谢老师,麻烦了!
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:同表引用排名同位分公式执行慢求助.7z.rar


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


加好友 发短信
等级:二尾狐 帖子:559 积分:6282 威望:0 精华:0 注册:2008/9/7 20:15:00
  发帖心情 Post By:2020/12/25 18:29:00 [显示全部帖子]

.NET Framework 版本:4.0.30319.42000
Foxtable 版本:2020.5.29.8
错误所在事件:
详细错误信息:
Microsoft Jet 数据库引擎找不到输入表或查询 '专业录取线'。 确定它是否存在,以及它的名称的拼写是否正确。
但是明明有“专业录取线”这个表,为什么提示找不到?


如何“使用sql更新”,没弄懂!
[此贴子已经被作者于2020/12/25 18:44:47编辑过]

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


加好友 发短信
等级:二尾狐 帖子:559 积分:6282 威望:0 精华:0 注册:2008/9/7 20:15:00
  发帖心情 Post By:2020/12/26 13:22:00 [显示全部帖子]

谢谢老师,刚才试了一下,三年的数据不能调入到对应的列中,老师再给看一下,问题出在哪里?同一院校、同一专业在同一行里显示,2019年的(减一年)、2018年的(减二年)、2017年的(减三年)录取数据,目的是便于比较三年级的变化,是涨了,还是降了。现在三年的数据是在一列中,不便于比较,不直观。麻烦老师了

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


加好友 发短信
等级:二尾狐 帖子:559 积分:6282 威望:0 精华:0 注册:2008/9/7 20:15:00
  发帖心情 Post By:2020/12/26 14:58:00 [显示全部帖子]

试了下面的代码
Dim cmd As New SQLCommand
cmd.CommandText = 
"update {专业录取线} As a,{专业录取线} As b set a.物理组总_减一年低排=b.物理组总_低分排名,a.物理组总_减一年低同 = b.物理组总_低分同位 where a.院校代码=b.院校代码 And a.物理系列=b.物理系列 And a.专业代码=b.专业代码 And b.录取年度 = 2019 and a.院校代码 Is not null"
cmd.
ExecuteNonQuery()

cmd.CommandText = "update {专业录取线} As a,{专业录取线} As b set a.物理组总_减二年低排=b.物理组总_低分排名,a.物理组总_减二年低同 = b.物理组总_低分同位 where a.院校代码=b.院校代码 And a.物理系列=b.物理系列 And a.专业代码=b.专业代码 And b.录取年度 = 2018 and a.院校代码 Is not null"
cmd.
ExecuteNonQuery()

cmd.CommandText = "update {专业录取线} As a,{专业录取线} As b set a.物理组总_减一年低排=b.物理组总_低分排名,a.物理组总_减一年低同 = b.物理组总_低分同位 where a.院校代码=b.院校代码 And a.物理系列=b.物理系列 And a.专业代码=b.专业代码 And b.录取年度 = 2017 and a.院校代码 Is not null"
cmd.
ExecuteNonQuery()

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


加好友 发短信
等级:二尾狐 帖子:559 积分:6282 威望:0 精华:0 注册:2008/9/7 20:15:00
  发帖心情 Post By:2020/12/26 16:20:00 [显示全部帖子]

复制项目代码时,不让发帖。按照老师的提示,进行了修改。需要填充的各列,没有显示的内容,是内容不显示。运行的时候没有错误提示。产生了放弃的想法。关闭了项目。但心又不甘,于是把刚才计算过项目又打开了,奇怪的事出现了:需要填充的各列内容显示出来了,不知道是什么原因?现在的问题是,SQL的代码应该没问题,运行后不显示内容,需要关闭项目再打开项目内容才能显示出来,老师这是啥原因造成的?

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