设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: lmj9401
打印 上一主题 下一主题

[报表] access子报表难题

[复制链接]
11#
 楼主| 发表于 2012-7-5 08:07:42 | 只看该作者
绝对不可能构成循环引用,只是引用子报表的parent控件(包含子报表的控件)而已。

access子报表的实际parent是父报表,而不是包含该报表的控件,这是一个非常奇怪的设定。
12#
发表于 2012-7-5 23:19:02 | 只看该作者
lmj9401 发表于 2012-7-5 08:07
绝对不可能构成循环引用,只是引用子报表的parent控件(包含子报表的控件)而已。

access子报表的实际pa ...

新建一个子报表,指定数据源就好了。效果如下:

不过,恕我愚钝,我实在看不出这样的嵌套报表的实际意义在哪里。
1、记录较多的时候,得根据记录不断地创建子报表,这听起来不像是什么好事。
2、从效果上来说,普通报表稍稍格式化一下完全可以实现。
3、如果想舍近求远的话,也可以通过ADO读取记录集,逐条写入子报表的控件中。

本帖子中包含更多资源

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

x
13#
 楼主| 发表于 2012-7-6 14:54:33 | 只看该作者
使用多个子报表,当然可以实现,也就没有前面的问题了。我们讨论的其实是一个技术问题,并非项目本身。

如果在同一报表页面上要显示几个查询结果,就要创建几个子报表,而这些报表的仅查询条件不同,显然不是一个好方案。例如,一个页面上要根据100个不同的查询条件显示100个结果,就要定制100个子报表,这多少就有些“傻气”了。

access中未使用过ado,不敢多说,“舍近求远”这个说法我还是比较赞同。

“从效果上来说,普通报表稍稍格式化一下完全可以实现”,愿闻其详。

14#
发表于 2012-7-8 05:14:15 | 只看该作者
lmj9401 发表于 2012-7-6 14:54
使用多个子报表,当然可以实现,也就没有前面的问题了。我们讨论的其实是一个技术问题,并非项目本身。

...

这是同一个字段的不同记录,即便按向导完成也是没问题的(ADO就显得有些绕了)。
就子报表而言,个人认为不必多层嵌套(尽管可以嵌套三~四层)。如果需要显示统计方面的,很多域函数是可以实现的,又或者在子报表页脚处设置文本框计算好然后再引用到主报表上都行得通。
15#
 楼主| 发表于 2012-7-8 11:38:09 | 只看该作者
感谢,按常规做法最大的问题就是难以实现自由的数据格式化。

点击这里给我发消息

16#
发表于 2012-7-8 21:13:55 | 只看该作者
子报表是可以知道自己在主报表的哪个子报表控件中的,子窗体也一样,这个以前研究过,
你的例子中在子报表的打开事件中输入以下代码即可:
  1.     Dim ctr As Control

  2.     For Each ctr In Me.Parent.Controls
  3.         If ctr.ControlType = acSubform Then
  4.             If ctr.SourceObject = "报表." & Me.Name Then
  5.                 If Nz(ctr.Report.RecordSource) = "" Then
  6.                     Me.RecordSource = "SELECT 颜色 FROM mdata WHERE 名称='" & ctr.Tag & "'"
  7.                     Exit Sub
  8.                 End If
  9.             End If
  10.         End If
  11.     Next
复制代码
17#
 楼主| 发表于 2012-7-11 15:52:06 | 只看该作者
t小宝 发表于 2012-7-8 21:13
子报表是可以知道自己在主报表的哪个子报表控件中的,子窗体也一样,这个以前研究过,
你的例子中在子报表 ...

这个想法非常棒,但是我发现“Each ctr In Me.Parent.Controls”扫描控件的顺序一定要与子控件的初始化顺序一致才能成功。否则可能访问到一个还没有初始化的子报表控件,引用“ctr.Report.RecordSource”会失败,如图所示:

如果无法确定上述顺序,那么这段代码具有潜在的风险。

本帖子中包含更多资源

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

x

点击这里给我发消息

18#
发表于 2012-7-11 20:35:55 | 只看该作者
lmj9401 发表于 2012-7-11 15:52
这个想法非常棒,但是我发现“Each ctr In Me.Parent.Controls”扫描控件的顺序一定要与子控件的初始化顺 ...

忘记复制一行错误处理的代码:
On Error Resume Next

前面加上这句就没问题了。
19#
 楼主| 发表于 2012-7-11 21:57:47 | 只看该作者
感谢t小宝,问题已解决!{:soso_e181:}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-29 02:59 , Processed in 0.086995 second(s), 31 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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