Office中国论坛/Access中国论坛

标题: 关于动态交叉表查询窗体的一点想法 [打印本页]

作者: roych    时间: 2018-11-1 12:38
标题: 关于动态交叉表查询窗体的一点想法
这个帖子是是根据天涯沦落20131的一个业务问题进行处理的结果(详细请点击这里)。大体是希望通过点击不同的订单或者物料,来查看某个订单或者某个物料的每天缺料情况。


我们知道,窗体控件是相对固定的。也就是说,一般情况下,创建好了,再添加控件是比较困难的。所以这里暂时不考虑点击时在隐藏状态下进入设计模式,根据查询来添加控件的做法,而是改为child子窗体控件的形式来处理。child控件最大的好处莫过于,它不介意数据来源到底是表还是查询,会根据实际情况进行控件自动适配。

关注我的帖子的版友们,可能都知道,前几天写过一个自动生成数据表窗体的示例,里面已经提到了实现思路。这里就不再重复了。这里仅提一下不同之处。我们知道,通过点击控件来显示数据,就必然涉及到传递参数,修改数据源的操作。在思路上,可以考虑在打开窗体时使用acDialog模式,也可以考虑直接用参数来修改数据源。经测试,用acDialog方式有些问题,没法实现。所以这里就直接通过修改查询数据源,再加载查询到源对象(SourceObject)上,从而达到自动更新目标窗体的目的。

实现的方式有2种。一种是打开新窗体,另一种则是嵌套子窗体。虽然楼主原先的想法是打开新窗体来查看,但是个人觉得,用嵌套子窗体或许更方便查看。所以两种方式都做了。具体见附件中“生产_欠单_打开新窗体”和“生产_欠单_嵌套子窗体”两个窗体。不管新窗体还是子窗体,这里用的都是“生产_订单_情况”,别问为什么(偷懒呗)。

还是老规矩,先贴一段代码吧:
  1. Private Sub 产品料号_Click()
  2.     Dim strNum As String
  3.     Dim strSQL As String
  4.     Dim qry As QueryDef
  5.     Set qry = CurrentDb.QueryDefs("临时表")
  6.     qry.SQL = "TRANSFORM Sum(生产数量) AS 生产数量总计 SELECT 模号, 工单编号, 产品料号, Sum(生产数量) AS 总计 FROM 生产_数据统计表" _
  7.             & " WHERE 产品料号='" & Me.产品料号 & "' GROUP BY 模号, 工单编号, 产品料号 PIVOT 生产日期"
  8.     Me.Parent!生产_订单_情况.Form!生产_工单.SourceObject = "查询.临时表"
  9.     Me.Parent!生产_订单_情况.Requery
  10. End Sub
复制代码
代码很简单,大体是利用QueryDef对象对查询进行设置SQL语句,然后把查询对象绑定到嵌套子窗体的child控件上,再刷新子窗体。这里就不一一解说了。需要注意的是,如何引用兄弟窗体的写法:先用Me,再引用Parent到父级(即主窗体)上,再引用兄弟窗体,后面的控件写法则与一般写法无异了。即:Me.Parent!兄弟窗体.Form!兄弟窗体控件.控件属性
[attach]62919[/attach]
喜欢的话,不放下载下来体验下?

作者: tmtony    时间: 2018-11-1 13:11
交叉查询的示例论坛一直不多,先顶一下。
作者: zpy2    时间: 2018-11-1 14:41
roych 发表于 2018-11-1 12:38
这个帖子是是根据天涯沦落20131的一个业务问题进行处理的结果(详细请点击这里)。大体是希望 ...

用查询作为子窗体的sourceObject的确非常棒,完全体现了access易用的风格。这里如果用透视表视图也不错的,感觉还可以看明细,就是格式比较臃肿,哈哈。
作者: access新新新手    时间: 2018-11-1 17:54
谢谢分享
作者: wuwu200222    时间: 2021-3-11 09:41
谢谢
作者: GOODWIN    时间: 2021-9-9 19:23
谢谢分享




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3