APP下载

无数据库报表打印的研究与实现

2009-01-05

科技传播 2009年21期
关键词:大渡口区数组报表

夏 平 张 永

摘要 在一些进行数据计算的应用程序中,有时会生成有规律的数据,报表会把数据按需要的形式输出,但报表一般都是跟数据库联合在一起使用的,这样会对用户使用带来不便。本文结合作者本身进行程序开发的实践经验,简要介绍了实现无数据库报表打印的一般实现方法,重点对数组与记录集的通信方法进行了探讨。

关键词 无数据库;报表;实现;VB6.0

中图分类号 TP392 文献标识码 A 文章编号 1674-6708(2009)07-0011-02

0 引言

在不使用数据库技术的应用程序中,对计算得到的数据,如果符合表格特征,也可以像使用数据库技术一样,利用报表输出令用户满意的结果文件。

解决以上问题的核心是记录集对象。一般来说,记录集是负责在数据库和应用程序(也包含报表)之间通信的一个重要媒介。如果我们能将有规律的表格数据提供给记录集,那就可以实现使用报表的目标了,对于报表来说,它并不会关心数据的来源是否是数据库。在实际的程序设计中,二维数组或结构体数组等都是符合条件的有规律的表格数据。

本文结合实际,简要介绍了在VB6.0开发环境中如何实现无数据库报表打印功能。

1 技术实现过程

在某个应用系统开发过程中,需要将结构体数组中的数据使用报表输出。大体的解决步骤是:先计算出数组中的数据,然后按数组的结构构造出空的记录集结构,将数组中的数据追加到记录集中,最后利用VB6.0自带的报表输出。完整的实现过程使用代码描述如下:

1.1 记录集定义及数组初始化

'定义初始记录集,可以放在公共模块中定义

Public rsobj As New Recordset

'定义结构体,可以放在公共模块中定义,为简单起见本结构体仅含有5个元素

Public Type typUser

Toothid As Integer

Caliber As Double

SideAngle As Double

THeight As Double

ApAngle As Double

End Type

'定义动态数组,用来保存计算的结果数据,可以放在公共模块中

Public CatNum() As typUser

'在使用的时候使数组长度初始化,“ToothNum”为一预先计算值,加20是为了保证数组有足够的容量

ReDim CatNum(ToothNum + 20)

'数组0行数据初始化,此处数组的数据计算是依据某种算法,读者不必关注

CatNum(0).Toothid = 0

CatNum(0).Caliber = ToothDis / 2

CatNum(0).ApAngle = Atn((ToothDis / 2) / Focal)

CatNum(0).SideAngle = (Atn((Sin(CatNum(0).ApAngle)) / (n1 - Cos(CatNum(0).ApAngle))))

CatNum(0).THeight = Tan(CatNum(0).SideAngle) * ToothDis

'使用循环结构计算余下的数据行

For i = 1 To ToothNum - 1

CatNum(i).Toothid = (CatNum(i - 1).Toothid + 1)

CatNum(i).Caliber = ((ToothDis / 2) + (i * ToothDis))

CatNum(i).ApAngle = (Atn(CatNum(i).Caliber / Focal))

CatNum(i).SideAngle = (Atn((Sin(CatNum(i).ApAngle)) / (n1 - Cos(CatNum(i).ApAngle))))

CatNum(i).THeight = (Tan(CatNum(i).SideAngle) * ToothDis)

Next i

1.2 构造记录集并导入数据

' rptMemberInfo为报表控件名,本行代码为设置报表标头中某个标签项的输出信息,其余以此类推

rptMemberInfo.Sections("Section4").Controls("Label11").Caption = " " + ProdName

'从初始记录集按结构体数组格式构造出对应的记录集格式

rsobj.Fields.Append " Toothid ", adVarChar, 6'为记录集增加字段、指定数据类型和长度

rsobj.Fields.Append " Caliber ", adVarChar, 8

rsobj.Fields.Append " ApAngle ", adVarChar, 8

rsobj.Fields.Append " SideAngle ", adVarChar, 8

rsobj.Fields.Append " THeight ", adVarChar, 8

rsobj.Open

'利用循环将数组中的数据追加到记录集中

For i = 0 To ToothNum - 1'计算循环次数

rsobj.AddNew'增加空白新记录,然后从数组中导入数据

rsobj.Fields("Toothid ").Value = CatNum(i).Toothid

rsobj.Fields("Caliber ").Value = Format(CatNum(i).Caliber, "0.0000")

rsobj.Fields("SideAngle ").Value = Format((CatNum(i).SideAngle * 180) / Pi, "0.0000")

rsobj.Fields("THeight ").Value = Format(CatNum(i).THeight, "0.0000")

rsobj.Fields("ApAngle ").Value = Format((CatNum(i).ApAngle * 180) / Pi, "0.0000")

rsobj.MoveNext'移动指针至下一位置

Next i

1.3 实现数据报表输出

'将记录集作为报表的数据源,实现报表输出“rptMemberInfo”为报表控件名

Set rptMemberInfo.DataSource = rsobj.DataSource

With rptMemberInfo.Sections("Section1").Controls

For i = 1 To rptMemberInfo.Sections("Section1").Controls.Count

If TypeOf .Item(i) Is RptTextBox Then

.Item(i).DataMember = ""

.Item(i).DataField = rsobj.Fields(i - 1).Name

End If

Next i

End With

2 总结

有些时候,应用系统仅仅是计算数据,并不需要用到数据库。如果想使用报表来灵活输出数据,以上所介绍的技术将是一个不错的选择。当然,这种技术方法仅仅适用于类似VB6.0这样的传统开发工具,在某些可以将二维表格直接与报表关联的新型系统开发工具中,就不必这么麻烦的转换了。

参考文献

[1]蔡敏.Visual Basic数据库开发工程案例.人民邮电出版社,2007.

[2]李春葆.Visual Basic程序设计教程.中国人民大学出版社,2008.

[3]Microsoft Corporation.Visual Basic 6.0 Programmer's Guide.北京希望电子出版社,1999.

[4]刘颖,常晓波译.Visual Basic 6.0高级编程.清华大学出版社,2003.

重庆大渡口区科技奖励大会52万重奖科技工作者

近日,重庆市大渡口区政府召开的科技奖励大会,用52万元重奖科技工作者。

在奖励大会上,该区政府表彰了1名科技功臣、3名突出贡献科技工作者及12个科技项目,分别给予了2~6万元不等的奖励,奖励金额共计52万元。某街道工作人员在工作中创新,发明软件为残疾人提供个性化服务,获得了政府2万元奖励。此外,该区还成立了由重庆邮电大学副校长、教授李银国等13位专家组成的科技顾问团。据了解,顾问团成员今后将对企业进行技术诊断,对企业科技发展提出建设性意见,并参与企业申报的科技项目进行评审等。

科技奖励大会在全区科技工作者引起强烈反,许多科技工作者和科技顾问团成员纷纷表示,大渡口区科技奖励大会是在全区上下贯彻落实十七届四中全会精神、全力以赴攻坚“止滑促增”之际召开,此举必将激励更多的人投身于提高科技自主创新能力、建设创新型国家中来,必将为增强我区自主创新能力、增强战胜各种困难的信心和决心起到积极的推动作用。

科技顾问团副团长、重钢集团公司总经理刘加才表示:大渡口区此次重金奖励科技项目和科技人员,激励作用非常大,充分显示了区委、区政府对科技工作和科技工作者的一贯重视和关心。同时,他还从政府科技顾问的角度积极建言献策,提出“四点建议和希望”:一是希望大渡口区进一步创造条件,加强高科技人才引进工作;二是希望进一步发挥政府的引导和主导作用,加强产、学、研结合;三是希望进一步加强科技投入,特别要加大新型科研项目的投入;四是希望加强与市科委等市级部门的协调,整合各方资源,建立研发、成果转化平台建设,降低研发成本,促进企业发展。

“科技功臣”获得者——长征重工郑兴东在发言中讲到:非常感谢大渡口区委、政府给予的这个最高荣誉,他认为这个荣誉不仅是奖励给他个人的,更是奖励战斗在科技创新工作岗位上的所有同仁的。他说:没有科技创新,就没有长征重工的今天,就没有大渡口的迅猛发展的今天。

“突出贡献科技工作者”获得者——汤捷说:作为一名私营企业的科技工作者,被评选为突出贡献科技工作者感到无上荣光!随着社会的不断进步和发展,竞争会越来越激烈,企业发展如逆水行舟,不进则退,企业只有重视科技创新和技术进步,才能不断地发展和壮大。

重庆理工大学副校长、区科技顾问石晓辉会后说:大渡口如此隆重奖励科技工作者,对营造全社会尊重知识、尊重人才氛围非常有益,他深受启发,并建议大渡口区下一步要做好“产业”规划,发展占地面积小,产值高,税收多的高新技术企业;做好引智工作:做好产学研结合,设立专项,支持企业与科研院所合作的项目,将资金给科研院所,科研院所为企业做好智力支持。设立科技奖:对从事科学研究、成果转化进行专项奖励。

科技兴国,全民关注,一些普通群众会后也纷纷表示促动很大,原来以为科技创新离自己很远,是科学家的事,这次从科技奖励大会中看到了政府奖励的科技项目中还有与民生密切相关的项目,使他们深深感受到了:科技创新近在身边,处处留心都是学问。

猜你喜欢

大渡口区数组报表
雪公主
JAVA稀疏矩阵算法
大渡口区科协开展科普大篷车进校园
大渡口区科协开展科普联合行动
JAVA玩转数学之二维数组排序
大渡口区科协开展历史文化科普讲座
LabWindows/CVI中Excel报表技术研究
从三大报表读懂养猪人的成绩单
Excel数组公式在林业多条件求和中的应用
寻找勾股数组的历程