




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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 withwith 报表名.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).=.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 或 .printreportend with这样做的优点是报表设计时简单,调整方便、随意,只需更改一点代码,而不必为了一点点的修改而费神的在设计窗口调整半天。急- 原因找到了,灵感来自“vbman2003”的赋值! 处理办法:原来报表窗体中的DataSource选中的是“DE”,现在去掉,改用赋值的方法:SetmyRpt.DataSource=DE。测试结果:内存再也没递增了,而且查询出报表速度奇快!- 好象看过MSDN,一般情况下rpt关闭后会自动释放报表对象。 我想你的情况可能是二个,一是用了DE,不过这个只是推测,因为没有用过这个,或者是用法上有问题。二是你是在窗体相关事件中设置和绑定报表数据源的,个人认为更恰当的用法应该是放在DataReport_Initialize事件中。个人看法,不一定正确,只供参考。- 好建议!估计出报表的速度会大大提高。 我把代码交给搭档研究,还望多多指教!- 你这个CRAXDDRT.Application释放了么 还有这个CRAXDDRT.Report - 不要用DE,改用ADO吧,测试了一下,用ADO返回10000多条数据,反复打开,内存始终在404-407M之间(同时运行其它程序)。示例代码如下: 窗体上: PrivateSubcmdRptGroup_Click() DimrptAsNewRptGroup 显示分组报表 rpt.Show EndSub 报表代码: OptionExplicit DimcnAsADODB.Connection DimrsAsADODB.Recordset PrivateSubDataReport_Initialize() DimSqlAsString,strSqlAsString 连接数据库(Access) Setcn=NewADODB.Connection Withcn .Provider=MSDataShape.1 一定要这句 .OpenDataProvider=Microsoft.Jet.OLEDB.4.0;&_ DataSource=&App.Path&db1.mdb;&_ PersistSecurityInfo=False EndWith 设置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*FROMtb 打开查询记录集 strSql=SHAPE&Sql&_ ASmiCmdCOMPUTEsum(miCmd.iCode)asiCode,miCmdBY gp Setrs=NewADODB.Recordset rs.OpenstrSql,cn,adOpenStatic,adLockReadOnly SetMe.DataSource=rs EndSub PrivateSubDataReport_QueryClose(CancelAsInteger,CloseModeAsInteger) Ifrs.State=adStateOpenThenrs.Close Ifcn.State=adStateOpenThencn.Close Setrs=Nothing Setcn=Nothing EndSub - . myRpt.Caption=strDRPName myRpt.Show1 SetmyRpt=Nothing PrivateSubDataReport_QueryClose(CancelAsInteger,CloseModeAsInteger) SetdrpGas_Money=Nothing DE.CT.Close SetDE=Nothing EndSub 代码修改后测试结果: 第一次运行预览报表内存PF使用率924MB 第二次973MB 第三次0.99GB 关闭程序(VB工程还开着)PF使用率降到826MB 毫无进展啊!国庆期间的疑难问题啊! - dimrptasnewdrpGas_Money . rpt.show1 setrpt=nothing- 报表的数据环境=nothing 报表窗口drpGas_Money也关闭了 内存还是释放不掉。每运行一次增加约50M内存消耗,end后才释放。- dimrptasnewdrpGas_Money . rpt.show setrpt=nothing 在drpGas_Money的Form_Terminate里面把你定义的所有object都=nothing 诸如此类 CRAXDDRT.Application CRAXDDRT.report ADODB.Connection - 内存还是没有释放!- 1、生成EXE问题依旧。(是用户先发现内存溢出的) 2、 dimrptasnewdrpGas_Money . rpt.show PrivateSubDataReport_QueryClose(CancelAsInteger,CloseModeAsInteger) SetdrpGas_Money=Nothing SetDE=Nothing EndSub - 这样试试: 先 dimrptasnewdrpGas_Money rpt.show 再在datareport_initialize()事件中绑定数据 最后在DataReport_QueryClose中释放报表对象 - 试一下NEW: dimrptasnewdrpGas_Money rpt.show 关闭报表时释放对象 PrivateSubDataReport_QueryClose(CancelAsInteger,CloseModeAsInteger) SetdrpGas_Money=Nothing Endsub 手边没有VB,测试不了。- 你生成EXE后看看有没这样的情况.- SetDE=Nothing DE.CT.ConnectionString=strCnn DE.Commands(gas_money).CommandText=SELECT*FROMChargeArreWHERE. 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,而且数据量不是很大,没有发现楼主的问题- 测试结果: setdataenvironment=nothing(数据环境) setmyRpt_money=nothing(报表) 已占用的内存没有减少,继续打开报表内存依旧在递增(XP任务管理器中的PF使用率显示结果) 看来要从VB清理内存着手了。- 在所有有关的事件里面 SetyouRptName=Nothing- 没遇见过这样的情况,试试: PrivateSubDataReport_QueryClose(CancelAsInteger,CloseModeAsInteger) SetyouRptName=Nothing EndSub- 考虑把rs关闭掉,再释放掉。- 使用Data Report打印查询结果-vb教程点击: 发布日期:2007-4-19 15:35:21 进入论坛 P 如果我们想把查询结果打印出来,那么我们经常用到Data Report,在这里我说的是直接用记录集rs给Data Report设数据源。为了快速将查询结果中的字段加入到Data Report,我们先来建一个DataEnvironment1,设置好DataEnvironment1中的Connection1的连接,然后在DataEnvironment1中的Connection1中右键添加子命令Command1,在Command1上右键,属性,选择SQL语句,将我们的查询语句写进去,确定,完毕后就可以看到我们希望显示的字段了。如果需要,可以添加多个子命令。然后新建一个DataReport1,点住DataEnvironment1中的Command1不放,直接拖到DataReport1中的细节区,然后再根据需要调整各字段位置就行了。注意要将细节区中的各个textbox的DataMember置空。然后在程序里面写代码就可以了。如Dim rsdr As New ADODB.RecordsetSet rsdr = Conn.Execute(sqlall) Set drqueryall.DataSource = rsdrdrqueryall.ShowVisual Basic通用报表设计小结/school 2005-10-08 10:39:32 来源: 天极网文章导读本文对vb设计报表的方法作了一个小结,大家都知道,在VB平台下制作报表大致有两种选择:使用VB自带的Data Report控件和借助第三方软件。其中第三方软件比较著名的就是MS Excel和Seagate公司的CrystalReporter,以下就这三个方案进行详细的讨论。1. Data Report控件11 Data Report控件使用方法由于是VB自带的控件,所以使用相对比较方便。使用方法是:首先在工程菜单下面选择添加Data report选项,这样Data Report控件就选入到了应用程序。使用Data report的情况大多数采用数据绑定的模式,也就是将此控件与数据库的数据表绑定起来以便可以不用编写代码就轻松完成报表的设计。要使用数据绑定就必须要指定数据源,这里的数据源不是数据控件而是数据环境(Data Environment),选择工程菜单下面选择添加Data Environment选项就可以将数据环境添加进应用程序中。数据环境有两个重要的属性:Connection 和Command属性,前者是连接指定的数据库,后者连接指定的数据表,一旦这两者都设置成功之后,就可以把数据环境作为数据源了。只需要把Data report的DataSource属性设置为前面的数据环境对象以及把DataMember设置为数据环境对象的Command对象即可。12 Data Report控件界面元素完成了Data report控件的数据绑定工作之后就可以直接控制报表的制作与显示了。这里首先熟悉一下Data report控件的显示界面:Data report控件一共有5个区组成,分别是报表头、页面头、细节区、页面注脚和报表注脚。报表头和报表注脚是用分别用于整个报表的最上部和最下部,它们将出现于整个报表的每一页,可以放置一些报表名称,时间之类的固定文本;页面头和页面注脚只能出现在当前页的最上部和最下部,也就是说它只能出现在当前页中,不出现在其他页面中,可以放置随页面变化的一些量比如页码等;而细节区就是用来进行实际显示的区域,它是我们最为关心的区域,通过在此区域内放置显示控件可以控制报表的实际显示输出。这里介绍一下放置文本框控件的使用方法,其实在绑定情况下只需要设置其DataMember和Datafield即可,前者用来指定数据表,可以设置为前面数据环境对象的Command对象,后者是指定数据段,即绑定的数据库的指定字段。这样不需要编写任何代码就可以实现报表的显示工作。13 Data Report控件的打印功能对于报表的打印可以直接使用Data report自带的打印功能,即可以实现简易的报表打印。不过为了实现比较复杂的打印功能,也可以通过程序控制的方法来进行。这里只是给出一个实现思路:首先需要制作一个按钮控件来显示打印设置的窗口,通过这个窗口用户可以设置打印的相关的参数,然后在实现打印的子模块中使用VB内嵌的printer对象来实现真实的打印,该对象能够对打印的当前位置进行定位,而且对打印的字体等参数进行控制,所以结合打印设置窗口可以实现类似于word里面的打印功能。2MS Excel说起报表设计应用程序,无意微软的Excel是一支独秀,MS Excel就是用来进行表格和报表设计用的应用程序,它具有优秀的方格控制和宏代码定制功能。所以如果在设计自己的应用程序的时候能够结合到Excel的话,那么你的应用程序就应该是相当的完善了,因为无论是编辑还是打印功能,Excel都提供了很完美的解决方案,所以你的应用程序所要做的事情就是实现程序和Excel通讯即可。事实上,可以使用VBscript可以将VB与Excel两者连接起来。以下就简要介绍在VB下开发基于Excel的编程思路。在VB中处理Excel的对象大致分为五个:Application对象、WorkBook对象、WorkSheet对象、Range对象以及Cell对象。它们的功能分别如下:Application-用来指代整个应用程序。WorkBook-表示工作簿对象WorkSheet-表示工作表对象,注意,一个工作簿可以包含多个工作表,它们就类似于多文档中的框架窗口和里面的单个视图一样。Range-表示工作表中的某个区域范围对象,特殊情况下也可以只代表一个Cell。Cell-表示特定工作表的一个单元格对象。这个对象的使用频率是最高的。清楚了以上的五个对象的应用范围,那么使用它们就很简单了,不过在使用这些对象之前,首先需要对它们进行声明。方法是在工程的引用对话框之下选择Microsoft Excel9.0 Object Library,这样就将整个Excel对象库就引入到程序中来了。下面举一个示例,其实现的功能是打开一个工作簿。Function OpenBook(strFilePath As String) As Boolean This procedure checks to see if the workbook specified in the strFilePath argument is open. If it is open, the workbook is activated. If it is not open, the procedure opens it.Dim wkbCurrent As Excel.WorkbookDim strBookName As StringOn Error GoTo OpenBook_Err Determine the name portion of the strFilePath argument.strBookName = NameFromPath(strFilePath)If Len(strBookName) = 0 Then Exit FunctionIf Workbooks.Count 0 ThenFor Each wkbCurrent In WorkbooksIf UCase$(wkbCurrent.Name) = UCase$(strBookName) ThenwkbCurrent.ActivateExit FunctionEnd IfNext wkbCurrentEnd IfWorkbooks.Open strBookNameOpenBook = True OpenBook_End:Exit FunctionOpenBook_Err:OpenBook = FalseResume OpenBook_EndEnd Function3Crystal Reporter(水晶报表)做为一个优秀的报表软件,水晶报表是实际应用中最多的方案。在这一节里主要介绍一下水晶报表的定制和显示,打印功能的实现。首先要区分Crystal Reports插件程序和Crystal Reports控件。前者主要用来创建报表模板,后者主要是用来在程序中显示和打印报表,这两者的分工决定了它们程序中的功能的不同。其中Crystal Reports的插件程序可以从Seagate公司的官方网站上下载最新的测试版本。31 Crystal Reports插件程序的使用选择外接程序菜单的报表设计器选项,则VB将执行Crystal Reports Pro插件应用程序。在Crystal Reports Pro里选择新建报表图标,可以选择8标准模板和一个自定义的模板来开始报表工程。整个水晶报表的使用跟第一节的Data Report的使用很类似。首先需要给报表选择数据源,(即数据库),然后就可以在报表中添加、删除、修改字段以及为记录分组,可以利用水晶报表创建很多具有自定义风格的报表。由于本身Crystal Reports插件程序就是一个功能强大的报表设计软件,这里就不能一一的讲解了,有兴趣可以参考程序自带的帮助文档。32 Crystal Reports控件的背景知识Crystal Reports Pro还提供一个报表生成模块,该模块可以连接到并访问VB应用程序,VB程序员不需花费大量时间写自己的代码就可再应用程序中添加复杂的报表生成及输出功能。Crystal Reports引擎是一个动态链接库,它可以使应用程序访问并具有同Crystal Reports 一样强大的报表输出功能。应用程序是通过Crys
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 三校生高考第一次模拟护理试题(附答案)
- 初级社会工作者综合能力测试题(带答案)
- 生态银行面试题目及答案
- 综合复习与测试教学设计-2025-2026学年初中音乐人教版八年级下册-人教版
- 9.1.1 平面直角坐标系的概念说课稿 2024-2025学年人教版数学七年级下册
- 解除终止劳动课件
- 朗童教育心脑速算课件
- 2025年传染病培训试卷及答案
- 解剖学课件教学课件
- 2025年职业暴露试题及答案
- 2023年浙江省金华婺城区新闻传媒中心诚聘合同制融媒体采编人员高频考点题库(共500题含答案解析)模拟练习试卷
- 世界社会主义五百年
- IVF实验室质量控制与质量保障
- 《红楼梦》重点情节按回目梳理修改版汇总
- GB/T 2820.4-2009往复式内燃机驱动的交流发电机组第4部分:控制装置和开关装置
- GB/T 13762-2009土工合成材料土工布及土工布有关产品单位面积质量的测定方法
- 生活离不开规则观课报告
- 石灰石-石膏湿法脱硫化学分析课件
- 个人房地产抵押合同书
- 医院零星维修管理制度及零星维修审批单
- 住院医师规范化培训申请表
评论
0/150
提交评论