大量数据处理里使用进度条显示进度,但如何避免进度条拖慢处理时间呢
- 2020-01-03 08:00:00
- zstmtony 原创
- 4432
最近帮一个客户在处理一个业务时,因为处理时间长,为了避免客户焦虑等待,在处理过程中添加了进度条,但因为记录数特别多,达几十万,增加进度条显示后,会导致处理时间成倍增加。拖慢了处理的速度,反而背离了之前的初衷。所以在显示进度条时想了一个办法,不是每条都刷新进度条,而是以一定的间隔如100 1000 10000 这样的等级间隔来刷新进度条,数据量越大,间隔长度越长,这样就在处理时间及显示进度条之间取得一个平衡,既显示了进度,但不会拖慢整个处理时间。
Public Sub 生成3个号和值振幅表() Dim rst As Object '子窗体记录集 Dim rstTmp As Object '子窗体记录集 Dim He123, He124, He125, He234, He235, He345, He134, He135, He145, He245 As Integer Set rstTmp = CurrentDb.OpenRecordset("TMP_tbl最后一期数据表", dbOpenDynaset) rstTmp.MoveFirst '把当前记录的数据保存在变量,用于计算所有组合的振幅 He123 = rstTmp![123和] He124 = rstTmp![124和] He125 = rstTmp![125和] He234 = rstTmp![234和] He235 = rstTmp![235和] He345 = rstTmp![345和] He134 = rstTmp![134和] He135 = rstTmp![135和] He145 = rstTmp![145和] He245 = rstTmp![245和] rstTmp.Close Set rstTmp = Nothing CurrentDb.Execute "delete * from tbl3个号和值振幅表" Set rst = CurrentDb.OpenRecordset("tbl3个号和值振幅表", dbOpenDynaset) Set rstTmp = CurrentDb.OpenRecordset("tbl3个号和库", dbOpenDynaset) If rstTmp.RecordCount = 0 Then Exit Sub '初始化进度条 '记录集先移到最后,以避免总条数取不对 rstTmp.MoveLast rstTmp.MoveFirst Dim lngCnt As Long Dim i As Long lngCnt = rstTmp.RecordCount '取记录的总数 Dim clsProgress As New clsSysProgress Dim lngSplit As Long lngSplit = Int(lngCnt / 100) If lngSplit <= 0 Then lngSplit = 1 clsProgress.gintStep = 1 clsProgress.gintLong = lngCnt clsProgress.gintTime = 20 clsProgress.gf_ChangeText "准备生成3个号和值振幅表 ..." clsProgress.gf_Show PM_Wait Do Until rstTmp.EOF '记录数比较大时,则隔一段时间才更新进度条,而不是每条都更新进度条,大大加快速度 i = i + 1 If i Mod lngSplit = 0 Or i = lngCnt Then clsProgress.gf_ChangeText "正在生成3个号和值振幅表-- 第" & i & "条/共" & lngCnt & "条 ..." clsProgress.gf_SetStep i DoEvents End If rst.AddNew rst!组合ID = rstTmp!组合ID rst!组合 = rstTmp!组合 rst![123振幅] = Abs(rstTmp![123和] - He123) rst![124振幅] = Abs(rstTmp![124和] - He124) rst![125振幅] = Abs(rstTmp![125和] - He125) rst![234振幅] = Abs(rstTmp![234和] - He234) rst![235振幅] = Abs(rstTmp![235和] - He235) rst![345振幅] = Abs(rstTmp![345和] - He345) rst![134振幅] = Abs(rstTmp![134和] - He134) rst![135振幅] = Abs(rstTmp![135和] - He135) rst![145振幅] = Abs(rstTmp![145和] - He145) rst![245振幅] = Abs(rstTmp![245和] - He245) rst.Update rstTmp.MoveNext Loop '关闭进度条 处理完成 clsProgress.gf_ChangeText "3个号和值振幅表 处理完成!" '完成 Set clsProgress = Nothing rst.Close rstTmp.Close Set rst = Nothing Set rstTmp = Nothing
Access数据库自身
- office课程播放地址及课程明细
- Excel Word PPT Access VBA等Office技巧学习平台
- 将( .accdb) 文件格式数据库转换为早期版本(.mdb)的文件格式
- 将早期的数据库文件格式(.mdb)转换为 (.accdb) 文件格式
- KB5002984:配置 Jet Red Database Engine 数据库引擎和访问连接引擎以阻止对远程数据库的访问(remote table)
- Access 365 /Access 2019 数据库中哪些函数功能和属性被沙箱模式阻止(如未启动宏时)
- Access Runtime(运行时)最全的下载(2007 2010 2013 2016 2019 Access 365)
Access Activex第三方控件
- Activex控件或Dll 在某些电脑无法正常注册的解决办法(regsvr32注册时卡住)
- office使用部分控件时提示“您没有使用该ActiveX控件许可的问题”的解决方法
- RTF文件(富文本格式)的一些解析
- Access树控件(treeview) 64位Office下出现横向滚动条不会自动定位的解决办法
- Access中国树控件 在win10电脑 节点行间距太小的解决办法
- EXCEL 2019 64位版(Office 2019 64位)早就支持64位Treeview 树控件 ListView列表等64位MSCOMMCTL.OCX控件下载
- VBA或VB6调用WebService(直接Post方式)并解析返回的XML
Access ADP Sql Server等
- 早期PB程序连接Sqlserver出现错误
- MMC 不能打开文件C:/Program Files/Microsoft SQL Server/80/Tools/Binn/SQL Server Enterprise Manager.MSC 可能是由于文件不存在,不是一个MMC控制台,或者用后来的MMC版
- sql server连接不了的解决办法
- localhost与127.0.0.1区别
- Roych的浅谈数据库开发系列(Sql Server)
- sqlserver 自动备份对备份目录没有存取权限的解决办法
- 安装Sql server 2005 express 和SQLServer2005 Express版企业管理器 SQLServer2005_SSMSEE
文章分类
联系我们
联系人: | 王先生 |
---|---|
Email: | 18449932@qq.com |
QQ: | 18449932 |
微博: | officecn01 |