萬為清
一、引言
數(shù)據(jù)庫在日常生活生產(chǎn)中大量使用,也出現(xiàn)了各種數(shù)據(jù)庫管理系統(tǒng)如ACCESS、SQL SERVER、ORACLE等。但這些數(shù)據(jù)管理系統(tǒng)不能開發(fā)出適合人們應用的Windows應用程序。而VC能將關系數(shù)據(jù)庫和OOP(面向對象)編程方法結合起來,做出具有強大的數(shù)據(jù)管理能力和靈活適用的應用程序。VC操縱數(shù)據(jù)庫的常用方法有ODBC、DAO、ADO、OLE DB等幾種方法,其中最適合教學和工程應用軟件開發(fā)的是ADO的方法。ADO技術是基于OLE DB的訪問技術,它繼承了OLE DB的技術優(yōu)點,并且將OLE DB的接口作了封裝,定義了ADO對象,使程序開發(fā)得到簡化?;贏DO技術的應用程序可以通過一致的接口來訪問各種各樣的數(shù)據(jù),不需要關心數(shù)據(jù)存放位置,也不需要進行數(shù)據(jù)轉移、復制、轉換,在實現(xiàn)分布式數(shù)據(jù)庫應用上有很大的優(yōu)勢。下面通過一個簡易學生管理程序來敘述VC用ADO方式操縱Access數(shù)據(jù)庫的方法,和開發(fā)數(shù)據(jù)庫應用程序的基本過程。
二、程序實現(xiàn)代碼及步驟
1、創(chuàng)建ACCESS數(shù)據(jù)庫
在Access2000中創(chuàng)建一個數(shù)據(jù)庫db1,并創(chuàng)建一個數(shù)據(jù)表stu,添加2個字段(xh,文本型,字段大小10)(xm,文本型,字段大小10)。輸入幾條記錄用于讀寫測試。
2、創(chuàng)建基于對話框的應用程序
用APP Wizard創(chuàng)建一個基于對話框的應用程序Adodb2010。
3、引入ADO函數(shù)庫
在Stdafx.h結尾處添加引入msado15.dll的語句。
#import " msado15.dll msado15.dll" no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF")
4、在窗體上放置控件
在對話框上放置相應的各控件。
5、連接數(shù)據(jù)庫和數(shù)據(jù)表
在初始化函數(shù)中連接數(shù)據(jù)庫和數(shù)據(jù)表。
代碼如下:
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、各個按鈕的功能函數(shù)
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數(shù)據(jù)表中
_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數(shù)據(jù)庫具體方法,對數(shù)據(jù)庫和數(shù)據(jù)表進行連接、查詢、插入、刪除、修改等操作。在實際工程軟件開發(fā)項目中對以上應用程序略加修改,加上ListView表格控件就可以生成功能更完善的學生管理軟件。也可以將連接ACCESS數(shù)據(jù)庫的方法修改一下,連接SQL SERVER數(shù)據(jù)庫,做成網(wǎng)絡數(shù)據(jù)庫應用軟件。目前該方法已經(jīng)在省電腦大賽訓練教學和工程軟件開發(fā)得到大量使用,取得了很好的效果。
參考文獻:
[1]鄭阿奇,Visual C++教程,機械工業(yè)出版社,2004
[2]黃慶生,精通VISUAL C++ 6.0,人民郵電出版社 ,1999年6月
[3]宋耀文,ADO開發(fā)技術在Visual C++中的實現(xiàn),哈爾濱師范大學自然科學學報2003.5