没有合适的资源?快使用搜索试试~ 我知道了~
VB数据报表datareport[整理].pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
37 浏览量
2021-10-12
23:56:06
上传
评论
收藏 1.39MB PDF 举报
温馨提示
VB数据报表datareport[整理].pdf
资源推荐
资源详情
资源评论












vb6 中用 data report 做报表
我不是 vb 熟练工,最近刚刚用 vb 做完一个程序,其中控制部分没费太大周折,倒是报表部分颇让我费了一翻
脑筋。在网上找了半天, 也没找到关于 vb6 的 datareport 的详细介绍, 于是想借鉴 " 前辈 " 们的经验,用 crystalreport
或 excel ,感觉也不省劲,于是决定回头再去 " 啃"datareport ,别说,还真让有所收获,下面就简单的介绍一下我的
体会,希望对大家能有所帮助。
首先介绍一下 data report 对象的几个常用属性。一是 datasource ,用于设置一个数据源,通过该数据源,数
据使用者被绑定到一个数据库;二是 datamember,从 datasource 提供的几个数据成员中设置一个特定的数据成员;
三是 leftmargin 、rightmargin 、topmargin 、bottommargin 等,用于指定报表的左右上下的页边距; 四是 sections ,
即 datareport 的报表标头、页标头、细节、页脚注、报表脚注 5 个区域,如果加上分组 ( 可以有多层分组 ) ,则增加
一对区域,即分组标头、分组脚注。其中 datasource 一般是一个数据环境或是 adodb.connection 类型的变量,而
datamember 则对应数据环境中的 command或是 adodb.recordset 类型的变量,推荐使用数据环境及 command,页边
界大家肯定都很清楚,下面我主要介绍以下 sections ,这也是 datareport 的精髓所在。
sections 是一个集合,您可以为每一个 section 指定名称,也可以用其缺省的索引,从上到下依次为 1、2…。
每个 section 均有 height 和 visible 属性,您可以在一定条件下使一个 section 不可见。在 section 中可以放置各
种报表控件,其中 rptlabel 、rptimage 、rptshape 和 rptline 可以放在任意的 section 中,用于输出各种文字、图
形及表格线; rpttextbox 只能放在细节中,一般用于绑定输出 datamemeber 提供的数据字段; rptfunction 只能被
放置在分组注脚中 , 用于输出使用各种内置函数计算出的合计、最大值、最小值、平均值、记数等等。上述报表控件
中常用公共属性有用于控制位置及高度宽度的 top 、left 、height 、width 和控制可见性的 visible ;其中 rpttextbox
还有 datafield 、datamember、dataformat 及 font 属性;其他属性不再多说。
然后介绍一下我的使用经验。一是对想控制的报表控件按类型有规律的命名;二是用 rptshape 的矩形框做表格
线框,比用 rptline 画框省事多了,只有斜线才使用 rptline ;三是报表标题及报表中的表头文字、日期及页码用
rptlabel ,其中 caption 属性支持转义字符, %d为长格式日期, %d为短格式日期, %p为总页数, %p为当前页码;
四是对固定报表在设计窗口直接将报表控件摆放到位,对于活报表,应首先考虑报表最大的情形,将足够的控件分
别放置在不同区域,位置大小可以不必深究,然后在报表输出前用 vba 代码对所有控件的属性进行调整,包括位置、
高度、宽度、字体、对齐方式、显示格式、可见性等等,相应的对 section 也应根据情况调整其高度和可见性。
最后用一个实例模板来说明其使用方法。
连接数据库
with 数据环境 .rscommand 名
if .state = adstateopen then .close
.source = sql 语句
.open 打开想输出的数据库数据项以便输出
end with
with 报表名
.datasource= 数据环境
.datamember=command名 这两行也可固定设好而不必每次设置
设置页表头部分 (rpttlabel …为报表控件名 )
.sections(2).controls("rptlabelpage").caption = " 共%p页第 %p页"
.sections(2).controls("rptlabeldate").caption = " 打印日期: %d"
.sections(3).controls("rptlabel1").left= …
…
设置细节部分 (rptshapex 、rpttextboxx 为报表控件名 )
.sections(3).controls("rptshape1").left= …
.sections(3).controls("rptshape1").top= …

.sections(3).controls("rptshape1").height= …
.sections(3).controls("rptshape1").width= …
.sections(3).controls("rpttextbox1").datamember=command 名
.sections(3).controls("rpttextbox1").datafield= 字段 1
.sections(3).controls("rpttextbox1").font.name= …
…
.sections(3).controls("rptshapen").visible=false
.sections(3).controls("rpttextboxn").visible=false
…
. sections(3).height= 计算出的或固定的细节高度
动态调整报表标题 (rptlabeltitle 为报表标签控件名 )
.sections(2). controls("rptlabeltitle").left= …
…
.sections(2). controls("rptlabeltitle").alignment= …
…
调整完毕后
.show 或 .printreport
end with
这样做的优点是报表设计时简单,调整方便、随意,只需更改一点代码,而不必为了一点点的修改而费神的在
设计窗口调整半天。
急
------------------------------------------------------------------------------------
原因找到了,灵感来自 “vbman2003”的赋值!
处理办法:原来报表窗体中的 DataSource 选中的是 “DE”,现在去掉,改用赋值的方法: Set myRpt.DataSource = DE 。
测试结果:内存再也没递增了,而且查询出报表速度奇快!
------------------------------------------------------------------------------------
好象看过 MSDN ,,一般情况下 rpt 关闭后会自动释放报表对象。
我想你的情况可能是二个,一是用了 DE,不过这个只是推测,因为没有用过这个,或者是用法上有问题。二是你是
在窗体相关事件中设置和绑定报表数据源的,个人认为更恰当的用法应该是放在 DataReport_Initialize 事件中。个人
看法,不一定正确,只供参考。
------------------------------------------------------------------------------------
好建议!估计出报表的速度会大大提高。
我把代码交给搭档研究,还望多多指教!
------------------------------------------------------------------------------------
你这个 CRAXDDRT.Application 释放了么
还有这个 CRAXDDRT. Report
------------------------------------------------------------------------------------
不要用 DE,改用 ADO 吧,测试了一下,用 ADO 返回 10000 多条数据,反复打开,内存始终在 404-407M 之间(同
时运行其它程序) 。示例代码如下: :

窗体上:
Private Sub cmdRptGroup_Click()
Dim rpt As New RptGroup
'显示分组报表
rpt.Show
End Sub
报表代码:
Option Explicit
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Private Sub DataReport_Initialize()
Dim Sql As String, strSql As String
'连接数据库 (Access)
Set cn = New ADODB.Connection
With cn
.Provider = "MSDataShape.1" '一定要这句
.Open " Data Provider=Microsoft.Jet.OLEDB.4.0 ;" & _
" Data Source=" & App.Path & "\db1.mdb;" & _
"Persist Security Info=False"
End With
'设置 RptTextBox 控件属性
'分组标头,注意不要设置其 DataMember 属性
Me.Sections("Section6").Controls("text1").DataField = "gp"
'细节标头 ,其中 “ miCmd”是分组名称
Me.Sections("Section1").Controls("text2").DataField = "iName"
Me.Sections("Section1").Controls("text2").DataMember = "miCmd"
Me.Sections("Section1").Controls("text3").DataField = "iCode"
Me.Sections("Section1").Controls("text3").DataMember = "miCmd"
Me.Sections("Section1").Controls("text4").DataField = "gp"
'RptGroup.Sections("Section7").Controls("text5").DataMember = "miCmd"
Me.Sections("Section7").Controls("text5").DataField = "iCode" '分组合计
'查询表:
Sql = "SELECT * FROM tb "
'打开查询记录集
strSql = "SHAPE {" & Sql & " } " & _
"AS miCmd COMPUTE sum(miCmd.iCode) as iCode,miCmd BY 'gp ' "
Set rs = New ADODB.Recordset
rs.Open strSql, cn, adOpenStatic, adLockReadOnly
剩余11页未读,继续阅读
资源评论


cyh76339129
- 粉丝: 0
- 资源: 14万+

下载权益

C知道特权

VIP文章

课程特权

开通VIP
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


会员权益专享
安全验证
文档复制为VIP权益,开通VIP直接复制
