当前位置:文档之家› VB利用DataReport做报表详解

VB利用DataReport做报表详解

VB利用DataReport做报表详解
VB利用DataReport做报表详解

首先介绍下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 With

With 报表名

.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")https://www.doczj.com/doc/7314488917.html,=…

.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 或 .PrReport

End With

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

vb6.0 中,用"datareport" 报表控件制作报表,纸张定义 A4 A3 <上一篇 | 下一篇> '在vb6.0中,用"datareport" 报表控件制作报表,当使用报表预览功能时,"datareport"

'报表控件将使用"windows系统的当前默认打印机"的打印设置,若该打印设置纸张尺寸(如A4纸)小于"datareport"

'报表控件所需纸张尺寸(如A3纸),则"datareport" 报表预览时将会出现"打印纸张尺寸小于报表宽度"错误,

'请教如何用代码设置"windows系统的当前默认打印机"的打印机纸张尺寸,而不需用"公共对话框"的打印设置方法?

Option Explicit

Public Enum PrinterOrientationConstants

OrientPortrait = 2

OrientLandscape = 1

End Enum

'Printer.PaperSize = vbPRPSA3

Private Type DEVMODE

dmDeviceName As String * 32

dmSpecVersion As Integer

dmDriverVersion As Integer dmSize As Integer

dmDriverExtra As Integer

dmFields As Long

dmOrientation As Integer

dmPaperSize As Integer

dmPaperLength As Integer

dmPaperWidth As Integer

dmScale As Integer

dmCopies As Integer

dmDefaultSource As Integer dmPrintQuality As Integer dmColor As Integer

dmDuplex As Integer

dmYResolution As Integer

dmTTOption As Integer

dmCollate As Integer

dmFormName As String * 32 dmUnusedPadding As Integer dmBitsPerPel As Integer

dmPelsWidth As Long

dmPelsHeight As Long

dmDisplayFlags As Long

dmDisplayFrequency As Long End Type

Private Type PRINTER_DEFAULTS

pDataType As String

pDevMode As Long

DesiredAccess As Long

End Type

Private Type PRINTER_INFO_2

pServerName As Long

pPrinterName As Long

pShareName As Long

pPortName As Long

pDriverName As Long

pComment As Long

pLocation As Long

pDevMode As Long

pSepFile As Long

pPrintProcessor As Long

pDataType As Long

pParameters As Long

pSecurityDescriptor As Long

Attributes As Long

Priority As Long

DefaultPriority As Long

StartTime As Long

UntilTime As Long

Status As Long

cJobs As Long

AveragePPM As Long

End Type

Private Const DC_PAPERNAMES = 16

Private Const DC_PAPERS = 2

Private Const DC_PAPERSIZE = 3

Private Const DM_IN_BUFFER = 8

Private Const DM_OUT_BUFFER = 2

Private Const DM_ORIENTATION = &H1

Private Const DM_PAPERSIZE = &H2&

Private Const DMPAPER_A3 = 8 ' A3 297 x 420 mm

Private Const DMPAPER_A4 = 9 ' A4 210 x 297 mm

Private Const PRINTER_ACCESS_ADMINISTER = &H4

Private Const PRINTER_ACCESS_USE = &H8

Private Const STANDARD_RIGHTS_REQUIRED = &HF0000

Private 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 Long

Private Declare Function ClosePrinter Lib "winspool.drv" _

(ByVal hPrinter As Long) As Long

Private 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 Long

Private 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 Long

Private Declare Function SetPrinter Lib "winspool.drv" _

Alias "SetPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, _

pPrinter As Any, ByVal Command As Long) As Long

Private 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 Long

Function SetDefaultPrinterOrientation(ByVal eOrientation As _

PrinterOrientationConstants, ByVal strPaperSize As String) As Boolean

Dim bDevMode() As Byte

Dim bPrinterInfo2() As Byte

Dim hPrinter As Long

Dim lResult As Long

Dim nSize As Long

Dim sPrnName As String

Dim dm As DEVMODE

Dim pd As PRINTER_DEFAULTS

Dim pi2 As PRINTER_INFO_2

' Get device name of default printer

sPrnName = Printer.DeviceName

' PRINTER_ALL_ACCESS required under

' NT, because we're going to call

' SetPrinter

pd.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 structure

Call GetPrinter(hPrinter, 2&, 0&, 0&, nSize)

' Create a buffer of the required si ze

ReDim bPrinterInfo2(1 To nSize) As Byte

' Fill buffer with structure

lResult = GetPrinter(hPrinter, 2, bPrinterInfo2(1), _

nSize, nSize)

' Copy fixed portion of structure

' into VB Type variable

Call CopyMemory(pi2, bPrinterInfo2(1), Len(pi2))

' Get number of bytes requires for

' DEVMODE structure

nSize = DocumentProperties(0&, hPrinter, sPrnName, _ 0&, 0&, 0)

' Create a buffer of the required si ze

ReDim bDevMode(1 To nSize)

' If PRINTER_INFO_2 points to a DEVMOD E

' structure, copy it into our buffer

If pi2.pDevMode Then

Call CopyMemory(bDevMode(1), ByVal pi2.pDevMode, Len(dm))

Else

' Otherwise, call DocumentProperties ' to get a DEVMODE structure

Call DocumentProperties(0&, hPrinter, sPrnName, _

bDevMode(1), 0&, DM_OUT_BUFFER)

End If

' Copy fixed portion of structure

' into VB Type variable

Call CopyMemory(dm, bDevMode(1), Len(dm))

With dm

' Set new orientation

Select Case strPaperSize

Case "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 buffer

Call CopyMemory(bDevMode(1), dm, Len(dm))

' Set new orientation

Call DocumentProperties(0&, hPrinter, sPrnName, _ bDevMode(1), bDevMode(1), DM_IN_BUFFER Or _ DM_OUT_BUFFER)

' Point PRINTER_INFO_2 at our

' modified DEVMODE

pi2.pDevMode = VarPtr(bDevMode(1))

' Set new orientation system-wide

lResult = SetPrinter(hPrinter, 2, pi2, 0&)

' Clean up and exit

Call ClosePrinter(hPrinter)

SetDefaultPrinterOrientation = True

Else

SetDefaultPrinterOrientation = False

End If

End Function

''''----------------------------------

''''---njx:窗体调用的代码:打印纸选用:1:纵向 2.横向

'''SetDefaultPrinterOrientation 2, "A3"

''''-----------------------------------

1.报表的概念

利用报表可以把数据表中的数据按一定的格式输出到屏幕上或打印到纸上。

2.制作报表的方法

在VB6.0中可以利用报表设计器来制作报表,从“工程”中选择“添加data report”,将报表设计器加入到当前工程中,报表由5部分组成:

报表标头——每份报表只有一个,可以用标签建立报表名。

页标头——每页有一个,即每页的表头,如字段名。

细节——需要输出的具体数据,一行一条记录。

页脚注——每页有一个,如页码。

报表脚注——每份报表只有一个,可以用标签建立对本报表的注释、说明。

使用报表设计器处理的数据需要利用数据环境设计器创建与数据库的连接,从“工程”菜单中选择“添加Data Enviroment”,在连接中选择指定的数据库文件,完成与数据库的连接,然后产生Co mmand对象连接数据库内的表。

制作报表的步骤:

(1)新建工程,在窗体上放置两个命令按钮;

(2)从“工程”菜单中“添加Data Enviroment”,右击Co nnection1,在属性中选择“Microsoft Jet 4 OLE DB Provider”,在“连接”中指定数据库;

(3)再次右击Connection1,选则“添加命令”,创建Comm and1对象,右击Command1,在属性中设置该对象连接的数据源为需要打印的数据表;

(4)在从“工程”菜单中“添加Data Report”,在属性窗口中设置DataSource为数据环境DataEnviroment1对象,DataMembe r为Command1对象,即指定数据报表设计器DataReport1的数据来源;

(5)将数据环境设计器中Command1对象内的字段拖到数据报表设计器的细节区;

(6)利用标签控件在报表标头区插入报表名,在页标头区设置报表每一页顶部的标题;

(7)利用线条控件在报表内加入直线,利用图形控件和形状控件加入图案或图形;

(8)利用DataReport1对象的Show方法显示报表,在窗体C lick事件加代码:DataReport1.Show;

(9)利用预览窗口按打印按钮可以打印报表;

(10)利用预览窗口工具栏上的导出按钮可以将报表内容输出成文本文件或Html文件;也可以利用DataReport1对象的ExportRep ort方法将报表内容输出成文本文件或Html文件。

制作报表的简单方法是从“外接程序”中选择报表向导来设计报表。

要在数据环境设计器中创建一个简单的层次结构游标,请按照下列步骤执行:

创建一个新的“标准 EXE”工程。

在“工程”菜单上,单击“添加 Data Enviroment”向工程中添加一个设计器。如果设计器没有在“工程”菜单上列出,则单击“部件”。单击“设计器”选项卡。并单击“数据环境”把设计器添加到菜单上。

注意最初为项目加载的四种ActiveX设计器在“工程”菜单上列出。如果加载了超过四个设计器,后面的设计器可以从“工程”菜单的“更多 ActiveX 设计器”子菜单中获得。

在“数据链接属性”对话框上单击“Microsoft Jet 3.51 OLE DB Provider”,这是为访问 Jet 数据库选择正确的 OLE DB 供应商。

单击“下一步”按钮进入“连接”选项卡。

单击第一个文本框旁边的省略按钮(…)。

用“选择 Access 数据库”对话框浏览到 nwind.mdb 文件,它被安装在 Program Files\Microsoft Visual Studio\Vb98 目录下。

单击“确定”关闭对话框。

右键单击“Connection1”图标,单击“重命名”,把图标名改为“Northwind”。

右键单击“Northwind”图标,然后单击“添加命令”显示“Command1”对话框。在对话框中,如下所示设置属性:属性设置值

Command Name Customers

Connection Northwind

DataBase Object Table

Object Name Customers

单击“确定”结束对话框。

右键单击“Customers”命令,并单击“添加子命令”显示“Command2”对话框。在对话框中,如下所示设置属性:属性设置值

Command Name Orders

Connection Northwind

DataBase Object Table

Object Name Orders

单击“关联”选项卡。应该选中“与父命令对象相关联”复选框。“父”框应该包含“Customers”;“父字段”和“子字段/参数”框都应该包含“CustomerID”。

在设计关系数据库时,对于链接字段,习惯上相关的表要使用相同的名字。在这种情况下,链接字段都被命名为 CustomerID。数据环境设计器自动地在对话框中匹配这样的对。

单击“添加”。单击“确定”关闭对话框。

单击“添加”按钮向 Command 对象添加关系。在关闭了对话框之后,数据环境设计器通过把两个命令显示为一个层次结构来反映关系。该层次结构将被用于创建数据报表。

根据下面的设置值设置工程和设计器的属性,然后保存工程:对象属性设置值

Project Name PrjNwind

DataEnvironment Name DeNwind

Form Name FrmShowReport

创建数据报表

一旦创建了数据环境设计器,就可以创建一个数据报表。因为并不是数据环境中所有的字段在一个数据报表中都有用,这一系列的主题创建一个受限制的报表,只显示几个字段。

VB设计报告

南京工程学院 课程设计说明书(论文)题目打字练习 课程名称VB语言课程设计 院(系、部、中心) 专业 班级 学生姓名 学号 设计地点图书馆基础教学机房 指导教师 设计起止时间:201x年x月x日至201x年x月x日 目录

一、设计任务 (3) 二、方法原理 (3) 三、总体设计思路 (3) 四、程序调试和解决问题 (4) 五、完善及存在的问题 (4) 六、收获体会 (4) 七、意见建议 (4) 八、示例截图 (5) 九、附录1(代码) (6) 十、附录2(主要参考资料) (10) 一、设计任务 1.题目介绍

在计算机及其他数码产品日益普及的今天,人们使用键盘应像用笔写字一样熟练。进行打字练习时熟悉键盘并提高打字速度的好方法。本体要求编制一个打字练习游戏程序,使用户在游戏过程中进行打字练习。 2.功能要求 (1)启动界面如图1 (2)选择难度和速度后,单击“开始”按钮,界面如图1。若选择简单,则落下字母;若选择复杂,单击开始后出现对话框,如图 2.单击确定,开始练习,落下单词。 (2)若用户在字符落到屏幕底部之前敲击了相应的键盘键,则该字符被“击中”然后消失。根据程序速度和难度的设置自动进行积分,实时分数时间正确率掉落个数显示在窗体的上部。 积分规则:正确击中一个字母或一个单词,加一分;反之,不得分,亦不扣分。(4)当游戏者单击“暂停”按钮时,程序停止运行,在单击“开始”按钮,程序继续运行;当单击“退出”按钮时,则弹出对话框(如截图示例3),单击“取消”按钮,程序继续运行,单击“确定”按钮,则弹出对话框(如截图4),此时对话框显示分数,单击“确定”按钮,退出程序。 (5)为了增加视觉效果,每个掉落的字符的颜色随机产生。 二、方法原理 根据题目要求,使用控件数组,用标签标题表示字符,键盘事件的处理判断打字正确与否,随机值的产生方法随机产生字符,用Timer控件属性反映时间、控制字符下落速度。 三、总体设计思路 首先在窗体上画出三个按钮标题分别为开始、暂停、退出。画六个标签分别表示已落字母个数、已花时间、得分与正确率。 画出一个含有五个元素的标签控制数组用以显示字符。 画出两个时间控件,一个用来返回已用时间,一个控制字符下落。 最后编写相关代码

vb报表设计

第六节报表设计 对一个完整的数据库应用程序来说,制作并打印报表是不可缺少的环节。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对象的布局来设计报表。 3.DataReport控件 当一个新的数据报表设计器被添加到工程时,在窗体上控件箱出现“数据报表”和“General”(通用)选项卡,如图5-6-2所示。但在数据报表设计器上不能使用General的控件,即内部控件或ActiveX控件。数据报表选项卡中的控件仅包含可在数据报表设计器上工作的特殊控件。 图5-6-2

基于VB实现复杂报表设计

基于VB实现复杂报表设计 xx [摘要] 本文介绍了报表设计的几种方法和以往报表设计所存在的问题,并以实例介绍自动生成复杂报表的方法。实例基于VB软件开发,并以word为模板,通过调用access数据库数据自动生成复杂报表。 [关键词]VB;数据库;Word; 复杂报表 The Design Of Complex Reports Based VB [Abstract] This paper reports detailed description of several common methods, previous reports of the existence of the problem, and makes use of example to achieve a complex reporting by using of software. The example based on VB software and used word template, to achieve the common complex reporting software through reallocating database. [Key words] VB; Database; Word; Complex Statements

1引言 报表是人们在日常生活中对某类相关信息进行集中处理的重要手段,是企业信息化不可缺少的部分。报表在各行各业中应用广泛,是信息浏览、分析和打印的有力工具。传统报表系统均以国外简单报表模型为基础设计,不能适应复杂报表的开发。特别是在处理复杂数据源报表时,常常需要编写代码准备数据或进行子报表拼接才能实现。 1.1传统报表系统存在的问题 目前,国内外的报表系统种类繁多,功能界面各具特色,对这些报表系统的比较研究,有助于我们设计出更好的报表系统。国外的报表系统的技术都比较成熟,适合制作样式简单的报表,但一般都为高端产品,价格不菲,并且在处理具有强烈中国特色的报表时,国外产品不仅报表处理能力相当不适应,甚至某些技术也略显落后,例如部分产品不能稳定地在UNIX上部署,只能支持IE浏览器,统计图输出仍采用原始的CGl方式等。国内的传统报表系统更适合制作复杂的中国式报表,在报表设计和价格等方面国内报表系统也具有一些优势,但国内的报表系统在服务质量和产品本身的品质等方面还存在着一些不足和缺陷,有待进一步的改进和完善。无论是国外的高端报表系统,还是国内的传统报表系统,每一种报表系统都有各自的优点和缺点,都有各自擅长的领域,在实际工作中应该根据需要选择合适的报表系统。面对日益复杂的报表开发需求,尤其是复杂的中国式报表,这些报表系统或多或少都有些力不从心,其主要问题表现在以下三个方面: (1) 复杂数据源的处理能力不足。报表需要从复杂的数据源或者多个不同类型的数据源中获得数据,获得的数据还可能需要统计,格式转换或其他处理,这些需求都是传统报表系统难于实现的。 (2) 报表的可维护性差。传统的报表系统生成报表的种类固定,使用方便,但很多软件系统无论在实施还是在维护阶段,报表都会进行频繁的新增和修改,而传统的报表系统缺乏无编码定制能力,系统扩展网难。一旦用户对报表样式的需求发生改变,就会给软件维护带来许多不必要的麻烦。 (3) 报表保存格式的通用性较差。报表保存格式不统一,保存格式理解困难,各种报表工具各自为政,报表模板无法兼容,行业也没有形成统一的标准,一旦用户选定了某一报表工具就意味着要一直使用。如果不幸选择失误,已经做的工作都要重新再来。 总之,利用传统的报表系统制作报表维护量相当大,一个需求对应一个报表文件,不同的组合要求制作大量的报表文件,使得开发过程变得极为繁琐,难以实现用户的需求。在设计复杂数据源的报表时,或者需要人工转换数据格式,或者要编写大量代码将多个数据源运算成为一个数据源再使用,或者使用拼接子报表的方式来实现,但都没有从根本上解决问题,严重影响报表的设计和使用效率。因此如何快速制作符合多层结构特点的复杂数据源报表,减轻开发工作量,已经成为报表系统开发的重要问题。

vb报表分组

在VB中使用动态分组报表 在使用VB自带的报表过程中,我遇到了处理动态分组报表的问题。一般要使用分组报表要在VB中建立一个DataEnvironment,并在其中建立数据库联接和命令对象,在命令对象中设置分组字段,最后将这些分组字段加入到报表中。但是这种方法只能适应静态的数据源,当遇到数据表中的字段不固定,或数据表不能预先知道的情况时,这种方法就无能为力了。经过查阅各种资料,发现我们可以通过使用Data Shaping来动态创建分组信息。下面就详细介绍一下如何动态创建分组信息,并应用于VB报表。 要使用Data Shaping,程序必须使用ActiveX Data Object (ADO)连接数据库,解决问题的关键是使用Data Shaping的驱动程序代替通常使用的各种OLE DB的驱动程序,它的用法跟使用其它驱动程序类似,对于已有的数据访问代码不用作任何修改,只是简单的修改一下连接代码就可以支持Data Shaping了。具体做法如下: 将连接参数中的 Provider设置成"MSDataShape" 即 ConnectionString = "Provider=MSDataShape;Data Provider=通常的驱动程序;Data Source=…;其它的参数" 然后就可以和平常一样进行数据连接和各种数据操作了。如此连接的数据源出了具有用普通方法的所有特性以外,同时具有了我们即将使用的Data Shaping功能,下面就可以建立自己的分组信息了: 将用于打开记录集的SQL语句写成如下形式: SHAPE {select 字段1, 字段2, 字段3,…, 字段n from 现有的表} AS 新的名称1 COMPUTE新的名称1 AS新的名称2 BY 分组字段1, 分组字段2,…, 分组字段n 上面的语句中,需要注意的是分组字段必须同时在Select 中出现,否则运行时将报错。用该SQL语句打开的记录集中包含若干个字段,它们是:新的名称2、分组字段1-n。在使用时,将打开的记录集rs作为报表的DataSource,在报表的分组部分可以直接且只能使用

在VB中用数据报表设计器创建报表

在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)对象:命令对象定义了从数据库连接中将取回什么数据的详细信息。命令对象可基于任何一个数据库对象(表、视图、存储过程或同义字)或是一个SQL 查询。 三、数据报表对象 数据报表设计器包括以下几个对象: 1. 数据报表(Data Report)对象:类似于Visual Basic表单,它包含一个可视化设计器和一个代码模块。设计器用来创建报表的布局,也可以往设计器的代码模块里添加代码,用程序对包含在设计器里的控件或区域进行控制。 2. 区域(Section)对象:数据报表设计器的每一个区域均由一个区域集对象中的一个区域对象来表示。在设计阶段,每一个区域都有一个标题,若要选择区域,只需用鼠标选择标题即可,并且在区域内可布置控件。在报表建立之前,使用区域对象及其属性调整报表。使用过报表的人都知道,报表可分为报头、报脚、页头、页脚、组头、组脚和细节等部分,在区域内也是一样的。

VB借助EXCEL实现表格设计

1、定义EXCE寸象变量 dim x as excel.application 2、VB中,启动EXCEL set x=createobject("excel.application") 3、新建一个EXCE T L 作簿 x.workbooks.add 4、选定工作表1 set xsheet=xbook.worksheets(1) 5、指定单元格,并赋值xsheet.cell(1,1)=ret.fields(0) 6 指定EXCE S L 宽 xsheet.column(1).columnwidth=10 7、RANGE函数,选定单元格区域range(cells(1,1),cells(10,20)) & 设置EXCEL字体 xsheet.range(cells(1,1),cells(10,20))https://www.doczj.com/doc/7314488917.html,=" 黑体" 9、设置EXCE S L 粗体 xsheet.range(cells(1,1),cells(10,20)).fontbold=true 10、设置EXCEI表格边框 xsheet.range(cells(1,1),cells(10,20)).borders.linestyle=xlcontinu ous 11 、运行时,显示EXCE S L 隐藏EXCEL x.visible=true 12、保存工作簿

xbook save 13、退出EXCEL x.quit 14、交还控制权给EXCEL set x=nothing 15、打印EXCEL表 x.active.window.selectedsheets.printout copies=numcopies 16、退出EXCEL寸,不出现保存提示。 x.displayalerts=false 17、怎样运用EXCEI公式? x.range("A3").formula= "=max(A1,A2)" 18、E XCEL弋码获取技巧 打开EXCEL中的工具----宏----录制新宏,然后进行手工操作,结束后把所的宏代码贴进你的VB程序就行。 19、合并单元格弋码x.range("A2:A5").inergecells=true 20、自动调整列宽代码 x.column("A:I").autofit ' a 到I 列自动调整列宽 21、文本自动换行代码 x.rows(3).wraptext=true 22、设置字体颜色 x.rows(1).font.colorindex=4

VB程序设计课程设计报告

《VB程序设计》 课程设计报告 (2016 —2017 学年第1学期) 题目:______________ 排序演示_____________________________ 学院: _______ 经济与管理学院_________________ 班级: __________ 物流管理1502 __________________ 学号: ____________________________________ 姓名:_________________________________ 指导教师: __________ 阮冰_______________________ 时间:起2017年1月3日止1月6日

一、课程设计基本信息 课程代码: 课程名称:计算机基础课程设计 课程英文名称:Computer-based Course Design 课程所属单位(院(系)、教研室):数学与计算机学院计算机基础课程群 课程面向专业:生物科学类、制药工程、制药工程(生物制药卜药物制剂、物流管理 课程类型:必修课 先修课程:大学计算机基础通识选修课程、Visual Basic程序设计课程 学分:1 总学时:16 二、课程设计目标 掌握所学语言程序设计的方法,熟悉所学语言的开发环境及调试过程,熟悉所学语言中 的数据类型,数据结构、语句结构、运算方法,巩固和加深对理论课中知识的理解,提高学生对所学知识的综合运用能力。通过综合设计要求达到下列基本技能: 1 ?培养查阅参考资料、手册的自学能力,通过独立思考深入钻研问题,学会自己分析、解决问题。 2 ?通过对所选题目方案分析比较,确立方案,编制与调试程序,初步掌握程序设计的方法,能熟练调试程序。 3?系统设计编程简练,可用,功能全面,并有一定的容错能力。用户界面良好,有较好的输出功能。在完成课题基本要求后,具有创新型设计,具有一定的实用价值。 4 ?根据个人的设计调试过程,撰写设计报告。 三、课程设计内容 利用已掌握的VB程序设计语言基础,以及面向对象的程序设计方法、事件驱动的编程方式,进行应用程序和系统的开发设计。在强化巩固已有编程知识基础之上,训练新的设计 与编程思路,通过综合应用所学知识设计、编制、调试实用的Visual Basic程序。 四、课程设计要求 1. 要求每个同学都要认真对待,积极参与。 2. 课程设计结束时,提交完成的所有源程序、相关文件和可执行文件。同时填写并完成《课程设计报 告册》。 3. 不符合要求的程序、设计报告、抄袭的设计报告或源程序代码、在设计中完全未参 与的将作不及格处理。 五、考核方式 指导老师负责验收程序的运行结果,并结合学生的工作态度、实际动手能力、创新精神 和设计报告等进行综合考评,百分制计算,具体考核标准主要包含以下几个部分: 1. 程序运行情况20分 2. 程序功能的完善程度10分 3. 程序结构的合理性10分 4. 对问题的答辩情况20分

在VB6.0中实现动态统计报表

在VB6.0中实现动态统计报表 在利用VB开发MIS系统的过程中,经常需要制作动态统计报表。本文就如何实现动态数据源下的分组交叉统计报表进行阐述,并结合实例给出编程指导。 在VB6.0的数据环境设计器中,我们可以利用“添加命令”一项来连接报表所需的数据源,同时利用“添加命令”属性中的分组与合计功能设计分组交叉统计报表的数据源,至此我们可以设计简单的数据存在于单一表静态数据源下分组交叉报表,对于数据存在多表的复杂的动态数据源下的分组交叉报表来说,仍实现不了,实现该功能的关键在于构造一个符合动态数据源要求的中间表。下面以一管理系统中工程成本统计报表的实例来说明如何实现动态数据源下的分组交叉统计报表。 一、报表要求与分析 该报表要求列出在指定的时间段内实施的各项工程所耗器材明细、数量、费用,并且计算各项工程的成本,最终计算所有工程的累计成本。 需求分析后可知该报表是个典型的动态数据源下分组统计报表,分组项为工程名称,要求对每个分组进行子汇总和对所有分组进行总汇总。由于在该系统中的出库单和出库单明细分别存放在不同的表中,因此必须根据报表的要求预先构造一个成本统计中间表,命名为EquipMentCost。相关表结构如图1。 通过对表OutBill和OutBillDetail的分析,发现两者通过关键字OutBill 相联,下面通过SQL语句生成中间表EquipmentCost,语句如下: Insert into EquipmentCost

(Project,Name,Standard,Type,Num,Cost) select a.project as 'Project', https://www.doczj.com/doc/7314488917.html, as 'Name',b.standard as 'Standard', b.type as 'Type',b.num as 'Num', b.num b.price as 'Cost' from Outbill a left join OutbillDetail b on (a.outbill=b.outbill) where a.OutDate>=date1 and a.OutDate<=date2 date1 和date2 变量用来指定时间,注意插入前要先清空该中间表的所有数据。 二、利用数据环境设计器生成工程成本报表的初始模板 打开一个数据环境设计器,在其属性表单中设置其名称属性为EnvCatv,并添加一个数据库连接到当前库Catv,连接名称为CatvConn。在当前库连接下单击右键,选择“添加命令”选项,创建一个命令,命名为CmdCost,在该命令的属性页的“通用”选项页上设置SQL语句如下: Select from EquipmentCost 单击“应用”按钮察看效果。 随后对该命令进行分组,右键单击该命令,选择“属性”选项,在属性页的“分组”选项页中,将Project(工程名称)字段设置为分组字段,分组名称为GroupCost,单击“应用”按钮观看效果。 接着对该命令进行子汇总,右键单击该命令,选择“属性”页的“汇总”选项页,将Num(器材数量)、Cost(器材成本)设置为子汇总字段,分别命名为“合计1”、“合计2”,汇总名称为

VB中报表的使用方法

Option Explicit Private Sub DataReport_Initialize() Dim cnn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim str As String Dim strsql As String str = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source= " & App.Path & "\db1.mdb " cnn.Open str rs.CursorLocation = adUseClient strsql = "select * from table1 " rs.Open strsql, cnn, adOpenDynamic, adLockOptimistic Set DataReport1.DataSource = rs DataReport1.Sections(1).Controls( "Text1 ").Caption = rs.Fields(1) DataReport1.Sections(2).Controls( "Text2 ").Caption = rs.Fields(2) DataReport1.Sections(3).Controls( "Text3 ").Caption = rs.Fields(3) DataReport1.Sections(4).Controls( "Text4 ").Caption = rs.Fields(4) End Sub 在报表中定义可四个RptTextBox控件.而且与都与数据库绑定了。运行看不到结果。老说下标越界 DataReport1.Sections(1).Controls(1).Caption = rs.Fields(1) controls(1);1表示你在报表上画它时的顺序.

VB通用数据表格输出程序的设计.

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。 (2) Recordset 对象的RecordCount属性为结果集的行数,它决定了表格的长度,该属性引用方法为: MyData.Recordset.RecordCount。 (3) Recordset 对象包含一个Fields集合,通过Fields集合的Count属性可以得到结果集中字段的个数,用做表格的列数,该属性引用方法为: MyData.Recordset.Fields.Count。 (4) Fields集合包括结果集合全部Field对象,这些Field对象引用方法为:MyData.Recordset.Fields(i),其中i是该Field对象在中的位置序号,从0开始计数。 (5) Field 对象的Name属性是该字段的名称,用做表格对应列的名称,引用方法为:MyData.Recordset.Fields(i).Name。 (6) Field 对象的Size属性是该字段数据的最大尺寸,引用方法为:MyData.Recordset.Fields(i).Size。 (7) Field 对象的Type属性是该字段数据的类型,引用方法为:MyData.Recordset.Fields(i).Type。 用Field 对象的Size和Type属性可以计算出表格对应列的宽度。 (8) Field 对象的Value属性是该字段的值,这是表格对应列的内容,引用方法为:MyData.Recordset.Fields(i).Value。

自己用vb制作类似电子表格的可输入控件

自己用vb制作类似电子表格的可输入控件 应朋友之邀,准备制作一个工程软件,我首选用Visual basic 6.0语言工具来编程,可是 在编程的过程中发现需要输入输出大量数据的控件,像MSFlexGrid, MSHFlexGrid, DataGrid 等不能像Excel 中电子表格那样直接输入数据,可愁坏了我,于是在网上搜罗一翻,把那些 个代码进行了调试,还不能使自己满意,靠别人还不如靠自己,运用别人的灵感加上自己的 努力,我终于把MSFlexGrid控件给进行了改造,自己感觉挺满意的,就把自己的改造心德 写成文字,分享给那些喜欢编程的童鞋们参考。 基本思路: 1.MSFlexGrid控件不能直接进行数据输入,我用一个文本框代替单元格的输入工作。 2.当任何一个单元格获得焦点时,文本框完全覆盖获得焦点的单元格,这样就不会像 MSFlexGrid控件的第一印象让人感觉生硬不爽。 3.鼠标点击单元格,上下左右健移动单元格时,文本框还要显示相应单元格的数据,基本 上是完全代替了获得焦点的单元格,这样,一个文本框的作用不仅仅是向单元格输入,还会起到显示数据的作用。 以上思路,其实就是这么简单,不多说,下面就是具体编程过程,代码也很简单。 一,在窗体From1中添加,一个MSFlexGrid控件,一个文本框text1. 二,属性: 属性 控件名称height width Borderstyle RowHeightMin fixedcols rows cols Grid1 300 0 4 8 MSFlexGri d控件 Text控件Text1 280 1180 0 三,属性设置好了,现在就开始写代码。你也可以全部复制粘贴 Option Explicit Const Enter_Asc = 13 ‘首先需要声明一些常量 Const Tab_Asc = 9 Private Sub Form_Load() Dim i As Integer For i = 0 To Grid1.Cols – 1 ‘设置Grid控件的宽度 Grid1.ColWidth(i) = 1200 Next i For i = 0 To 7 Step 2 Grid1.TextMatrix(0, i) = "测点编号" '在Grid固定行添加列标题。 Next i For i = 1 To 7 Step 2 Grid1.TextMatrix(0, i) = "测点厚度(mm)" Next i End Sub Private Sub Grid1_Click() ‘下面这两句很关键,是指在Grid1控件单击事件发生时,Text1控件会在相应单元格上出 现 Text1.Left = Grid1.Left + (Grid1.ColWidth(0)) * Grid1.MouseCol

VB借助EXCEL实现表格设计全新

1、定义EXCEL对象变量 dim x as excel.application 2、VB中,启动EXCEL set x=createobject("excel.application") 3、新建一个EXCEL工作簿 x.workbooks.add 4、选定工作表1 set xsheet=xbook.worksheets(1) 5、指定单元格,并赋值 xsheet.cell(1,1)=ret.fields(0) 6、指定EXCEL列宽 xsheet.column(1).columnwidth=10 7、RANGE()函数,选定单元格区域 range(cells(1,1),cells(10,20)) 8、设置EXCEL字体 xsheet.range(cells(1,1),cells(10,20))https://www.doczj.com/doc/7314488917.html,="黑体" 9、设置EXCEL为粗体 xsheet.range(cells(1,1),cells(10,20)).fontbold=true 10、设置EXCEL表格边框 xsheet.range(cells(1,1),cells(10,20)).borders.linestyle=xlcontinu ous 11、运行时,显示EXCEL或隐藏EXCEL x.visible=true 12、保存工作簿 xbook save 13、退出EXCEL x.quit 14、交还控制权给EXCEL

set x=nothing 15、打印EXCEL表 x.active.window.selectedsheets.printout copies=numcopies 16、退出EXCEL时,不出现保存提示。 x.displayalerts=false 17、怎样运用EXCEL公式? x.range("A3").formula= "=max(A1,A2)" 18、EXCEL代码获取技巧 打开EXCEL中的工具----宏----录制新宏,然后进行手工操作,结束后把所录的宏代码贴进你的VB程序就行。 19、合并单元格代码 x.range("A2:A5").inergecells=true 20、自动调整列宽代码 x.column("A:I").autofit ' a到 I列自动调整列宽 21、文本自动换行代码 x.rows(3).wraptext=true 22、设置字体颜色 x.rows(1).font.colorindex=4 23、打印预览代码 x.worksheets.printpreview 24、打开EXCEL文件 x.workbooks.open filename:="c:\my documents\my vb \lgx \dy.xls" 1.生活如意,事业高升。 2.前程似锦,美梦成真。 3.年年今日,岁岁今朝。 4.百事大吉,万事顺利。 5.愿与同僚,共分此乐。 6.事业有成,幸福快乐。

相关主题
文本预览
相关文档 最新文档