Foxtable(狐表)用户栏目专家坐堂 → 运行速度太慢了,求代码简化和提速方案


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

主题:运行速度太慢了,求代码简化和提速方案

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/8/6 22:25:00 [显示全部帖子]

 项目很大,哪个表,哪个窗口,哪个按钮的操作慢?

 

 别人不可能帮你看完整个项目啊。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/8/7 9:32:00 [显示全部帖子]

 看了一下,如果是加载慢的话,有几种原因。

 

1、其它事件影响了,你要改一下代码

 

Dim StartDate As Date
Dim EndDate As Date
With RibbonTabs("业务管理")("报关登记查询")("时间筛选")
    StartDate = .Items("StartDate").Value
End With
With RibbonTabs("业务管理")("报关登记查询")
    EndDate = .Items("EndDate").Value
End With
SystemReady = False
DataTables("报关登记表").StopRedraw
DataTables("报关结算表").StopRedraw

DataTables("报关登记表").LoadFilter = "[日期] >= #" & StartDate & "# And [日期] <= #" & EndDate & "#"
DataTables("报关登记表").Load()

DataTables("报关结算表").LoadFilter = "[日期] >= #" & StartDate & "# And [日期] <= #" & EndDate & "#"
DataTables("报关结算表").Load()

DataTables("报关结算表").ResumeRedraw
DataTables("报关登记表").ResumeRedraw
SystemReady = True

 

2、表达式列过多,如果加载量过多的话,重新计算也是很耗时的。建议尽量不要用表达式列了,你看看是否可以用数据列代替表达式列的功能。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/8/7 9:35:00 [显示全部帖子]

 再有一个,你的数据较多,你要在access里面给日期列添加一个索引,这样利于查询和比较,不然会很慢的。

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/8/7 15:09:00 [显示全部帖子]

3、建立索引参考,建立索引以后,通过日期加载数据就不会那么慢了。

 

http://jingyan.baidu.com/article/a681b0dedf395f3b18434605.html

 


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/8/7 15:12:00 [显示全部帖子]

 个人感觉,就不要大改了。

 

1、你弄好索引以后,看加载速度是否有提升;

 

2、注释掉drawcell看速度提升多少;

 

3、去掉表达式看速度提升多少;

 

用下面的代码加载数据,如果速度还可以接受的话,就不要大改了。

 

Dim StartDate As Date
Dim EndDate As Date
With RibbonTabs("业务管理")("报关登记查询")("时间筛选")
    StartDate = .Items("StartDate").Value
End With
With RibbonTabs("业务管理")("报关登记查询")
    EndDate = .Items("EndDate").Value
End With
SystemReady = False
DataTables("报关登记表").StopRedraw
DataTables("报关结算表").StopRedraw

DataTables("报关登记表").LoadFilter = "[日期] >= #" & StartDate & "# And [日期] <= #" & EndDate & "#"
DataTables("报关登记表").Load()

DataTables("报关结算表").LoadFilter = "[日期] >= #" & StartDate & "# And [日期] <= #" & EndDate & "#"
DataTables("报关结算表").Load()

DataTables("报关结算表").ResumeRedraw
DataTables("报关登记表").ResumeRedraw
SystemReady = True


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/8/7 19:35:00 [显示全部帖子]

以下是引用SZDVYE在2014-8-7 19:32:00的发言:
谢谢两位老师指导.
我明白了,因为关联表在一组工作人员是可以不加载的,我想到一个方法,就是增加一个按钮,选择是否加载关联表.请教老师能指导一下如何实现吗?或者给我样式,谢谢!

 

不运行这段代码,就不加载关联表了。

 

DataTables("报关结算表").LoadFilter = "[日期] >= #" & StartDate & "# And [日期] <= #" & EndDate & "#"
DataTables("报关结算表").Load()


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/8/7 19:36:00 [显示全部帖子]

 关键还是,你的表达式问题,尽量不要用表达式了。

 回到顶部