|
本帖最后由 todaynew 于 2010-7-2 10:31 编辑
Access软件网论坛中有三个老头,其名曰牛先生、放弃、煮江品茶,皆初学者也。但凡老头均有脾气,固执者要么是老头,要么是疯子。因此上你不要责备他们的问题太肤浅,你也不要责备他们老是问同一个问题,你到了这个年龄也这个德行。看到一个版友的版友好像叫做三十岁学Access什么的,这不值得骄傲。如果有人说五六十岁开始学Access,而且比你认真,比你执着,那你就该汗颜了。老头学习Access这类东西一定是不拘泥常规的,因为他们常常很自行,不喜欢按部就班的做事。在他们看来,按部就班循序渐进是年轻人的事情,老子吃的盐都比你吃的饭多,还有什么老子搞不懂的呢?呵呵。
老头与老头也有不同,牛先生是不光三七二十一便想为儿子搞一套管理程序,想将自己的管理经验传给后辈。其实后辈自有后辈的想法,就是他用你的程序也是逗你开心,怎么可能真的管用呢?不过从另外一个角度看,牛先生乐此不疲,也算是从Access中得到许多乐趣,以我看这就足够了。放弃不常发言,一旦发言便要问个究竟,管他是否在理,你不说明白,他不放弃。在下与这两老头不同,纯粹娱乐,但凡有点意思的问题便喜欢寻求解法,于是乎著小品数十篇,混迹若干论坛,也小有名气。
这两日放弃同志问一个窗体刷新问题,实在执拗。想来都是老头,还是给他一个尽善尽美的解法,于是将解法分解递进,供放弃老兄参考之。
第一步:刷新主子两级窗体的自定义函数
Public Function frmrq(frm As Form)
'功能:主子两级窗体刷新
'示例:call frmrq(me.form)
Dim ctls As Controls
Dim ctl As Control
frm.Requery
Set ctls = frm.Controls
For Each ctl In ctls
If ctl.ControlType = acSubform Then
ctl.Form.Requery
End If
Next ctl
End Function
第二步:有时候不太希望刷新主窗体,因为刷新主窗体的话,主窗体记录会跳回到首记录,那么这个函数可以改造为:
Function frmrq(frm As Form, B As Boolean)
'功能:刷新主子窗体
'示例:同时刷新主子窗体:call frmrq(me.form,true)
' 只刷新子窗体:call frmrq(me.form,fasle)
Dim ctls As Controls
Dim ctl As Control
If B = True Then
frm.Requery
End If
Set ctls = frm.Controls
For Each ctl In ctls
If ctl.ControlType = acSubform Then
ctl.Form.Requery
End If
Next ctl
End Function
第三步:多数情况下虽不想刷新主窗体,但希望刷新主窗体中的列表框和组合框控件,则该函数可以进一步改写为:
Function frmrq(frm As Form, B As Boolean)
Dim ctls As Controls
Dim ctl As Control
If B = True Then
frm.Requery
End If
Set ctls = frm.Controls
For Each ctl In ctls
If ctl.ControlType = acSubform Then
ctl.Form.Requery
End If
If ctl.ControlType = acComboBox Or ctl.ControlType = acListBox Then
ctl.Requery
End If
Next ctl
End Function |
|