数据库报表研究与设计
2014-04-29张红元
张红元
引 言:在数据库应用系统中,需要设计各种各样的报表,虽然可以利用数据库系统开发工具提供的报表工具设计报表,但制作的报表样式非常单一或不能生成复杂的报表。
Microsoft公司的Excel是一个非常优秀的表格处理软件,它为用户提供了非常丰富的表格处理工具和菜单命令,利用它强大的函数功能和数据分析能力,能生成各种各样的报表,但需要手工完成,工作量很大。
Visual Foxpro9.0数据库管理系统可以管理各类数据,摆脱了传统手工计算、统计等一系列的繁琐工作,但报表设计能力较弱。把Visual Foxpro9.0强大的数据管理功能和Excel强大的表格处理功能结合起来,就可以制作复杂的报表。通过在Visual Foxpro9.0中利用OLE技术,在程序中直接启动Excel,从数据表中接收数据,并完成报表的打印工作。
一、利用VisualFoxPro9.0提供的报表向导和报表设计器工具设计报表
1 利用报表向导设计报表
报表向导共有6个步骤完成报表设计:字段选取、分组记录、选择报表样式、定义报表布局、排序记录、完成等6个步骤。通常情况下,直接使用向导所获得的报表样式比较单一,且不能满足要求,需要使用报表设计器进一步的修改。
2 利用报表设计器设计报表
Visual FoxPro9.0提供的报表设计器允许用户通过直观的操作直接设计报表,或修改报表向导创建的报表。在实际应用中,往往通过快速报表或报表向导先创建一个简单报表,然后再利用报表设计器进行修改。
以上方法创建的报表,在报表样式和复杂度上都受到一定的限制。另一方面,通过交互式方法创建的报表不便于编程。下面介绍一种新的方法,利用Visual FoxPro9.0的OLE技术和Excel设计复杂的报表。
二、复杂报表的设计
1 设计原理
利用Visual FoxPro9.0的OLE技术,把Excel当作一个对象嵌入到应用程序中,通过面向对象程序设计来控制Excel对象,将所需要的数据输入到Excel的单元格,再利用Excel强大的表格功能,设计出所需要的复杂报表。
程序设计所需要的对象、属性和方法程序,如表1~表3所示。
表1 对象集
对象名称 说明
Application Excel应用程序
Workbooks Excel工作薄对象
表2 方法集
对象名 方法 说明
Application Cells 存取或返回某单元格的内容
Range 存取或返回某一范围的单元格
Save 激活存储文件对话框
Quit 退出ExcelApplication
Workbooks Add 增加一个工作薄
表3 属性集
对象名 属性 说明
Application Application Visible属性值为.T.时,Excel OLE对象允许显示
Value 存取或返回存储文件的内容
2 具体操作方法
(1)生成Excel对象(Excelobject)
使用CREATEOBJECT( )函数产生一个OLE对象。语句代码如下:
Excelobject= CREATEOBJECT(/Excel.Application")&&产生一个Excel OLE对象,并把Excel调入内存。
(2)增加工作簿(Workbooks)
调用工作簿对象Workbooks的Add方法。语句代码如下:
Excelobject.Workbooks.Add &&Excel中增加一个新的工作簿,默认由3个空白工作表构成
(3)向工作表(Worksheets)输入数据
调用工作表对象Worksheets的方法Cells( ),然后给相应单元格的Value属性赋值。语句代码如下:
Excelobject.Workbooks(1).Worksheets(1).Cells(i,j).Value=<表达式>
如果要把数据库表中的数据输入到Excel单元格中,只需先从数据库表中查询出数据,然后再按照上面的方法把每条记录中的字段值赋给相应的单元格。示例如下:
要把学生成绩表中的数据在Excel表格中显示,通过以下程序代码实现:
成绩表结构如下:
Chengji(学号,姓名,英语,高数,总分,名次)
Excelobject= CREATEOBJECT("Excel.application")
Excelobject.Visible=.T.&&使Excel可见
Excelobject.Workbooks.Add
Excelobject.Workbooks(1).Worksheets(1).Cells(1,1).Value="学号"
Excelobject.Workbooks(1).Worksheets(1).Cells(1,2).Value="姓名"
Excelobject.Workbooks(1).Worksheets(1).Cells(1,3).Value="英语"
Excelobject.Workbooks(1).Worksheets(1).Cells(1,4).Value="高数"
Excelobject.Workbooks(1).Worksheets(1).Cells(1,5).Value="总分"
Excelobject.Workbooks(1).Worksheets(1).Cells(1,6).Value="名次"
Selecte Chengji
H=2
L=1
Go Top
Do While ! eof( )
Excelobject.Workbooks(1).Worksheets(1).Cells(H,l).Value=Chengji.学号
Excelobject.Workbooks(1).Worksheets(1).Cells(H,L+1).Value=Chengji.姓名
Excelobject.Workbooks(1).Worksheets(1).Cells(H,L+2).Value=Chengji.英语
Excelobject.Workbooks(1).Worksheets(1).Cells(H,L+3).Value=Chengji.高数
Excelobject.Workbooks(1).Worksheets(1).Cells(H,L+4).Value=Chengji.总分
Excelobject.Workbooks(1).Worksheets(1).Cells(H,L+5).Value=Chengji.名次
H=H+1
SKIP
Enddo
(4)设置单元格的格式
数据输入到Excel中后,就可以利用Excel强大的表格功能编辑报表。通过程序代码可以设置表格。
(5)打印Excel表格
通过编程实现,程序代码如下:
Excelobject.Workbooks(1).Worksheets(1).Printout() &&打印第一个工作表
(6)工作表的保存
通过编程实现工作表的保存。程序代码如下:
Excelobject.Save("D:Chengji.xls") &&表示保存到D盘根目录下,保存的文件名是Chengji.xls
(7)退出Excel
通过编程实现,程序代码如下:
Excelobject.Quit
三、结 语
重点介绍了在Visual FoxPro9.0中,利用Microsoft OLE技术和Excel表格处理软件,通过面向对象程序设计生成复杂的报表。实践证明,该方法在实际应用中非常有效。
参考文献
[1]史济民,汤观全.Visual Foxpro及其应用系统开发[M].北京:清华大学出版社,2003.
[2]史嘉林.VFP编程技巧研究[J].电脑编程技巧与维护,2012,12.
[3]李雁翎.Visual Foxpro应用基础与面向对象程序设计教程[M].北京:高等教育出版社,1999.
[4]朱扬清.VFP与Excel协同设计应用系统报表研究 [J].电脑知识与技术,2011,20.
[5]衡红军,樊玮.VFP环境下统计图绘制方法研究[J].计算机应用,2001,21(8):24 26.
[6] 魏评. 基于VFP的远程SQL Server数据库报表的设计 [J]. 计算机与现代化,2013,01.