Office中国论坛/Access中国论坛
标题:
从“自动牙刷”谈起——浅谈自动数据表窗体
[打印本页]
作者:
roych
时间:
2018-10-27 17:43
标题:
从“自动牙刷”谈起——浅谈自动数据表窗体
记得很久以前,看过一个笑话,说有人卖牙刷,“自动牙刷,三块钱一支”。大家买了之后,发现是普通牙刷,第二天在隔壁村子围堵他,“你这明明不是自动牙刷,我把它放嘴里,根本不会刷牙。”他淡定地说,“你们的使用方法有问题呀。把它放进嘴里,紧贴着牙齿,然后你的脑袋左右晃动,它就能自动刷牙了。”
这不就是明显在欺负大家读书少,没学过相对运动的概念吗?
当然,我们接下来说的自动数据表窗体,也是这么一回事。之所以说是自动,只不过一切运行都在后台,你没来得及感知罢了。
七八年前,曾经写过一个帖子
懒人有懒计——浅谈自动报表
,为版友解决根据所选字段创建报表的问题。这次写这个帖子,同样是为另一个版友解决类似的问题:
能否根据交叉表查询来自动更新数据表窗体
。
我们知道,Excel是可以用数据透视表来实现这个功能的,只需要设置好行列字段和数据,刷新数据源,即可自动更新。Access的交叉表查询不是做不到类似的功能,但是,如果要把它显示在窗体或者报表上就有些问题了。对于报表而言,由于涉及到页面打印尺寸,因此不太可能完全自动化,毕竟它不会自动调整打印尺寸,也不会自动调整控件尺寸,甚至字体大小。不过对于窗体而言,不存在页面尺寸问题(会根据控件布局而调整主体尺寸),这就有了继续往下思考的前提:
a、能否允许在设计模式下根据需求创建控件并绑定数据?这个问题我没测试过,估计可能不行。有兴趣的版友可以试试。
b、是否可以预设一定量的控件(例如,对于月报,可以预设31个控件作为容器),最后根据数据源的数量进行绑定并处理显示标签(label.caption)呢?这个方法应该是可行的(请参考:
关于有参数条件的交叉表查询生成报表
)。
c、是否可以删除已有的子窗体,然后根据数据源的变化,重新生成子窗体?是的。这个是可行的。
考虑到显示模式下,删除子窗体可能不是那么方便(当然,有兴趣的版友也可以试试,在点击事件中加入deleteObject·的语句)。所以我这里用child(子窗体/子报表控件)来实现。思路上是加载时,用child控件通过SourceObject绑定已有的子窗体控件,以便显示数据。然后更新数据源时,则取消绑定,删除子窗体,打开交叉表查询,重新创建数据表窗体,再进行绑定,从而达到更新的目的。理清思路之后,接下来就是写代码了。很简单的几句:
Private Sub Command0_Click()
On Error Resume Next
Me.Child1.SourceObject = ""
'删除窗体,打开查询并创建窗体
DoCmd.DeleteObject acForm, "生产_工单_按日期查询"
DoCmd.OpenQuery "生产_工单_按日期查询"
DoCmd.RunCommand acCmdNewObjectAutoForm
DoCmd.Save acForm, "生产_工单_按日期查询"
'默认情况下,会生成单个窗体,因此这里需要在设计模式下修改默认视图
DoCmd.OpenForm "生产_工单_按日期查询", acDesign
Forms("生产_工单_按日期查询").Visible = False
Forms("生产_工单_按日期查询").DefaultView = 2
'设置数据集类型为快照(禁止用户修改)
Forms("生产_工单_按日期查询").RecordsetType = 2
'关闭各个组件,重新绑定窗体控件
DoCmd.Close acForm, "生产_工单_按日期查询", acSaveYes
DoCmd.Close acQuery, "生产_工单_按日期查询", acSaveNo
Me.Child1.SourceObject = "窗体.生产_工单_按日期查询"
End Sub
复制代码
如果喜欢的话,就下载附件看看吧。
[attach]62889[/attach]
作者:
tmtony
时间:
2018-10-27 20:33
赞一个,先坐个沙发
作者:
天涯沦落20131
时间:
2018-10-29 08:22
谢谢roych ! 你能帮我解答非常感谢!其实我是想通过另一个工单查询窗体点击文本框显示筛选后的交叉查询子窗体!因交叉查询子窗有动态多列无法完全显示,才造成困扰!
我的解决办法:多建一个窗体+子窗体:在窗体加载事件中写入:Me.生产_工单.SourceObject = "Query.生产_工单_日期查询",达到时实更新!
但是,点击工单查询窗体文本框(产品料号/工单编号)无法达到精确筛选!
因access+VB只是个人爱好!无法达到精通!有很多想法,但实际操作会遇到很多阻力!多谢各位帮助!
作者:
冚友
时间:
2018-11-6 12:11
学习了,感谢大侠!
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/)
Powered by Discuz! X3.3