VB数据报表data report.docx

上传人:b****6 文档编号:8869844 上传时间:2023-02-02 格式:DOCX 页数:14 大小:93.42KB
下载 相关 举报
VB数据报表data report.docx_第1页
第1页 / 共14页
VB数据报表data report.docx_第2页
第2页 / 共14页
VB数据报表data report.docx_第3页
第3页 / 共14页
VB数据报表data report.docx_第4页
第4页 / 共14页
VB数据报表data report.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

VB数据报表data report.docx

《VB数据报表data report.docx》由会员分享,可在线阅读,更多相关《VB数据报表data report.docx(14页珍藏版)》请在冰豆网上搜索。

VB数据报表data report.docx

VB数据报表datareport

vb6中用datareport做报表

我不是vb熟练工,最近刚刚用vb做完一个程序,其中控制部分没费太大周折,倒是报表部分颇让我费了一翻脑筋。

在网上找了半天,也没找到关于vb6的datareport的详细介绍,于是想借鉴"前辈"们的经验,用crystalreport或excel,感觉也不省劲,于是决定回头再去"啃"datareport,别说,还真让有所收获,下面就简单的介绍一下我的体会,希望对大家能有所帮助。

  首先介绍一下datareport对象的几个常用属性。

一是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=adstateopenthen.close

.source=sql语句

.open打开想输出的数据库数据项以便输出

endwith

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

endwith

  这样做的优点是报表设计时简单,调整方便、随意,只需更改一点代码,而不必为了一点点的修改而费神的在设计窗口调整半天。

 

------------------------------------------------------------------------------------

原因找到了,灵感来自“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

    Set Me.DataSource = rs

     

End Sub

Private Sub DataReport_QueryClose(Cancel As Integer, CloseMode As Integer)

    If rs.State = adStateOpen Then rs.Close

    If cn.State = adStateOpen Then cn.Close

    Set rs = Nothing

    Set cn = Nothing

End Sub

------------------------------------------------------------------------------------

..................                

myRpt.Caption = strDRPName

myRpt.Show 1

Set myRpt = Nothing

Private Sub DataReport_QueryClose(Cancel As Integer, CloseMode As Integer)

Set drpGas_Money = Nothing

DE.CT.Close

Set DE = Nothing

End Sub

代码修改后测试结果:

第一次运行预览报表内存PF使用率924MB

第二次                        973MB

第三次                        0.99GB

关闭程序(VB工程还开着)PF使用率降到826MB

毫无进展啊!

国庆期间的疑难问题啊!

------------------------------------------------------------------------------------

dim rpt as new drpGas_Money  

...................................

rpt.show 1

set rpt=nothing 

------------------------------------------------------------------------------------

报表的数据环境=nothing

报表窗口drpGas_Money也关闭了

内存还是释放不掉。

每运行一次增加约50M内存消耗,end后才释放。

------------------------------------------------------------------------------------

dim rpt as new drpGas_Money  

...................................

rpt.show 

set rpt=nothing

 

在drpGas_Money的Form_Terminate里面把你定义的所有object都=nothing 

诸如此类

 CRAXDDRT.Application

 CRAXDDRT.report

 ADODB.Connection

------------------------------------------------------------------------------------

内存还是没有释放!

------------------------------------------------------------------------------------

1、生成EXE问题依旧。

(是用户先发现内存溢出的)

2、

dim rpt as new drpGas_Money  

...................................

rpt.show 

 

Private Sub DataReport_QueryClose(Cancel As Integer, CloseMode As Integer)

Set drpGas_Money = Nothing

Set DE = Nothing

End Sub

------------------------------------------------------------------------------------

这样试试:

dim rpt as new drpGas_Money 

rpt.show 

再在datareport_initialize()事件中绑定数据

最后在DataReport_QueryClose中释放报表对象

------------------------------------------------------------------------------------

试一下NEW:

 dim rpt as new drpGas_Money

 rpt.show

关闭报表时释放对象

Private Sub DataReport_QueryClose(Cancel As Integer, CloseMode As Integer) 

  Set drpGas_Money = Nothing 

End sub

手边没有VB,测试不了。

------------------------------------------------------------------------------------

你生成EXE后看看有没这样的情况.......

------------------------------------------------------------------------------------

    Set DE = Nothing

    DE.CT.ConnectionString = strCnn

    DE.Commands("gas_money").CommandText = "SELECT * FROM ChargeArre WHERE ........" 

    strDRPName = "普通用户管道燃气抄度报表" & Rep_pay

    drpGas_Money.Sections

(2).Controls("LTD_Name").Caption = Bran_ch

    drpGas_Money.Sections

(2).Controls("Report_Name").Caption =strDRPName                

    drpGas_Money.Caption = strDRPName

    drpGas_Money.Show

监测结果:

从“drpGas_Money.Sections

(2).Controls("LTD_Name").Caption = Bran_ch

”开始内存占有率开始升高,到“drpGas_Money.Show”达到本次最高。

关闭报表窗口drpGas_Money后内存占有率没降低,如果再次查询预览,内存占有率继续升高,.........多次之后内存溢出!

郁闷啊,找不到解决办法。

现在暂时只能让用户每次预览报表的时候都监控内存占有率,快到的时候退出软件再进入。

------------------------------------------------------------------------------------

用了数据环境?

这个就不清楚了,DataReport很少使用,用的时候都是用ADO连接,不用DE,而且数据量不是很大,没有发现楼主的问题

------------------------------------------------------------------------------------

测试结果:

set data environment=nothing  (数据环境)

set myRpt_money=nothing       (报表)

已占用的内存没有减少,继续打开报表内存依旧在递增(XP任务管理器中的PF使用率显示结果)

看来要从VB清理内存着手了。

------------------------------------------------------------------------------------

在所有有关的 事件里面

Set youRptName = Nothing 

------------------------------------------------------------------------------------

没遇见过这样的情况,试试:

Private Sub DataReport_QueryClose(Cancel As Integer, CloseMode As Integer)

  Set youRptName = Nothing

End Sub

------------------------------------------------------------------------------------

考虑把rs关闭掉,再释放掉。

------------------------------------------------------------------------------------

使用DataReport打印查询结果-vb教程

点击:

  发布日期:

2007-4-1915:

35:

21  进入论坛

P>

   如果我们想把查询结果打印出来,那么我们经常用到DataReport,在这里我说的是直接用记录集rs给DataReport设数据源。

为了快速将查询结果中的字段加入到DataReport,我们先来建一个DataEnvironment1,设置好DataEnvironment1中的Connection1的连接,然后在DataEnvironment1中的Connection1中右键添加子命令Command1,在Command1上右键,属性,选择SQL语句,将我们的查询语句写进去,确定,完毕后就可以看到我们希望显示的字段了。

如果需要,可以添加多个子命令。

然后新建一个DataReport1,点住DataEnvironment1中的Command1不放,直接拖到DataReport1中的细节区,然后再根据需要调整各字段位置就行了。

注意要将细节区中的各个textbox的DataMember置空。

然后在程序里面写代码就可以了。

如DimrsdrAsNewADODB.Recordset

        Setrsdr=Conn.Execute(sqlall)

       Setdrqueryall.DataSource=rsdr

        drqueryall.Show

 

VisualBasic通用报表设计小结

·2005-10-0810:

39:

32·来源:

天极网

[文章导读]本文对vb设计报表的方法作了一个小结,大家都知道,在VB平台下制作报表大致有两种选择:

使用VB自带的DataReport控件和借助第三方软件。

其中第三方软件比较著名的就是MSExcel和Seagate公司的Cr

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1