VBA刷新窗体数据的3种⽅法
refresh 和requery的区别:
以⼦窗体为例。
第⼀种:
Me.frmChild.Requery
这是最有效,最简单的⽅法。
第⼆种:
Me.frmChild.Form.Refresh
这种⽅法并不能使窗体中的数据⽴即改变。
第三种:
Me.frmChild.SourceObject =“”
DoCmd.RunSQL strSQL
Me.frmChild.SourceObject =“frmsalelist_child”
这种⽅法的效果等同于第⼀种。
从英⽂字⾯翻译来看,请求是请求,是刷新更新,
刷新⽅法⽤于⽴即刷新指定窗体或数据表中基础数据来源中的记录,以反映您或多⽤户环境下的其他⽤户对数据的更改。
语法:form.Refresh,
值得说明的是:使⽤Refresh⽅法和单击“记录”菜单中的“刷新”命令等效
。------------------- ----------------------------------
注意:刷新⽅法只显⽰对当前集中的记录所作的更改。因为刷新⽅法实际上没有重新查询数据库,当前集中不包括⾃从数据库上⼀次重新查询以来已被添加的记录,也不排除已被删除的记录。它还不能排除不再满⾜查询或筛选准则的记录。重新查询数据库,就要⽤到Requery⽅法。也可以说刷新⽐请求要弱⼀些。
------------------------------------
重新查询⽅法是通过重新查询窗体或控件的数据源更新基于指定窗体的数据,或激活窗体上的控件。
语法:[对象]重新查询,这个对象不仅可以是形式窗体,还能是控制等控件
其与刷新还有不同在于它可以使窗体数据更新,还能使窗体中的控件中的数据或可选数据更新,⽐如组合框和列表框中可选的值。
更加详细的解释:
所有数据刷新,⽆⾮就是更新当前显⽰的数据,以确保显⽰的是最新的数据。在Access中,数据的刷新主要有3种⽅式:
Requery重新查询
刷新刷新
Recalc更新计算控件
下⾯就来说⼀下这3种⽅法各⾃的特点和使⽤技巧。
1.Requery⽅法,这个是最常⽤到的了,实际上它是重新查询,不过绝⼤部分⼈都称之为刷新,已经有些约定成俗了。它的语法为:对
象.Requery。基本上所有和数据有关的控件对象都具有Requery⽅法,它执⾏下列操作:
*重新运⾏基于指定窗体或控件的查询。
vba编程技巧*显⽰任何新的或已更改的记录,从窗体中移除已删除的记录。
*根据对窗体的Filter属性所作的任何更改,来更新显⽰记录。
有些刷新⼦窗体数据是通过设置⼦窗体控件的“源对象”属性,来重新加载⼦窗体实现刷新,这个说到底其实也是⽤的Requery⽅法,因为窗体加载时会⾃动调⽤Requery⽅法.Requery是最稳定有效的数据刷新⽅法。⾄今没有听到过存在不良反应的情况
。2.刷新⽅法,相对于Requery⽅法,这个⽤的就要少⼀些了,这个其实才是准确意义上的刷新它的语法为:窗体.Requery,和菜单中的“新”菜单项功能⼀样.REFRESH⽅法刷新数据时,它并不重新查询数据,因此它只会更新当前记录源数据的更改,不会显⽰新的记录,也不会移除被删除的记录。看上去和重新查询⽅法相⽐存在很多不⾜,但是刷新⽅法因为不需要重新查询,因此速度⽐重新查询⽅法要快。另外通过使⽤⼀些特别的编程技巧,能实现⼀些很有趣的功能。
⽐如通过重新查询⽅法重新查询数据后,所有数据会被重新加载,这样记录的当前位置就会跑到第⼀条记录去了。但有的时候在⼀个数据列表中,我们需要打开对应指定记录的修改窗体,修改完成后,需要在列表中更新以显⽰刚才的修改。这个时候我们希望列表中当前位置还在原来的地⽅,⽽不是跑到第⼀条记录,这时我们就可以调⽤刷新⽅法来刷新,这样位置就不会变更了。但是这样必须是基于单个表的,如果是来源于多个表的查询,有的时候刷新会⽆效。所以我们再来改良⼀下。
将列表窗体作为⼦窗体放到另外⼀个窗体中,然后我们对这个主窗体调⽤刷新⽅法,哈哈,看到了什么?列表⼦窗体中的数据被刷新了,甚⾄新的记录,被删除的记录这些也全部被显⽰出来了!最重要的是,记录的当前位置还在原来的那⼀⾏,⽽没有像使⽤重新查询⽅法那样,跑到第⼀⾏记录去了!
不⾜的地⽅:对列表窗体不能应⽤排序和筛选(可以在记录源查询中排序和设置条件),否则刷新后位置还是会跑到第⼀⾏记录的。另外如果有多个⼦窗体和主窗体链接,绝对不要对主窗体⽤刷新⽅法,因为会造成访问崩溃,这是经过多次教训得到的经验。
3. Recalc⽅法,这个基本上很少⽤到,它主要是⽤于刷新计算控件(即控件来源是以等号(=)开头的控件),语法为:窗体.Recalc。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论