Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

[5分]用Form.Requery方法不能及时刷新窗体数据

1976yuan  发表于:2010-06-03 14:52:58  
复制

在开发平台中的许多地方都用到了下面语句来刷新子窗体的数据源:

Forms!usysfrmMain!frmChild.SourceObject = "frmCode_kh_child"

 

刷新窗体数据的方法还有Form.Requery 方法和Form.Refresh 方法,我试着把平台中上面的那句代码换成通用代码Forms!usysfrmMain!frmChild.Form.Requery 后,发现在修改了一条记录之后,有时可以及时的刷新子窗体的数据,而有时又不能及时的刷新修改后的数据。请问各位老师,这是怎么回事?这三种刷新窗体数据的方法究竟有什么差别?有些不太理解。

 

Top
煮江品茶 发表于:2010-06-03 16:56:07

RepaintObject、ShowAllRecords、Requery 和 Refresh 操作/方法的比较

参阅参阅

下表提供一个简明的比较关系,包括 RepaintObject 操作、RepaintObject 方法、Repaint 方法、ShowAllRecords 操作、ShowAllRecords 方法、Requery 操作、DoCmd.Requery 方法、Refresh 方法和 Requery 方法。

操作或方法 说明
RepaintObject 操作
DoCmd.RepaintObject、Repaint 方法
使用 RepaintObject 操作、RepaintObject 方法或 Repaint 方法可以重画指定对象中的控件。它们不会重新查询数据库或显示新记录。
ShowAllRecords 操作
ShowAllRecords 方法
使用 ShowAllRecords 操作来重新查询和显示最近期的记录,并且删除任何应用的筛选,这是 Requery 操作不包含的。
Requery 操作
DoCmd.Requery 方法
使用 Requery 操作或方法来重新查询对象或它的某个控件的来源,Requery 操作或方法执行下列操作之一:

返回控件或对象所基于的查询。

显示所有新的或更改的记录,并且从控件或对象所基于的中移去所有被删除了的记录。

Refresh 方法 使用 Refresh 方法可以立刻更新用于指定的窗体数据表的基础记录源内的记录,以反映您或其他用户在多用户环境下对数据进行的更改。Refresh 方法只显示对当前记录集已作出的更改;不反映记录源中的新建记录或删除的记录。
Requery 方法
  • 使用 Requery 方法可以更新基于窗体或控件的数据,以反映自最后依次重新查询后新建或已从记录源中删除的记录。

    如果想要重新查询不在活动对象上的控件,必须使用该方法,而不是 Requery 操作或其相应的 DoCmd.Requery 方法。




wj.s 发表于:2010-06-04 14:27:47

使用Form.Requery方法和Form.Refresh方法时有一个很郁闷的问题,如果子窗体中的数据源原本没有有效数据(即数据源不存在任何记录),刷新就会不成功(即使这时新数据输入后的数据源已经产生有效的新纪录了).但如果子窗体中的数据源原本有有效数据就不会有问题.

使用Forms!usysfrmMain!frmChild.SourceObject = "frmCode_kh_child" 语句其实就是重新指定子窗体"Forms!usysfrmMain!frmChild"的数据源,就不会产生以上问题了.



巴士岁月 发表于:2010-06-12 08:06:19

是不是没触发事件嘿嘿



总记录:3篇  页次:1/1 9 1 :