资源描述
&第7章 Visual Basic 本幸学习要点 了斛数据报表设计器的作用、特性和结构 掌握报表控件的应用方法 掌握报表设计的方法 掌握分组报表的设计方法 掌握动忠报表的设计方法,数据报表设计器特性1.对字段的拖放功能2.Toolbox控件3.打印预览4.打印报表5.文件导出6 导出模板7 异步操作添加数据报表设计器到工程访问数据报表设计器前,必须先在Visual Basic中引 用它,单击“工程一部件”菜单项,弹出“部件”对 话柩,选择“设计器”选 项卡(如图所示)中选中“Data Report”对象,然后 单击“应用”按钮,此时,数据报表设计器添加到工 程中数据报表设计器的结构报表设计器的 基本结构:Data Report对 象、Section对象 和DataReport控件DataReport 对象Section 对象DataReport 控件Section对象的结构1.报表标头2.页标头3.分组标头/注脚4.细节5.页注脚6.报表注脚特殊控件的含义屈人控件曲教代玛当前页码(U)Current Page Number%p总页数(P)Total Number of Pages%P当前日期Q)(短格式)Current Date(Short Format)%d当前日期(A)(长格式)Current Date(Long Format)%D当前时间(M)(短格式)Current Time(Short Format)%t当前时间(E)(长格式)Current Time(Long Format)%T报表标题(T)Report Titl e%i,报表控件数据报表控件工具笳中的控件有:Label 控件 CRptLabelJ、TextBox 控件 CRptTextBoxJ、Image 控件 CRptlmageJ、Line 控件 CRptLineJ、Shape 控件 CRptShapeJ、Function 控件 CRptFunctionJ。要向数据报表添一个Function控件,按如下步骤执行:C1J在“数据报表工具箱”里单击RptFunction控件;(2)在“分组注脚”的空间绘制RptFunction控件;(3)设置RptFunction控件的常用属性,各属性含义如表:属性说明DataMember指定使用哪一个Command对象DataFiel d绑定的字段名Name控件名称Al ignment对齐方式,有3个取值DataFormat数据显示的格式(4)控件的“FunctionType”属性决定将对“数据字段”中的数据进行什么操作。缺省 情况下,这一属性设置为O-RptFuncSum,以 合计数据的值。其它函教包括:Average,Minimum、Maximum、Row Count、STD Dev(标准偏差)和 Value Count。Function控件包含的函数如表:Functi onType属性取值取值蜜教描述0rptFuncSum缺省设置,用来合计一个字段的值1rptFuncAve显示一个字段的平均值2rptFuncMin显示一个字段的最小值3rptFuncMax显示一个字段的最大值4rptFuncRCnt显示字段中记录的行教5rptFuncVCnt显示字段中非空值的记录教6rptFuncSDEV显示一列数室的标准偏差。7rptFuncSERR显示一列数室的标准错误。:“-报表“安全检查情况一览表 CDataReport4J 的数据源是Command6对 象,展开后如图所示。在图中,Command6对 象中的字段都是以汉字 的形式显示出来,并不 是数据表CjcxxJ的字段一口|x|3M图画31团以旦|固 区图 盲 DataEnvironmentlH%Connection!国Command 1分组使用Command 13组 田国Commands分阻使用Commands)狙 田国Command4分组使用Commanddjy组 国Commands分蛆使用Commands夕蛆 田国Command2分组使用Command2f组 臼国 Commandsy 工程 1-DataEnvironment 1(DataEnvironment)检查记录:m项目名称 一性的.同时间,国地点:同问题I回扣分;m说明字段:adVarChar名O这是因为为了方便下一步的报 表设计将它们的属性进行了 修改,方法是通过依次选中 各字段,单击鼠标右键,出 现“属性”菜单项,单击“属性”菜单项,弹出的“字段属性”对话柩内,在“通用”选项卡内修改了属性“字段标题”,如图。依 次修改各个字段标题,为设字段屈性计报表做准备。通用字段名称:检查记录号字段映射标题(p):控件C):细节数据类型:adVarChar大小:6 规模:0 精度:0确定|取消|应用|帮助|要创建一个新的数据报表,按如下步骤执行:C1J单击“工程-添加Data Report”菜单项,Visual Basic将把它添 加利当前工程中。如果数据报表设计器不在“工程”莱事 上,单击“部件”菜单项,在“设计器”选项卡上单击“Data Report”把设计器添加到菜单上。(2)设置 DataReport对象的属性,如图所示属性设置值NameDataReport4Caption安全检查情况一览表DataSourceDataEnvironmentlDataMemberCommand6设置属性后的报表对象DataReport4如图。T)在数据报表设计器的空白处单击鼠标右键,从弹出的菜单 项中选择“检索结构”命令,弹出对话柩如图所示。C4J单击“是”按钮,更新了报表布局,如图所示。创建了报表对象DataReport4后,要进行其中控件的设计,设计 步骤如下:CU将数据环境 对象 DataEnvironmentl 的 Command6对象中的各个字 段依次拖曳到细节(Command6_Detail J 中,如图。每拖曳一个字段到报表 中都同时产生一个Labe】控件和一个TextBox控件o(2)上图的报表不能以表格的形式显示出来,需要 进行修改。将所有的Label控件都拖冤到页标头CPageHeaderJ 中,然后将Label控件和TextBox 控件的位置按要求排列,如图所示。Jl)利用rptLine控件为表格添加线条,使报表以表格的形式 显示。在各个Label控件和TextBox控件之间段上线条。(4)在DataReport4的报表标头 CReportHeaderJ 放置一个 Labe】控件,将其Caption属性设为“安全检查情况一览表”;然后单击Font属性的“.”,在弹出的“字体”对话柩里可以对字体、字形、大小和效果等进行设置;设置 Al ignment为2-rptJustifyCenter,使标题居中。(5)在DataReport4的报表标头CReportHeaderJ还可以放 置打印日期和时间,方法是:拖曳一个Labe】控件到报表标 头的右下侧,将其Caption属性设为“打印时间:%D1 然 后再拖曳一个Labe】控件到前一个Labe】控件的亲边,将其 Caption属性设为 T 然后调整两个Labe1控件的住置和 字体属性。C6J在页注脚CPageHeaderJ中可以放置页码,方法是:依次拖曳两个Labe】控件到页注脚的右下侧,分别设置 它们的Caption属性为“共P页”和“第p页”,然 后再调整两个Labe】控件的住置和字体属性。按上述步 骤设置完成的DataReport4报表如图。I创建Coniniand对象审组报表DataReportl O连接的数据源是Command4对象,创建的方法如下:fl J在 工程中打开数据环境对象DataEnvironmentl,在 Connection!对象里添加命令对 象Command4;(2)设置Command4对象的通用属性,如图所示。(3)设置Command4对象的分组字段“jshzhch”,其它字段为细节字段,如图所示。设置完属性的Command4对象在数据环境对象中的形式如图所示。y 工程 1-DataEnvironmentl(DataEnvironment),1!x|啕口I回留I x|回切断 回I团 同图德DataEnvironmentlS 冉 Connection 1图Command 1分蛆使用Command 1夕蛆 困 Commands 分蛆使用 Command3_蛆Command4 分犯使用 CommancKg犯H&摘要字段在Commands/蛆:国 jshzhch白-的细节字段在Command4 ryghxmcxm xbgj命令:Command4 基于Dbo,ryxx tabl e from Connection1J-创建了 Command4对象,接着创建数据报表对象,步骤如下:单击“工程一添加Data Report”菜单项,Visual Basic将 把它添加到当前工程中。(2)设置DataReport对象的属性,如表所示:属性设置值NameData Report!0Caption人员信息一览表DataSourceDataEnvironmentlDataMemberCommand4设置属性后的报表对象DataReportIO如图。(3)在数据报表设计器的左白处单击鼠标右键,从弹出的菜单项中选择“检索结构”命令,弹出 对话框如图所示。DataReportll用新的数据层次代替存在的报表布局吗?如果您选择“是”,当前的全部控件将被删除,并且全部自定义的区域和布局将被删除。是.IEHSC4J单击“是”按钮,更新了报表布局,如图。创报表对象DataReportl O后,要 进行其中控件的设计,设计步骤如 下:CU将数据环境对象 DataEnvironmentl 中“摘要字段 在Command4_分组”下的“jshzhch”字段拖曳到数据报表对 象DataReportIO中的“分组标头”里,同时产生一个Labe】控件和一 个TextBox控件。将Labe1控件拖曳 到数据报表对象DataReportIO中 的“页标头”里,将Labe】控件的 Caption设置为“技术职称”,根 据需要设置Font属性,如图(2)将“细节字段在Command个中需在报表DataReportl O 里显示的字段依次拖曳到数据报表对象DataReportl O中的“细节”里。每个字段同样生成一个Labe】控件和一个TextBox控件,将Labe1控件拖曳到数据报表对象DataReportl O中的“分组标头”里,设置它们的Caption属 性。然后将Labe】控件和TextBox控件的住置按要求排列,如列 在“数据报表工具箱”里拖曳一个rptShape控件到报表 DataReportl O的“细节”中,调整住置包围所有的TextBox 控件。利用rptLine控启,每个TextBox控件之间画上线。(4J 在DataReportl O的“报表标头”CReportHeaderJ 放置 一个Labe】控件,将其Caption属性设为“人员信息一览表”;然后单击Font属性的,在弹出的“字体”对话框里可以 对字体、字形、大小和效果等进行设置;设置Al ignment为2-rptJustifyCenter,使标题居中,如图“报表标头(ReportHeader)人员信息一览表打印时间加(5)在DataReportl O的“报表标头”CReportHeaderJ 还 可以放置打印日期和时间,图见下页。设置方法是:拖曳 一个Labe】控件到报表标头的右下侧,将其Caption属性设为“打印时间:”;然后单击报表标头的空白处,辞出菜单 项,如图所示,单击“插入控件一当前日期Q)(短格式)”,此时在报表标头里自动生成一个Labe】控件,其Caption属性 默认为“%d 用来显示当前系统日期;再单击“插入控 件一当前时间(M)(短格式)此时在报表标头里又生成一个 Labe】控件,其Caption属性默认为“%t 用来显示当前系 统时间;调整三个Labe】控件的住置和Font属性。总工程 1-DataReportIO(DataReport)-!X年人员信息一览表I Io-II,11 ,2,3i,4,1 5,16 171 S*1 Ql,IO,i,ll*i12口报表标头 CReportMeader)无法撤消Ctrl+Z人员信息一览表巴丁11粘贴也)全选(DCtrl+V插入控件(0删除分组标头/注脚(Q)插入分组标头/注脚(v显示报表标头/注脚(由V显示页标头/注脚(玲v显示网格 v显示标尺(B)v抓取到网格检索结构()清除结构 报表注脚(ReportFooter)分蛆注脚(C omm and4_iM_F o o t er)标签(D文本框 图像 线条 形状 函数(E)当前页码(U)总页数(E)当前日期(0)(短格式)当前日期(长格式)当前时间(短格式)当前时间(日(长格式)报表标题(I)whdhd匚 口mm:”id411(6)在“分组注脚”中可以显 示每组的总记录数,方法是:选择“数据报表工具箱”,单 击rptFunction控件,将其放置 在报表分组注脚中的右侧,将 其FunctionType的属性设置为:4-rptFuncRCnto然后再添加 两个rptLabe】控件,分别设置该组共计RCNT条记录它们的Caption属性为:“该组 共计”和“条记录”,如图所7j?oJ单击页注脚的空白处,在弹出的菜单项里单击“插入控件 一当前页码命令,此时在页注脚里自动生成一个Labe】控 件,其Caption属性默认为“%p 用来显示当前页码。8J在“报表注脚”中可以显示所有数据的总记录数,方法 是:选择“数据报表工具箱”,单击rptFunction控件,将其 放置在报表报表注脚中的右侧,将其FunctionType的属性设 置为:4-rptFuncRCnto然后再添加两个rptLabe】控件,分 别设置它们的Caption属性为:“总计”和“条记录”。根 据需要还可添加“总页码”控件,在弹出的菜单项里单击“插入控件一总页码”命令,此时在报表注脚里自动生成一 个Labe】控件,其Caption属性默认为“%P 用来显示报表的总页石 报表注脚 GieportFooter)总计RCNT|条记录按上述步骤设置完成的Data Report10报表如图所示。-!x忠工程 1-DataReportlO(DataReport)基使代码简提,将声明Connection对象和RecordSet对象的 语句都放在系统的模块对象“Modu】e2”中,执行方法如下。L 添加ADO对象 如果系统中没有ADO对象,就单击“工 程一引用”菜单项,在弹出的对话柩中选中ADO对象库Microsoft ActiveX Data Objects 2.0 l ibrary”,就可以在 程序中直接声明或创建AD。对象,如图。弓I用-project.vbp2d可用的引用(A):0 Visual Basic For Aool ications必 Visual Basic runtime objects and orocedures囱 Visual Basic obiects and procedures良qleAutQrnatiQn_浏览).v画氤嬴n*隗侧翻霞凝豳回蜀3 Microsoft Data Bindina Col fecthL.A 匚 tiYRXH Microsoft Data Formattina Obiect Library 6.0H Microsoft DAO 2.5/3.51 Comoatibil itv Library0 Microsoft Data Reoort Desianer v6.0H Microsoft Data Environment Instance 1.0回 Microsoft Internet Control sH Microsoft Data Source InterfacesZ IAS Hel oer COM Comoonent 1.0 Tvoe Library -TGG R A DTI 1 Prntnrnl 1 门 TI ihrnn/JI1)三rw)Public db As New ADODB.Connection Public rs As New ADODB.Recordset3弟4创建Connection对象由于在委录窗口中就开始连接数据埠,所以在空录 窗o frmLoginl的Load事件里创 建Connection对 象,如图所示创建RecordSet对象在“企业资质管理系统”中的通用查询窗口中,每 次查询完都允许用户单击 工具栏的“打印预览”或“打印按钮打印当前的 数据o例如查询“技术职 称”为“工程师”的那些 人员后,只打印查询结果 中的数据,如图。此时报表DataRepotIO的数据源发生了变化,尽管 报表格式不变,但打印的数据应该发生变化,所以 DataRepotIO对应的数据源“rs”要根据查询的结果 改变。在查询窗体的“查询”按钮里编写Click事件,根据查询的结果改变“rs”对应的记录集,代码如下:Private Sub cmdAppl y_Cl ick()Dim l s_sq!1 As StringDim l s_sq!2 As StringOn Error GoTo err2Set frs=New Recordsetff)pen sel ect*from cxb,db,adOpenStatic,adLockOptimisticIf frs.RecordCount=0 ThenExit SubEnd Iffrs.MoveFirstFor i=1 To frs.RecordCountl s_sql 1=l s_sq11&”&frs.Fiel ds(www)frs.MoveNextNextfrs.Cl oseSet frs=NothingJ-l fRight(l s_sql L2)=nndn Thenl s_sq!1=Left(l s_sql 1,Len(l s_sql l)-3)El sel s_sq!1=Left(l s_sql 1,Len(l s_sql l)-2)End IfSel ect Case sel cl ickCase 1l s_sq!2=sel ect*from qyjbxx whereCase 2l s_sq!2=sel ect*from ryxx where”Case 3Jl s_sq!2=sel ect*from sbxx where”Case 4l s_sq!2=sel ect*from sg where”Case 5l s_sq!2=sel ect*from jcxx where”End Sel ectgsql=where&l s_sq11Is_sql 2=Is_sql 2&Is_sql 1gsql l=&l s_sq11Jl-Jem,=New Recordset根据查询结果,打开记录集rs.Open ls_sql29 db9 adOpenKeyset,adLockOptimistic,adCmdTextrs.Requery将查询结果显示在DataGridl中,此时rs对应查询结果记录集Set Forml LDataCridl.DataSource=rsgrideForml l.StBarl.Panel s.Item(2)=共查询出”&rs.RecordCount&条记 录Exit Suberr2:MsgBox”错误,请给入合法数值!”&Err.Description,”查询错误”End Sub报表控件的数据绑定嘤接把数据报表CDataReportJ绑定到一个记录集对象中,应 该把数据报表的DataSource属性设置为记录集对象,然后绑 定报表中的TextBox控件的对应字段名称。操作步骤如下:L 创 建报表的数据源我们在曾设计的报表对象DataReportl O 中定义它的数据源。方法是双击报表的空白处,弹出代码编 写对话框,选择DataReportIO的Initial ize事件,设置它的 DataSource属性为“rs”,如图。国 工程 1-DataReportlO(Code)DataEeport-1!x|-3Ini ti ali zePrivate Sub DataReport_Ini ti ali ze 0|Set DataReport2.DataSource=rsEnd Sub_32、设置报表的文本柩控件属性打开报表设计器,在DataReportlO的细节中有多个 文本柩控件,依次选中每个文本柩控件,在 DataField属性中,单击 V”按钮,会自动列出 当前记录集的所有字段名,选择对应的字段名称 进行设置。至此运行时把ADO记录集对象“rs”中的记录绑定到数据报表就全部完成了,报表对 象可以随查询结果4动更新数据。报表的打印预览通常经过初步设计的报表不能免全满足应用 程序的需要,需要在经过打印预览之后,反 复调整报表对象中各个控件的设置,最终达 到用户的要求。VisualBasic申报表打印预览的 方式有两种:使用DataReport对象的Show方 法和设置DataReport对象为启动对象。1用DataReport对象的Show方法实现打印预览Show方法是用来打印预览当南的DataReport对象,其 语法是:DataReport.Show在前面曾创建了数据报表 对象DataReportIO,怎么实现它的打印预览功能呢?打开主窗体Formll,单击菜单“分组报表打印”的子 菜单项“按人员技术职称分组统计”,弹出代玛窗口,对象名:ryzc,编辑它的Click事件,如图所示。髡成了上述代码编写后,运行窗体,单击菜单“分组 报表打印”的子菜单项“按人员技术职称分组统计”如图所示。就可以预览报表对象DataReportIO,设置DataReport对象为启动对象如果想在程序轨行时直接显示DataReport对象,而 不经过菜单或4窗体的调用,可以将数据报表设置为 工程的启动对易,方法是:单击“工程-工程1属 性”菜单项,弹出“工程1-工程属性”对话框,选择“通用”选项卡,将其中的启动对象设置为要 预览的报表对象名称,如下页图所示。设置党报表 DataReportIO为启动对象,直接运行工程(按下“F5”键),报表就以打印预览的形式出现。4xei-icKtt凶通用生成|编译|部件|调试|工程类型建):启动对象):|标掂EXE 3工程名称国):l ataReportl O3母最1帮助文件名国):工程帮助上下文标识符Q):|D:zjzl hel p.chm|0工程描述(D:r执行无用户界面更)歹升级ActiveX控件也)r要求许可证关键字1)r保留在内存中(X)线程模块)r每个对象对应一个线程患)3线程缓冲池|i3 线程瀛一I 取消 I 帮助报表的打印经过预览后的报表符合用户要求后,就可以打印输出了。打印一个数据报表可以使用下面两种方法之一。1、使用打印按钮用户使用“打印预览”后,出现预览窗口,可以单击窗 口工具栏的打印按钮,直接将当前报表打印输出。2、可以通过使用PrintReport方法编程打印编程打印一个报表时,有两种选择:通过显示“打印”对话柩打印,或不显示对话柩打印。()要显示“打印”对话柩,按照下列步骤轨行:将一个 CommandButton 添加到窗体,在按钮的Click事件中,编写下面的代码:DataReportl.PrintReport True“打印”对话柩允许用户选择一个打印机、打印到 文件、选择要打印的页面范囹并指定要打印的徐教。这种情况一定要安装打印机才能正 确运行。(2)不显示对话柩打印在有些情况下,可能希望不需用户干预打印报表。PrintReport方法也提供这样的选择:选择要打印的页面范 围,可以是全部,也可以是一个指定的范围。要不显示对话柩地打印,按照下列步骤执行:将一个CommandButton添加到窗体中,在按钮的Cl ick事件 中,编写下面的代码:DataReportl.PrintReport Fal se或者,要指定打印的页面范围,可以使用下面的代码:DataReportl.PrintReport Fal se,rptRangeFromTo,1,2I 本章习题1,简述数据报表的作用,为什么要设计报表?2,简述常用的报表控件有哪些,如何应用?3.简述设计分组报表的方法。4.简述设计动态报表的方法。5.如何实现报表的打印及打印预览功能?
展开阅读全文