邵英安
摘要:本文介紹了在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.