萬為清
一、引言
數據庫在日常生活生產中大量使用,也出現了各種數據庫管理系統如ACCESS、SQL SERVER、ORACLE等。但這些數據管理系統不能開發出適合人們應用的Windows應用程序。而VC能將關系數據庫和OOP(面向對象)編程方法結合起來,做出具有強大的數據管理能力和靈活適用的應用程序。VC操縱數據庫的常用方法有ODBC、DAO、ADO、OLE DB等幾種方法,其中最適合教學和工程應用軟件開發的是ADO的方法。ADO技術是基于OLE DB的訪問技術,它繼承了OLE DB的技術優點,并且將OLE DB的接口作了封裝,定義了ADO對象,使程序開發得到簡化。基于ADO技術的應用程序可以通過一致的接口來訪問各種各樣的數據,不需要關心數據存放位置,也不需要進行數據轉移、復制、轉換,在實現分布式數據庫應用上有很大的優勢。下面通過一個簡易學生管理程序來敘述VC用ADO方式操縱Access數據庫的方法,和開發數據庫應用程序的基本過程。
二、程序實現代碼及步驟
1、創建ACCESS數據庫
在Access2000中創建一個數據庫db1,并創建一個數據表stu,添加2個字段(xh,文本型,字段大小10)(xm,文本型,字段大小10)。輸入幾條記錄用于讀寫測試。
2、創建基于對話框的應用程序
用APP Wizard創建一個基于對話框的應用程序Adodb2010。
3、引入ADO函數庫
在Stdafx.h結尾處添加引入msado15.dll的語句。
#import " msado15.dll msado15.dll" no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF")
4、在窗體上放置控件
在對話框上放置相應的各控件。
5、連接數據庫和數據表
在初始化函數中連接數據庫和數據表。
代碼如下:
CString strname;
strname.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db1.mdb;","","",adModeUnknown);
AfxOleInit();
AfxEnableControlContainer();
m_pConnection.CreateInstance("ADODB.Connection");
_bstr_t strConnect=strname;
m_pConnection->Open(strConnect,"","",adModeUnknown);
m_pRecordset.CreateInstance("ADODB.Recordset");
CString sql="SELECT * FROM stu";
m_pRecordset->Open((_variant_t)sql,m_pConnection.GetInterfacePtr(),adOpenStatic,adLockOptimistic,adCmdText);//
6、各個按鈕的功能函數
1)
void CAdodb2010Dlg::OnButton1()
{
m_pRecordset->MoveNext();
if(m_pRecordset->adoEOF)
m_pRecordset->MoveFirst();
CString m;
m=(char *)(_bstr_t)m_pRecordset->GetCollect("xh");
GetDlgItem(IDC_EDIT1)->SetWindowText(m);
m=(char *)(_bstr_t)m_pRecordset->GetCollect("xm");
GetDlgItem(IDC_EDIT2)->SetWindowText(m);
}
2)
void CAdodb2010Dlg::OnButton2()
{
//點擊“上一條記錄”顯示上一條記錄
m_pRecordset->MovePrevious();
if(m_pRecordset->adoBOF)
m_pRecordset->MoveLast();
}
3)
void CAdodb2010Dlg::OnButton3()
{
sql.Format("select * from stu where xh='%s'",s1);
m_pRecordset->Open(_variant_t(sql),_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
var = m_pRecordset->GetCollect("xm");
m=(char *)(_bstr_t)m_pRecordset->GetCollect("xm");
GetDlgItem(IDC_EDIT2)->SetWindowText(m);
}
4)
void CAdodb2010Dlg::OnButton4()
{//點擊“插入”,將當前編輯框中的學號和姓名插入到stu數據表中
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance("ADODB.Recordset");
CString sql,m1,m2;
GetDlgItem(IDC_EDIT1)->GetWindowText(m1);
GetDlgItem(IDC_EDIT2)->GetWindowText(m2);
sql.Format("Insert into stu (xh,xm) values ('%s','%s')",m1,m2);
_variant_t RecordsAffected;
m_pConnection->Execute((_bstr_t)sql,&RecordsAffected;,adCmdText);
}
5)
void CAdodb2010Dlg::OnButton5()
{
sql.Format("delete from stu where xh='%s'",m1);
_variant_t RecordsAffected;
m_pConnection->Execute((_bstr_t)sql,&RecordsAffected;,adCmdText);
}
7、最后點擊VC編譯器菜單中的Build下的Rebuild All,編譯并生成應用程序,得到我們前面看到的效果圖的應用程序。
三、結束語
本文通過一個簡易學生管理程序介紹了VC++6.0用ADO技術操縱Access數據庫具體方法,對數據庫和數據表進行連接、查詢、插入、刪除、修改等操作。在實際工程軟件開發項目中對以上應用程序略加修改,加上ListView表格控件就可以生成功能更完善的學生管理軟件。也可以將連接ACCESS數據庫的方法修改一下,連接SQL SERVER數據庫,做成網絡數據庫應用軟件。目前該方法已經在省電腦大賽訓練教學和工程軟件開發得到大量使用,取得了很好的效果。
參考文獻:
[1]鄭阿奇,Visual C++教程,機械工業出版社,2004
[2]黃慶生,精通VISUAL C++ 6.0,人民郵電出版社 ,1999年6月
[3]宋耀文,ADO開發技術在Visual C++中的實現,哈爾濱師范大學自然科學學報2003.5