VB利用DataReport做报表详解
- 格式:doc
- 大小:165.50 KB
- 文档页数:46
巧用 VB6 之 Data Report 实现图片(Picture)、图表(MsChart)的打印及预览VB 6.0 专业版和企业版中的数据报表设计器(Data Report Designer) 是用来实现打印数据库数据的有力工具。
在通常状况下, DataReport 的数据源(DataSource)应该是由数据库(DataBase)的基本表(Table)、视图(View)或查询(Query)等生成的,更确切的说该数据源应是一个ADODB.Recordset (二维表),而且ADO 允许生成并打开任意无数据库实体的记录集。
这样就可以为DataReport 随便设置一个数据源,用其实现实现图片打印的预览。
首先,新建"标准Exe"工程,再为工程添加"Data Report" 。
设置"工程属性"的启动对象为"DataReport"。
先使DataReport "显示报表标头/注脚"(右鼠键快捷菜单),再绘制一个RptImage 控件到"报表标头"区域。
然后,就可以编写程序代码了:Private DataReport_Initialize()'创建并打开一个任意的记录集,并将其设置为 DataReport 的数据源Dim adoRecordset As New ADODB.RecordsetadoRecordset.Fields.Append "X", adVariantadoRecordset.OpenSet Me.DataSource = adoRecordsetConst ErrorX = 400 '打印机横向误差Const ErrorY = 400 '打印机纵向误差Me.ReportWidth = Printer.Width - Me.LeftMargin - Me.RightMargin - ErrorXMe.Sections.Item("Section1").Height = 0Me.Sections.Item("Section3").Height = 0Me.Sections.Item("Section2").Controls.Item("Image1").PictureAlign ment = rptPACenterMe.Sections.Item("Section2").Controls.Item("Image1").SizeMode = rptSizeClipMe.Sections.Item("Section2").Controls.Item("Image1").Left = 0Me.Sections.Item("Section2").Controls.Item("Image1").Top = 0Me.Sections.Item("Section2").Height = Printer.Height - Me.TopMargin - Me.BottomMargin - ErrorYMe.Sections.Item("Section2").Controls.Item("Image1").Width= Me.ReportWidthMe.Sections.Item("Section2").Controls.Item("Image1").Height = Me.Sections.Item("Section2").HeightDim x As PictureSelect Case iCase 1 '打印 MsChart。
VB利用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属性;其他属性不再多说。
Vb6.0中DATAREPORT的使用Vb 6.0 中DATAREPORT 的使用一、打开VB6.0新建一“标准EXE”工程二、在“工程”菜单上,单击“添加DATA ENVIROMENT”向工程中一个设计器,此处为添加DATA ENVIROMENT1数据环境。
三、在弹出的工程1窗口中右键点击“CONNECTION1”,在弹出菜单中选择“属性”弹出数据链接属性窗体,在“提供程序”中选择自己的数据库环境。
如MICROSOFT OLE DB PROVIDER FOR SQL SERVER,点选下一步,选择自己的服务器、用户和密码,数据库等。
四、右键单击“CONNECTION1”,在弹出的菜单中选择“添加命令”,添加一个命令为COMMNAD1,右键单击“COMMNAD1”,在弹出菜单选择属性,在属性窗口的“通用”中对命令进行命名和连接的设置。
对数据源进行表的选择,“数据库对象”选择“表”,“对象名称”中选择你数据库中的表。
点击确定完成。
五、右键单击“COMMNAD1”,在弹出菜单中选择“添加子命令”,添加子命令为COMMAND2,右键单击“COMMNAD2”,在弹出菜单选择属性,在属性窗口的“通用”中对命令进行命名和连接的设置。
对数据源进行表的选择,“数据库对象”选择“表”,“对象名称”中选择你数据库中的表,再在“关联”项中对COMMAND1与COMMAND2的关联项进行设置,也就是此两表都有的关联字段,点“添加”进行添加。
最后点击确定完成。
六、创建数据报表DATAREPORT。
在“工程”菜单上,单击“添加DATA REPORT”向工程中一个数据报表DATAREPORT1。
在DATAREPORT1的属性窗口中,更改其DATASOURCE 为DATAENVIRONMENT1,DATAMEMBER 为COMMAND1。
七、右键单击数据报表设计器窗体,在弹出菜单上单击“检索结构”。
八、从数据环境设计器DATA ENVIROMENT1中拖动COMMAND1中几个需要的字段到DATA REPORT的“分组标头”中。
Vb 6.0 中DATAREPORT 的使用一、打开VB6.0新建一“标准EXE”工程二、在“工程”菜单上,单击“添加DATA ENVIROMENT”向工程中一个设计器,此处为添加DATA ENVIROMENT1数据环境。
三、在弹出的工程1窗口中右键点击“CONNECTION1”,在弹出菜单中选择“属性”弹出数据链接属性窗体,在“提供程序”中选择自己的数据库环境。
如MICROSOFT OLE DB PROVIDER FOR SQL SERVER,点选下一步,选择自己的服务器、用户和密码,数据库等。
四、右键单击“CONNECTION1”,在弹出的菜单中选择“添加命令”,添加一个命令为COMMNAD1,右键单击“COMMNAD1”,在弹出菜单选择属性,在属性窗口的“通用”中对命令进行命名和连接的设置。
对数据源进行表的选择,“数据库对象”选择“表”,“对象名称”中选择你数据库中的表。
点击确定完成。
五、右键单击“COMMNAD1”,在弹出菜单中选择“添加子命令”,添加子命令为COMMAND2,右键单击“COMMNAD2”,在弹出菜单选择属性,在属性窗口的“通用”中对命令进行命名和连接的设置。
对数据源进行表的选择,“数据库对象”选择“表”,“对象名称”中选择你数据库中的表,再在“关联”项中对COMMAND1与COMMAND2的关联项进行设置,也就是此两表都有的关联字段,点“添加”进行添加。
最后点击确定完成。
六、创建数据报表DATAREPORT。
在“工程”菜单上,单击“添加DATA REPORT”向工程中一个数据报表DATAREPORT1。
在DATAREPORT1的属性窗口中,更改其DATASOURCE 为DATAENVIRONMENT1,DATAMEMBER 为COMMAND1。
七、右键单击数据报表设计器窗体,在弹出菜单上单击“检索结构”。
八、从数据环境设计器DATA ENVIROMENT1中拖动COMMAND1中几个需要的字段到DATA REPORT的“分组标头”中。
在VB中用数据报表设计器创建报表数据环境设计器(Data Environment designer)与数据报表设计器(Data Report designer)均是Visual Basic 6.0的新增功能,它们的出现大大增强了Visual Basic处理数据的能力。
在以往的Visual Basic版本中,制作报表都是通过第三方产品来完成并通过ActiveX控件输出的。
这两种设计器的出现,使得Visual Basic程序员再也不用考虑选择一个什么样的第三方工具设计报表了,所有的设计全部在Visual Basic内部完成,再加上Visual Basic 6.0新增的开发IIS应用程序和开发DHTML应用程序功能,使得Visual Basic 6.0是一个名副其实的装备齐全的集成开发环境了。
下面我们以一个比较简单的报表为例,详细阐述如何使用数据环境设计器和数据报表设计器来设计一个数据报表。
一、数据环境设计器与数据报表设计器数据环境设计器提供了一个交互式的设计环境。
通过设置Connection对象和Command 对象的属性,可以快速完成到一个数据源的连接。
对于设置好的数据环境设计器,可以将它的对象拖放到表单上或是报表上,它会自动创建并完成数据绑定控件的设置。
数据报表设计器是一个极为灵活的设计报表的工具。
它以数据环境设计器作为数据源,能创建有层次的、汇总若干个关系型数据表数据的复杂报表。
除了像传统的报表设计工具那样能将报表通过打印机输出以外,数据报表设计器还能以HTML或文本文件的格式输出报表。
二、数据环境对象数据环境设计器包含以下几个对象:1. 数据连接(Connection)对象:连接对象表示到一个作为数据源的远端数据库或本地数据库的连接。
在数据环境中必须至少包含一个连接对象,要使用数据环境存取数据,必须首先创建连接对象。
2. 数据命令(Command)对象:命令对象定义了从数据库连接中将取回什么数据的详细信息。
VB利用Dat aRepor t做报表首先介绍一下D a taRep ort对象的几个常用属性。
一是DataS ource,用于设置一个数据源,通过该数据源,数据使用者被绑定到一个数据库;二是DataM ember,从DataSo urce提供的几个数据成员中设置一个特定的数据成员;三是LeftM argin、RightMa rgin、TopMarg in、Bottom M a rgin等,用于指定报表的左右上下的页边距;四是Secti ons,即DataRe port的报表标头、页标头、细节、页脚注、报表脚注5个区域,如果加上分组(可以有多层分组),则增加一对区域,即分组标头、分组脚注。
其中DataSo urce一般是一个数据环境或是ADO DB.Connect ion类型的变量,而DataMe mber则对应数据环境中的Comm and或是A D ODB.RecordS et类型的变量,推荐使用数据环境及Command,页边界大家肯定都很清楚,下面我主要介绍以下Sect ions,这也是Data Report的精髓所在。
Sections是一个集合,您可以为每一个S ectio n指定名称,也可以用其缺省的索引,从上到下依次为1、2…。
每个Secti on均有He ight和V i sible属性,您可以在一定条件下使一个S e ction不可见。
在Sectio n中可以放置各种报表控件,其中RptLa bel、RptImag e、RptSha p e和RptL ine可以放在任意的Sect ion中,用于输出各种文字、图形及表格线;R ptText Box只能放在细节中,一般用于绑定输出Data Memebe r提供的数据字段;RptFunc tion只能被放置在分组注脚中,用于输出使用各种内置函数计算出的合计、最大值、最小值、平均值、记数等等。
第六节报表设计对一个完整的数据库应用程序来说,制作并打印报表是不可缺少的环节。
VB 6.0 提供了DataReport 对象作为数据报表设计器(DamReport designer),DataReport对象除了具有强大的功能外,还提供了简单易操作的界面。
DataReport对象可以从任何数据源包括数据环境创建报表,数据报表设计器可以联机查看、打印格式化报表或将其导出到正文或HTML页中。
一、报表设计器数据报表设计器由DataReport对象、Section对象和DataReport控件组成。
1.DataReport对象DataReport对象与VB的窗体相似,同时具有一个可视的设计器和一个代码模块,可以使用设计器创建报表的布局,也可以在代码模块中添加代码。
在“工程”菜单上,单击“添加DataReport”命令,将数据报表设计器添加到工程中,则出现如图5-6-1所示的DataReport1对象,由“报表标头”、“页标头”、“细节”、“页注脚”和“报表注脚”组成。
图5-6-1·报表标头:指显示在一个报表开始处的文本,例如用来显示报表标题、作者或数据库名。
·页标头:指在每一页顶部出现的信息,例如用来显示每页的报表标题。
·分组标头、注脚:指数据报表中的“重复”部分。
每一个分组标头与一个分组注脚相匹配,用于分组。
·细节:指报表的最内部的“重复”部分(记录),与数据环境中最低层的Command 子对象相关联。
·页注脚:指在每一页底部出现的信息,例如,用来显示页码。
·报表注脚:指报表结束处出现的文本,例如,用来显示摘要信息或一个地址或联系人姓名。
报表注脚出现在最后一个页注脚之前。
2.Section对象数据报表设计器的每一个部分由Section对象表示,如图5-6-1中的Section1~Section5。
设计时,每一个Section由一个窗格表示,可以单击窗格以选择页标头,编程改变其外观和行为,也可以在窗格中放置和定位控件,对Section对象及其属性进行动态重新配置,更改每一个Section对象的布局来设计报表。
VB通用数据表格输出程序的设计做为一种简捷、系统的Windows应用程序开发工具,Visual Basic具有强大的数据处理能力,提供了多种数据访问方法,可以方便地存取Microsoft SQL Server、Oracle、XBase等多种数据库,被广泛应用于建立各种信息管理系统。
但是,VB缺乏足够的、符合中文习惯的数据表格输出功能。
虽然使用Crystal Report控件及Crystal Reports程序可以输出报表,但操作很麻烦,中文处理能力也不理想,特别是不能够用来制作不确定内容的表格。
笔者在用VB开发淮北市医疗保险信息管理系统时,需要对任意的查询结果进展表格输出,为此,编制了一个通用的数据表格输出控件,能够根据查询的结果自动生成二维中文表格,并打印输出,在此介绍给大家,共同探讨。
一.VB中的结果集VB提供的数据访问方法有数据询问对象(DAO)、Data控件、远程数据对象(RDO)、RemoteData控件(RDC)、ODBC API、VB SQL等,其中ODBC API比拟复杂,开发、调试和支持非常困难;VB SQL是针对Microsoft SQL Server的,这两种方法使用的比拟少,这里不做讨论。
比拟常用的方法是DAO、Data控件、RDO、RDC,其中DAO和Data控件使用的结果集(又叫纪录集) 包含在Recordset 对象中,RDO和RDC使用的结果集包含在rdoResultset对象中。
通用表格输出的实现方法就是根据任意的Recordset对象或rdoResultset对象自动生成表格并输出。
二.表格的自动生成1. Recordset对象下面以Data控件为例,介绍Recordset对象的表格自动生成方法。
假设有Data控件名称为MyData,首先说明相关的内容及用法:(1) Data控件的结果集包含在它的Recordset对象中,引用方法为: MyData.Recordset。
Visual Basic6.0下数据库报表制作技巧在运用Visual Basic编制MIS系统前台程序时,往往会需要处理大量的报表。
而这些报表的制作,在Visual Basic6.0出现之前,要么需要使用Print语句编写大量程序代码,要么选择诸如Seagate等第三方公司所提供的诸如Data Report等软件,而一旦真正使用这些没有本地化的软件或控件,程序员往往会遇到各种各样令人头疼不已的问题——或者是中文字体显示有所限制,或者是报表数据无法动态及时更新,或者所提供的数据处理或统计功能并不怎么适用。
所幸的是,MicroSoft推出的Visual Basic6.0专业版和企业版中包含一个全新的组件——Data Report Designer (DRD),运用这个报表设计器,我们可以将报表与数据环境对象或者是ActiveX数据对象直接关联,使得Visual Basic6.0下的报表设计效率得到空前提高。
下面,就本人在运用DRD进行报表程序设计所获得的心得与大家共同探讨一下。
一将DRD与DED(Data Enviroment Designer)结合。
这是运用DRD解决Visual Basic6.0报表处理最常用的一种方法,在Samples中有一个名为Prjnwind工程就是专门介绍如何使用结合使用DRD和DED的例子程序。
我们可以通过选择新工程中的Data Project类型就可以自动增加一个空的DED和DRD实例到Project explorer中,打开一个空DataReport实例将禁止工具栏中的General 窗体并在工具栏底添加一个DataReort按钮。
如下图:可以看到,DataReport的专用控件——RptLabel、RptTextBox、RptImage、RptLine、RptShape和RptFunction。
除了RptFunction,每个Rpt控件都可以在固有Visual Basic工具面板中找到对应的控件。
最简单的例子
建立一个exe的form1,添一个按钮command1 添一个DataEnvironment1设计器
右击connection1,出来属性
选择和填入相关数据库信息(事先设定好ODBC)在connection1下加一个命令command1
右击command1,选中属性,填好相关表的信息或SQL 在工程窗口填入datareport1设计器
Datareport1的datamember和datasource属性填好DataEnvironment1设计器中的一个字段拖到报表的细节
回到form1窗体,在command1按钮中写入代码
在command1的代码重新设定了数据库连接和数据表的制定条件,使报表变得灵活可控,这种方式不再局限于数据环境刚开始制定的条件,又节省了代码
Private Sub Command1_Click()
DataEnvironment1.Connection1.ConnectionString="Provider=MSDASQL.1;Password=TEST01; Persist Security Info=True;User ID=TEST01;Data Source=TEST01"
mands(1).CommandText = "SELECT * FROM T_DA TE_MS WHERE I_FAC_CD='FAC01'"
DataReport1.Show
End Sub
按下按钮command1,得到了如下报表。
使用VBA实现自动化数据报告的生成随着信息技术的迅猛发展,数据分析和报告生成已成为各个行业中不可或缺的重要工作。
传统的手动数据报告生成过程费时费力,容易出错,而利用VBA编程技术实现自动化数据报告的生成,不仅高效准确,还能节省大量时间和精力。
本文将介绍如何使用VBA实现自动化数据报告的生成,为您提供一种便捷的数据分析和报告生成方法。
首先,我们需要明确数据报告的需求和格式。
通常,数据报告包括数据源、指标、图表和表格等内容。
在编写VBA代码时,应根据具体需求定义相关变量和对象,并设置它们的属性和方法。
在VBA中,我们可以使用ADO(ActiveX Data Objects)库连接数据源并提取数据。
通过建立与数据库的连接,我们可以执行SQL查询语句,获取所需的数据。
在连接数据源之前,需要引用Microsoft ActiveX Data Objects Library,然后使用Connection和Recordset对象实现数据库的连接和数据提取。
例如,以下是连接数据库并执行SQL查询语句的示例代码:```vbaSub GenerateReport()Dim conn As New ADODB.ConnectionDim rs As New ADODB.RecordsetDim sql As String'建立与数据库的连接conn.Open "Provider=SQLOLEDB;Data Source=服务器名;Initial Catalog=数据库名;User ID=用户名;Password=密码"'执行SQL查询语句sql = "SELECT * FROM 表名"rs.Open sql, conn'将查询结果存储在数组中或直接操作数据'关闭连接rs.Closeconn.Close'释放对象Set rs = NothingSet conn = NothingEnd Sub```在连接数据库并获取数据后,我们可以将数据存储在数组中,或根据指定的格式整理数据。
上位机监控软件中的数据库操作1. 引言本系统是一个粉料加料系统,分为六个部分:加料区、一号粉料区、二号粉料区、三号粉料区、混合搅拌区及下料包装区。
其加料区由一个加料罐和一些泵和阀组成;一号粉料区由四个粉料罐和一个称量罐及泵和阀组成;二号粉料区同一号粉料区;三号粉料区同一号粉料区;混合搅拌区由混合罐及内部搅拌浆组成。
根据实际情况需要完成下列功能。
功能一:监视功能。
将现场设备的信息,如阀的位置,变频器的电流功率,储罐内的液位,称重罐的重量等显示在上位机上,可以实时的监视现场的情况,并可以手动控制单个设备,比如开启一个阀活电机等,并将相应的信息存入数据库,使其能看到历史曲线及历史事件与报警的记录。
功能二:管理功能。
在上位机上能储存不定量配方,可以新建修改配方,也可以删除不用的配方,根据生产的需要选择不同的配方,系统将根据该配方的要求运行。
功能三:报表功能。
由于批次生产的特殊性,一般需查看打印不同的报表,以供生产管理,这里需要日报,月报,按配方查询,成分统计,配方统计等。
2. 系统的硬件设计该系统的硬件由1台上位机(电脑),1组PLC通过以太网作。
3. VB 设计上位机的外挂界面和数据库管理平台3.1上位机与PLC之间的通信本设计中,上位机与PLC之间的通信协议有两种:一种是用来实现监视功能的。
用INTOUCH^为上位机软件,通过ROCKWELL 的RSLINX作为OPC通讯连接上位机与PLC,这样就能把PLC的点与上位机的点一一对应起来,在上位机上就能监视控制现场的设备了,这个在这里就不做具体说明。
另一种是用来实现管理的,即把上位机的配方指令下达给PLC我们选择一个合适的配方,按下确定键后,PLC就会收到该配方的所有信息,并将根据此配方进行工作。
这个功能由于设计很多数据的上下载及数据库的应用,用上位机软件自身的功能很难实现,所以采用了一个外挂的VB程序作为实现该功能的中介,这里采用了DDE协议,使得VB界面中的数据下载到PLC中,代码如下:start_recipe.Text=1start_recipeTopic="RSLinx|menniu"start_recipeItem="Weigh_Start ,L1,C1" start_recipeMode=2 start_recipePokestart_recipeMode=0start_recipe.Text=0 start_recipeTopic="RSLinx|menniu"start_recipeItem="Weigh_Start ,L1,C1"start_recipeMode=2 start_recipePokestart_recipeMode=0Text1.Text=Combo1.Text Text1Topic="RSLinx|menniu"Text1Item="Recipe_Name"Text1Mode=2Text1PokeText1Mode=03.2 上位机与数据库之间的通信(1)INTOUCI与数据库间的通信:在一定的条件下,需要从上位机上把特定的数据传到数据库中,作为报表的数据源,这时就要建立上位机(INTOUCH与数据库(ACCES)之间的通信。
VBA中的图表制作和数据可视化方法在VBA中,图表制作和数据可视化是非常有用的功能。
通过图表,我们可以更直观地理解和分析数据,从而更好地支持决策和沟通工作。
本文将介绍在VBA中如何使用图表制作和数据可视化方法,以及一些实用技巧和注意事项。
一、图表类型选择在VBA中,可以使用ChartObjects对象和ChartObject对象来创建和操作图表。
首先需要选择合适的图表类型来展示数据。
常见的图表类型包括柱形图、折线图、饼图、散点图等。
柱形图:适用于比较各组数据之间的差异。
折线图:适用于显示数据的趋势和变化。
饼图:适用于显示各部分占总体的比例。
散点图:适用于展示两个变量之间的关系。
根据具体需求和数据特点选择合适的图表类型,可以更好地展示数据。
二、数据源设置在VBA中创建图表之前,需要将数据源设置好。
数据源可以是Excel表格、数据库中的表或者数组等。
首先需要将数据源引用到VBA 中,并将其赋值给一个数组变量或者使用Range对象引用。
例如,创建一个柱形图,数据源是A1:B10的数据。
可以使用以下代码将数据导入VBA数组:Dim dataRange As RangeDim dataArray() As VariantSet dataRange = Sheet1.Range("A1:B10")dataArray = dataRange.Value三、创建图表在VBA中,可以使用ChartObjects对象和ChartObject对象来创建和操作图表。
首先,需要创建一个ChartObjects对象,然后使用Add 方法来添加一个图表对象。
接下来,可以使用ChartObject对象的Chart 属性来操作图表,设置图表类型、添加数据系列、设置坐标轴等。
以下是一个简单的创建柱形图的示例代码:Dim chartObjs As ChartObjectsDim chartObj As ChartObjectDim chart As ChartSet chartObjs = Sheet1.ChartObjectsSet chartObj = chartObjs.Add(100, 100, 400, 300)Set chart = chartObj.Chartchart.ChartType = xlColumnClustered四、图表样式设置除了图表类型、数据源设置之外,还可以通过VBA来设置图表的样式,使其更符合需求。
VB6.0控制EXCEL进行报表设计及打印!在工控程序的开发中,经常涉及到数据信息的分析、加工,最终还需把统计结果形成各种形式的报表打印输出。
在Visual Basic中制作报表,通常是用数据环境设计器(DataEnvironment Designer)与数据报表设计器(Data Report Designer),或者使用第三方产品来完成。
但对于大多数习惯于Excel报表的用户而言,用以上方法生成的报表在格式和功能等方面往往不能满足他们的要求。
由于Excel具有自己的对象库,在Visual Basic工程中可以加以引用,通过对Excel使用OLE自动化,可以创建一些外观整洁的报表,然后打印输出。
这样实现了Visual Basic应用程序对Excel的控制。
本文将针对一个具体实例,阐述基于VB和EXCEL的报表设计及打印过程。
1)创建Excel对象Excel对象模型包括了128个不同的对象,从矩形、文本框等简单的对象到透视表,图表等复杂的对象。
下面简单介绍一下其中最重要,也是用得最多的五个对象。
(1)Application对象:Application对象处于Excel对象层次结构的顶层,表示 Excel自身的运行环境。
(2)Workbook对象:Workbook对象直接地处于Application 对象的下层,表示一个Excel工作薄文件。
(3)Worksheet对象:Worksheet对象包含于Workbook对象,表示一个Excel工作表。
(4)Range对象:Range对象包含于Worksheet对象,表示Excel工作表中的一个或多个单元格。
(5)Cells对象:Cells对象包含于Worksheet对象,表示Excel 工作表中的一个单元格。
如果要启动一个Excel,使用Workbook和Worksheet对象,下面的代码启动了Excel并创建了一个新的包含一个工作表的工作薄:Dim zsbexcel As Excel.ApplicationSet zsbexcel = New Excel.Applicationzsbexcel.Visible = True如要Excel不可见,可使zsbexcel.Visible = Falsezsbexcel.SheetsInNewWorkbook = 1Set zsbworkbook = zsbexcel.Workbooks.Add2)设置单元格和区域值要设置一张工作表中每个单元格的值,可以使用Worksheet对象的Range属性或Cells属性。
vb的DataCombo和DataList控件的使用(一)时间:2007-05-05使用DataCombo和DataList控件DataCombo 和DataList控件与标准列表框和组合框控件极为相似,但有一些重要的不同之处,这种不同使这两个控件在数据库应用程序中具有极大的适应性和用武之地。
这两个控件都可以被这些控件所绑定的数据库字段自动填充。
此外,它们还能有选择地将一个选定的字段传递给第二个数据控件,从而适合用于创建“查找表”应用程序。
可能的用法1.在一个关系数据库中,使用一个表的数据来提供要输入给第二个(相关的)表值。
例如,在一个存货清单数据库中,供应商的名称存储在一个表中,每个供应商都有一个唯一的标识符。
另一个显示产品的表则使用这些标识符来表明是哪个供应商供应的该产品。
可以使用DataList控件来显示供应商的名称,而(不可见地)将供应商的标识符提供给产品表。
2.允许用户通过从一个下拉列表中选择一种标准来缩小搜索范围。
例如,一个销售报告的数据库应用程序可以使用一个DataList控件让用户选择一个州(State) 或一个销售区域。
一旦作出选择,则该选择项将自动传递给第二个数据控件,这个控件负责查找选定区域的销售记录。
与它们对应的内在控件一样,DataList 和DataCombo控件之间的主要不同在于DataCombo控件提供了一个可以在其中编辑内容的文本框。
详细信息有关DataList和DataCombo控件连接数据库表能力的说明,请参阅“使用DataCombo 和DataList控件连接两个表”。
要创建一个简单的使用链接表的数据库应用程序,请参阅“创建一个简单的DataCombo应用程序”。
值得注意的控件属性DataList和DataCombo控件的一些重要属性包括:注意DataCombo控件的DataFormat属性是一个Extender属性。
因此在属性表上它总是可见的,并且可以在代码中设置。
首先介绍下DataReport对象几个常用属性是DataSource用于设置个数据源通过该数据源数据使用者被绑定到个数据库; 2是DataMember从DataSource提供几个数据成员中设置个特定数据成员;3是LeftMargin、RightMargin、TopMargin、BottomMargin等用于指定报表左右上下页边距; 4是Sections即DataaReport报表标头、页标头、细节、页脚注、报表脚注5个区域如果加上分组(可以有多层分组)则增加对区域即分组标头、分组脚注其中DataSource般是个数据环境或是ADODB.Connection类型变量而DataMember则对应数据环境中Command或是ADODB.RecordSet类型变量推荐使用数据环境及Command页边界大家肯定都很清楚下面我主要介绍以下Sections这也是DataReport精髓所在Sections是个集合您可以为每个Section指定名称也可以用其缺省索引从上到下依次为1、2…每个Section均有Height和Visible属性您可以在定条件下使个Section不可见在Section中可以放置各种报表Control控件其中RptLabel、RptImage、RptShape和RptLine可以放在任意Section中用于输出各种文字、图形及表格线;RptTextBox只能放在细节中般用于绑定输出DataMemeber提供数据字段;RptFunction只能被放置在分组注脚中,用于输出使用各种内置计算出合计、最大值、最小值、平均值、记数等等上述报表Control控件中常用公共属性有用于控制位置及高度宽度Top、Left、Height、Width和控制可见性Visible;其中RptTextBox还有DataField、DataMember、DataFormat及Font属性;其他属性不再多说然后介绍下我使用经验是对想控制报表Control控件按类型有规律命名; 2是用RptShape矩形框做表格线框比用RptLine画框省事多了只有斜线才使用RptLine; 3是报表标题及报表中表头文字、日期及页码用RptLabel其中Caption属性支持转义%D为长格式日期%d为短格式日期%P为总页数%p为当前页码(注意:D和d,P和p大小写的区别); 4是对固定报表在设计窗口直接将报表Control控件摆放到位对于活报表应首先考虑报表最大情形将足够Control控件分别放置在区别区域位置大小可以不必深究然后在报表输出前用VBA代码对所有Control控件属性进行调整包括位置、高度、宽度、字体、对齐方式、显示格式、可见性等等相应对Section也应根据情况调整其高度和可见性最后用个例子模板来介绍说明其使用思路方法连接数据库With 数据环境.rsCommand名If .State = adStateOpen Then .Close .Source = SQL语句.Open 打开想输出数据库数据项以便输出End WithWith 报表名.DataSource=数据环境.DataMember=Command名这两行也可固定设好而不必每次设置设置页表头部分(RpttLabel…为报表Control控件名).Sections(2).Controls("RptLabelPage").Caption = "共%P页第%p页".Sections(2).Controls("RptLabelDate").Caption = "打印日期:%D".Sections(3).Controls("RptLabel1").Left=……设置细节部分(RptShapeX、RptTextBoxX为报表Control控件名).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.Section s(3).Controls("RptTextBox1")=…….Sections(3).Controls("RptShapeN").Visible=False.Sections(3).Controls("RptTextBoxN").Visible=False…. Sections(3).Height=计算出或固定细节高度动态调整报表标题(RptLabelTitle为报表标签Control控件名).Sections(2). Controls("Rpt LabelTitle").Left=…….Sections(2). Controls("RptLabelTitle").Alignment=……调整完毕后.Show 或 .PrReportEnd With这样做优点是报表设计时简单调整方便、随意只需更改点代码而不必为了点点修改而费神在设计窗口调整半天vb6.0 中,用"datareport" 报表控件制作报表,纸张定义 A4 A3 <上一篇 | 下一篇> '在vb6.0中,用"datareport" 报表控件制作报表,当使用报表预览功能时,"datareport"'报表控件将使用"windows系统的当前默认打印机"的打印设置,若该打印设置纸张尺寸(如A4纸)小于"datareport"'报表控件所需纸张尺寸(如A3纸),则"datareport" 报表预览时将会出现"打印纸张尺寸小于报表宽度"错误,'请教如何用代码设置"windows系统的当前默认打印机"的打印机纸张尺寸,而不需用"公共对话框"的打印设置方法?Option ExplicitPublic Enum PrinterOrientationConstantsOrientPortrait = 2OrientLandscape = 1End Enum'Printer.PaperSize = vbPRPSA3Private Type DEVMODEdmDeviceName As String * 32dmSpecVersion As IntegerdmDriverVersion As Integer dmSize As IntegerdmDriverExtra As IntegerdmFields As LongdmOrientation As IntegerdmPaperSize As IntegerdmPaperLength As IntegerdmPaperWidth As IntegerdmScale As IntegerdmCopies As IntegerdmDefaultSource As Integer dmPrintQuality As Integer dmColor As IntegerdmDuplex As IntegerdmYResolution As IntegerdmTTOption As IntegerdmCollate As IntegerdmFormName As String * 32 dmUnusedPadding As Integer dmBitsPerPel As IntegerdmPelsWidth As LongdmPelsHeight As LongdmDisplayFlags As LongdmDisplayFrequency As Long End TypePrivate Type PRINTER_DEFAULTSpDataType As StringpDevMode As LongDesiredAccess As LongEnd TypePrivate Type PRINTER_INFO_2pServerName As LongpPrinterName As LongpShareName As LongpPortName As LongpDriverName As LongpComment As LongpLocation As LongpDevMode As LongpSepFile As LongpPrintProcessor As LongpDataType As LongpParameters As LongpSecurityDescriptor As LongAttributes As LongPriority As LongDefaultPriority As LongStartTime As LongUntilTime As LongStatus As LongcJobs As LongAveragePPM As LongEnd TypePrivate Const DC_PAPERNAMES = 16Private Const DC_PAPERS = 2Private Const DC_PAPERSIZE = 3Private Const DM_IN_BUFFER = 8Private Const DM_OUT_BUFFER = 2Private Const DM_ORIENTATION = &H1Private Const DM_PAPERSIZE = &H2&Private Const DMPAPER_A3 = 8 ' A3 297 x 420 mmPrivate Const DMPAPER_A4 = 9 ' A4 210 x 297 mmPrivate Const PRINTER_ACCESS_ADMINISTER = &H4Private Const PRINTER_ACCESS_USE = &H8Private Const STANDARD_RIGHTS_REQUIRED = &HF0000Private Const PRINTER_ALL_ACCESS = (STANDARD_RIGHTS_REQUIRED Or _ PRINTER_ACCESS_ADMINISTER Or PRINTER_ACCESS_USE)Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _(hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)Private Declare Function OpenPrinter Lib "winspool.drv" Alias _"OpenPrinterA" (ByVal pPrinterName As String, phPrinter As _ Long, pDefault As Any) As LongPrivate Declare Function ClosePrinter Lib "winspool.drv" _(ByVal hPrinter As Long) As LongPrivate Declare Function DocumentProperties Lib "winspool.drv" _Alias "DocumentPropertiesA" (ByVal hWnd As Long, ByVal hPrinter As Long, _ByVal pDeviceName As String, pDevModeOutput As Any, pDevModeInput As Any, _ByVal fMode As Long) As LongPrivate Declare Function GetPrinter Lib "winspool.drv" _Alias "GetPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, _pPrinter As Any, ByVal cbBuf As Long, pcbNeeded As Long) As LongPrivate Declare Function SetPrinter Lib "winspool.drv" _Alias "SetPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, _pPrinter As Any, ByVal Command As Long) As LongPrivate Declare Function DeviceCapabilities Lib "winspool.drv" _Alias "DeviceCapabilitiesA" (ByVal lpDeviceName As String, ByVal lpPort As String, _ByVal iIndex As Long, ByVal lpOutput As String, lpDevMode As DEVMODE) As LongFunction SetDefaultPrinterOrientation(ByVal eOrientation As _PrinterOrientationConstants, ByVal strPaperSize As String) As BooleanDim bDevMode() As ByteDim bPrinterInfo2() As ByteDim hPrinter As LongDim lResult As LongDim nSize As LongDim sPrnName As StringDim dm As DEVMODEDim pd As PRINTER_DEFAULTSDim pi2 As PRINTER_INFO_2' Get device name of default printersPrnName = Printer.DeviceName' PRINTER_ALL_ACCESS required under' NT, because we're going to call' SetPrinterpd.DesiredAccess = PRINTER_ALL_ACCESS' Get a handle to the printer.If OpenPrinter(sPrnName, hPrinter, pd) Then' Get number of bytes requires for' PRINTER_INFO_2 structureCall GetPrinter(hPrinter, 2&, 0&, 0&, nSize)' Create a buffer of the required si zeReDim bPrinterInfo2(1 To nSize) As Byte' Fill buffer with structurelResult = GetPrinter(hPrinter, 2, bPrinterInfo2(1), _nSize, nSize)' Copy fixed portion of structure' into VB Type variableCall CopyMemory(pi2, bPrinterInfo2(1), Len(pi2))' Get number of bytes requires for' DEVMODE structurenSize = DocumentProperties(0&, hPrinter, sPrnName, _ 0&, 0&, 0)' Create a buffer of the required si zeReDim bDevMode(1 To nSize)' If PRINTER_INFO_2 points to a DEVMOD E' structure, copy it into our bufferIf pi2.pDevMode ThenCall CopyMemory(bDevMode(1), ByVal pi2.pDevMode, Len(dm))Else' Otherwise, call DocumentProperties ' to get a DEVMODE structureCall DocumentProperties(0&, hPrinter, sPrnName, _bDevMode(1), 0&, DM_OUT_BUFFER)End If' Copy fixed portion of structure' into VB Type variableCall CopyMemory(dm, bDevMode(1), Len(dm))With dm' Set new orientationSelect Case strPaperSizeCase "A3".dmPaperSize = DMPAPER_A3 Case "A4".dmPaperSize = DMPAPER_A4 End Select.dmOrientation = eOrientation.dmFields = DM_ORIENTATION + DM_PAPERSIZE End With' Copy our Type back into bufferCall CopyMemory(bDevMode(1), dm, Len(dm))' Set new orientationCall DocumentProperties(0&, hPrinter, sPrnName, _ bDevMode(1), bDevMode(1), DM_IN_BUFFER Or _ DM_OUT_BUFFER)' Point PRINTER_INFO_2 at our' modified DEVMODEpi2.pDevMode = VarPtr(bDevMode(1))' Set new orientation system-widelResult = SetPrinter(hPrinter, 2, pi2, 0&)' Clean up and exitCall ClosePrinter(hPrinter)SetDefaultPrinterOrientation = TrueElseSetDefaultPrinterOrientation = FalseEnd IfEnd Function''''----------------------------------''''---njx:窗体调用的代码:打印纸选用:1:纵向 2.横向'''SetDefaultPrinterOrientation 2, "A3"''''-----------------------------------1.报表的概念利用报表可以把数据表中的数据按一定的格式输出到屏幕上或打印到纸上。