设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 4272|回复: 18
打印 上一主题 下一主题

[报表] access子报表难题

[复制链接]
跳转到指定楼层
1#
发表于 2012-7-2 18:39:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在access中有表mdata、主报表mrpt和子报表srpt,表mdata有名称和颜色2个字段,如下所示:

+=====+====+
|名称 |颜色|
+=====+====+
|苹果 |红色|
+-----+----+
|香蕉 |黄色|
+-----+----+

其中,主报表mrpt的报表页眉区中有2个子报表控件Child0和Child1,它们的源对象(数据来源)都是子报表srpt;子报表srpt的报表页眉区有1个文本框控件,控件来源为“颜色”。

现需动态改变子报表srpt的记录源,使得控件Child0的子报表的记录源为查询:select 颜色 where 名称="苹果",控件Child1的子报表的记录源为查询:select 颜色 where 名称="香蕉"。这样在主报表mrpt通过控件Child0和Child1可以同时看到显示“红色”和“黄色”,应该如何实现?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2012-7-2 18:44:01 | 只看该作者
查询写错了,应该是:select 颜色 from mdata where 名称="苹果"
3#
 楼主| 发表于 2012-7-4 10:53:46 | 只看该作者
在主报表中使用2个子报表控件来显示查询内容,其中2个子报表控件都链接到一个报表srpt上。

我的想法是希望通过更改报表srpt的记录源(SQL语句)来实现在2个子报表控件中显示不同的查询结果,或者使用筛选(filter),能达到目的就行。

我有一个初步想法,就是对报表srpt记录源的SQL语句参数化,将SQL改写为:select 颜色 from mdata where 名称=reports!mrpt!child0.tag,这样只需要更改子报表控件child0的tag属性就可以实现动态查询。

遗憾的是这样做对子报表控件child1毫无用处!因为在子报表控件child1中也是按child0.tag查询的,结果2个子报表控件显示的结果是一样的。

下面是一个错误的报表srpt记录源:
select 颜色 from mdata where 名称=parent.tag
虽然是错误的,但是却很好体现了我的想法,在child0中按child0.tag查询,在child1中按child1.tag查询,这样通过设置2个子报表控件的tag属性来实现显示不同的内容。

问题是,正确的该怎么做,求教?!
4#
 楼主| 发表于 2012-7-4 10:54:25 | 只看该作者
此问题的关键在于,我无法在子报表srpt中获得它的parent(child1或child0)。

经过我的测试,子报表srpt的parent居然是主报表mrpt,这是不能接受的,无益于解决问题。

不知道有什么办法能够准确知道子报表srpt的父容器(child1或child0)究竟是哪一个?

5#
发表于 2012-7-4 11:06:01 | 只看该作者
传例子吧,然后说明你要达到什么样子的结果!
6#
发表于 2012-7-4 11:18:18 | 只看该作者
学习学习
7#
 楼主| 发表于 2012-7-4 19:17:55 | 只看该作者
本帖最后由 lmj9401 于 2012-7-4 19:34 编辑

mdb文件:

说明:
1. access数据库中有表mdata、主报表mrpt和子报表srpt;mrpt的报表页眉区中有2个子报表控件Child0和Child1;srpt的报表页眉区有1个文本框控件Text0。
2. Child0和Child1的源对象都是“报表.srpt”;Child0的tag属性是“苹果”,Child1的tag属性是“香蕉”。
3. srpt的记录源是“SELECT 颜色 FROM mdata WHERE 名称=Reports!mrpt!child0.Tag”。
4. Text0的控件来源是“颜色”。

目的:在主报表的同一个页面上根据不同查询条件显示多个查询结果,由于子报表的记录源(SQL)仅查询条件不同,所以不考虑使用多个子报表分别实现这些查询。

期望实现:Child0的子报表执行查询“SELECT 颜色 FROM mdata WHERE 名称=Reports!mrpt!child0.Tag”,Child1的子报表执行查询“SELECT 颜色 FROM mdata WHERE 名称=Reports!mrpt!child1.Tag”。

期望结果:


另:如果Child0和Child1的源对象指定为SQL查询,可以很容易得到正确结果,遗憾的是无法对输出的数据格式化。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
8#
 楼主| 发表于 2012-7-4 19:30:52 | 只看该作者
本项目需要解决一个核心问题:如何在子报表中正确获得链接到该报表(即以该报表为数据源)的子报表控件的的名称。
9#
发表于 2012-7-4 21:13:05 | 只看该作者
楼主在开玩笑吧?怎么可能循环引用呢?
10#
 楼主| 发表于 2012-7-5 07:57:05 | 只看该作者
怎么可能循环引用呢,只是引用包含子报表的父控件(parent)而已。

实际上,子报表的parent在access中被指定为父报表(主报表),而并非容纳该子报表的控件。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-29 14:57 , Processed in 0.086726 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表