APP下载

基于MFC与Access的Word报表的设计与实现

2015-02-10邵英安

关键词:报表

邵英安

摘要:本文介绍了在VC++中利用Access数据库,读取数据并且调用VBA对象来制作复杂Word报表的方法,以及通过具体一个动态复杂报表实例给出了详细设计的实现过程。

關键词:VC++ Access VBA 报表

0 引言

Visual C++作为一种可视化编程平台,其一,代码框架自动生成,用户交互强,可开发多种领域的应用程序,并支持数据库接口ODBC,以及OLEDB、ADO数据库访问等,直接调用底层的驱动程序对各种主流数据库进行访问,进而在一定程度上提高编程效率。其二,VC++提供了ADO和OLE技术,并为开发者提供了系统控件及第三方控件,从而实现程序的模块化。其中ADO是数据库程序开发接口,主要通过数据访问层OLE DB Provider提供的COM接口访问数据,优化了数据访问的过程,增加了数据访问的灵活性,是数据库主流的数据访问接口,加大了简化程序开发难度。VBA是通用的宏语言,其具有方便灵活高效的特点,并且可被所有的Microsoft 可编程应用软件如Visual C++所共享,即多种应用程序使用统一的标准宏语言,极大地提高了编程人员在编程和源代码上调试的工作量,提高了工作效率,增强了各种应用软件之间的协调开发和调用能力。

1 实验平台搭建

1.1 初始化ADO环境:创建一个MFC的一个工程,导入ADO动态链接库在stdafx.h文件

#import "C:/Program Files/Common Files/System/ado/msado15.dll"no_namespace rename("EOF", "adoEOF")rename("BOF", "adoBOF")然后,并在应用程序对象类的成员函数中BOOL CXXApp::InitInstance()中::CoInitialize(NULL); //以单线程的方式初始化COM对象。

1.2 声明三个接口,根据数据类型来创建三个智能指针对象,分为指向:连接对象(Connection)、命令对象(Command)和记录集对象(RecordSet),其接口为_ConnectionPtr接口、_CommandPtr接口、_RecordsetPtr接口。其中_ConnectionPtr接口:返回一个记录集或一个空指针。_CommandPtr接口:该接口返回一个记录集,用来执行返回记录集的存储过程和SQL语句。_RecordsetPtr接口:该接口是一个记录集对象,可以对记录集进行记录锁定、触发器、游标控制等。

_ConnectionPtr m_pConnection ;

_RecordsetPtr m_pRecordset ;

_RecordsetPtr m_pRecordsetFind ; //记录集对象查找指针。

1.3 创建Connection对象,并设置数据源,访问数据库,并给出捕获异常完整代码

try

{m_pConnection.CreateInstance("ADODB.Connection"); //创建连接对象实例

_bstr_t strConnect="DRIVER={Microsoft Access Driver (*.mdb)}; uid=;pwd=;DBQ=数据库.mdb;";

m_pConnection->Open(strConnect,"","",adModeUnknown);

}

catch (_com_error e)//捕捉错误

{ AfxMessageBox(e.Description()); //弹出错误

CString mErrorMessage;

mErrorMessage.Format("连接数据库失败!\r\n错误信息:%s",e.ErrorMessage());

AfxMessageBox(mErrorMessage);///显示错误信息

return FALSE;

}

1.4 初始化VBA环境

1.4.1 OFFICE组件库:按下快捷键Ctrl+W,弹出

MFC ClassWizard对话框,单击Add Class…,选择From a type library…,弹出Import from Type Library对话框,找到OFFICE软件的安装文件夹,在其中找到MSWORD.OLB(Microsoft Office Word 2003 MSWord.olb)打开,在选类的对话框中中按下Ctrl键选中所要选中的类,单击确定。

1.4.2 导入本工程所需要的头文件:在实际的应用过

程当中,我们主要采用以下几个类来进行开发,引入头文件#include "msword.h",Application:代表Microsoft Word 应用程序,其中包含可返回最高级对象的属性和方法。例如:

Documents:由 Word 当前打开的所有 Document(文档)对象所组成的集合。

Document:代表一篇文档。Document对象是

Documents 集合中的一个元素。

Selection:该对象代表窗口或窗格中的当前所选内容。一个应用程序中只能有一个活动的文档窗格,一个文档窗格只能以一个活动Selection对象。

1.4.3 创建Word文档

首先,创建三个变量:COleVariant vTrue((short)TRUE); //真COleVariant vFalse((short)FALSE); //假COleVariant vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);

WordApplication::_Application oWordApp; //开始一个新的Microsoft Word实例

if (!oWordApp.CreateDispatch("Word.Application", NULL))

{AfxMessageBox("先安装Office2003,Createfailed."); return; }

//创建一个新的word文档

WordApplication::Documents oDocs=oWordApp.GetDocuments();

WordApplication::_Document oDoc=oDocs.Add(vOpt,vOpt,vOpt,vOpt); //创建_Document对象

WordApplication::Selection oSel = oWordApp.GetSelection();//创建Selection 对象

WordApplication::_ParagraphFormat wordFormat=oSel.GetParagraphFormat();//创建_ParagraphFormat对象

1.4.4 创建Word报表的格式

创建表的标题行、设置字体大小、设置字体类型、文本居中对齐,并通过打开数据库中指定的表,通过_RecordsetPtr记录集对象中的GetItem读取相应的数据,显示在指定的数据控件上。

1.4.5 计算报表中数据

首先,定义两个数组用来存储将小写金额转换成大写金额,并对所有的物资金额进行统计运算,并且将金额相应转化成大写形式。其相应宏命令如下:

Selection.InsertFormula Formula:="=SUM(ABOVE)",NumberFormat:="#,##0.00"進行对输入表格中的数据时行运算, 显示文档并激活文档,保存word文档,释放所有对象。

1.4.6 最终生成的数据报表

2 结束语

本文介绍了如何在VC++中利用MFC和VBA,并结合数据库ACCESS来生成复杂数据报表的编程思想和具体详细的实现过程。实践证明本文所提供的方法,可以快速高效地创建复杂的数据报表,有助于提高编程的效率。

参考文献:

[1]李娅.清江防洪与梯调仿真系统数据库设计研究[D].华中科技大学,2004(04).

[2]任庆臻.基于IEC62305雷击灾害风险评估系统的设计[D].吉林大学,2010(04).

[3]刘晓华.精通MFC[M].电子工业出版社,2003.

[4]赵辉,叶子青.Visual C++系统开发实例精粹[M].人民邮电出版社,2005.

猜你喜欢

报表
LabWindows/CVI中Excel报表技术研究
公司集团合并报表的编制
从三大报表读懂养猪人的成绩单
镇长看报表
月度报表
月度报表