数据刷新问题详解(附送绝招一式^o^)\Requery与Refresh二者用法
时 间:2011-06-02 00:00:00
作 者:红尘如烟 ID:10768 城市:成都
摘 要:有鉴于很多初学Access的朋友对数据刷新的问题比较迷糊,写了这个教程。
正 文:
有鉴于很多初学Access的朋友对数据刷新的问题比较迷糊,写了这个教程。所谓数据刷新,无非就是更新当前显示的数据,以确保显示的是最新的数据。在Access中,数据的刷新主要有3种方式:
Requery 重新查询
Refresh 刷新
Recalc 更新计算控件
下面就来说一下这3种方法各自的特点和使用技巧。
1.Requery方法,这个是最常用到的了,实际上它是重新查询,不过绝大部分人都称之为刷新,已经有些约定成俗了。它的语法为:对象.Requery。基本上所有和数据有关的控件对象都具有Requery方法,它执行下列操作:
* 重新运行基于指定窗体或控件的查询。
* 显示任何新的或已更改的记录,从窗体中移除已删除的记录。
* 根据对窗体的Filter属性所作的任何更改,来更新显示记录。
有些刷新子窗体数据是通过设置子窗体控件的“源对象”属性,来重新加载子窗体实现刷新,这个说到底其实也是用的Requery方法,因为窗体加载时会自动调用Requery方法。Requery是最稳定有效的数据刷新方法。至今没有听到过存在不良反应的情况。
2. Refresh方法,相对于Requery方法,这个用的就要少一些了,这个其实才是准确意义上的刷新。它的语法为:窗体.Requery,和菜单中的“刷新”菜单项功能一样。Refresh方法刷新数据时,它并不重新查询数据,因此它只会更新当前记录源数据的更改,不会显示新的记录,也不会移除被删除的记录。看上去和Requery方法相比存在很多不足,但是Refresh方法因为不需要重新查询,因此速度比Requery方法要快。另外通过使用一些特别的编程技巧,能实现一些很有趣的功能。
比如通过Requery方法重新查询数据后,所有数据会被重新加载,这样记录的当前位置就会跑到第一条记录去了。但有的时候在一个数据列表中,我们需要打开对应指定记录的修改窗体,修改完成后,需要在列表中更新以显示刚才的修改。这个时候我们希望列表中当前位置还在原来的地方,而不是跑到第一条记录,这时我们就可以调用Refresh方法来刷新,这样位置就不会变更了。但是这样必须是基于单个表的,如果是来源于多个表的查询,有的时候刷新会无效。所以我们再来改良一下。
将列表窗体作为子窗体放到另外一个窗体中,然后我们对这个主窗体调用Refresh方法,哈哈,看到了什么?列表子窗体中的数据被刷新了,甚至新的记录、被删除的记录这些也全部被显示出来了!最重要的是,记录的当前位置还在原来的那一行,而没有像使用Requery方法那样,跑到第一行记录去了!
不足的地方:对列表窗体不能应用排序和筛选(可以在记录源查询中排序和设置条件),否则刷新后位置还是会跑到第一行记录的。另外如果有多个子窗体和主窗体链接,绝对不要对主窗体用Refresh方法,因为会造成Access崩溃,这是经过多次教训得到的经验。
3. Recalc方法,这个基本上很少用到,它主要是用于刷新计算控件(即控件来源是以等号(=)开头的控件),语法为:窗体.Recalc。呃,这个好像没什么好讲的,到此为止……
相关资料:
Access软件网官方交流QQ群 (群号:54525238) Access源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- 统计当月之前(不含当月)的记录...(03.11)
- 【Access Inputbo...(03.03)
- 按回车键后光标移动到下一条记录...(02.12)
- 【Access Dsum示例】...(02.07)
- Access对子窗体的数据进行...(02.05)
- 【Access高效办公】上月累...(01.09)
- 【Access高效办公】上月累...(01.06)
- 【Access Inputbo...(12.23)
- 【Access Dsum示例】...(12.16)

学习心得
最新文章
- 仓库管理实战课程(9)-开发往来单...(04.02)
- 仓库管理实战课程(8)-商品信息功...(04.01)
- 仓库管理实战课程(7)-链接表(03.31)
- 仓库管理实战课程(6)-创建查询(03.29)
- 仓库管理实战课程(5)-字段属性(03.27)
- 设备装配出入库管理系统;基于Acc...(03.24)
- 仓库管理实战课程(4)-建表操作(03.22)
- 仓库管理实战课程(3)-需求设计说...(03.19)
- 仓库管理实战课程(2)-软件背景和...(03.18)
- 仓库管理实战课程(1)-讲师介绍(03.16)