資源描述:
《VC++6.0中用ADO存取Access數(shù)據(jù)庫(kù)的一點(diǎn)總結(jié)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、事情是這樣的,我的女朋友想要對(duì)日常生活的開(kāi)銷做個(gè)記錄,以便控制花錢的尺度。看她每日用筆頭記錄,然后和我搶電腦用,曰:要用附件中的計(jì)算器統(tǒng)計(jì)結(jié)果,每每如此,不勝其煩,就給她做了一個(gè)個(gè)人家庭記帳系統(tǒng),一勞永逸解決問(wèn)題。期間用到了ADO操作Access數(shù)據(jù)庫(kù),在網(wǎng)上找了若干關(guān)于ADO的資料結(jié)合實(shí)踐總結(jié)了一點(diǎn)使用心得如下,供有相同需求的朋友參考:附帶了那個(gè)個(gè)人記帳系統(tǒng),運(yùn)行的界面如下:VC++下使用ADO編寫數(shù)據(jù)庫(kù)程序準(zhǔn)備:(1)、引入ADO類#import"c:programfilescommonfilessystemadomsado15.dll"o_n
2、amespacerename("EOF","adoEOF")(2)、初始化COM在MFC中可以用AfxOleInit();非MFC環(huán)境中用:CoInitialize(NULL);CoUnInitialize();(3)#import包含后就可以用3個(gè)智能指針了:_ConnectionPtr、_RecordsetPtr和_CommandPtr1.連接和關(guān)閉數(shù)據(jù)庫(kù)(1)連接例子:連接Access數(shù)據(jù)庫(kù)m_pConnection.CreateInstance(__uuidof(Connection));try{//打開(kāi)本地Access庫(kù)Demo.mdbm_pConn
3、ection->Open("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=Demo.mdb","","",adModeUnknown);}catch(_com_errore){AfxMessageBox("數(shù)據(jù)庫(kù)連接失敗,確認(rèn)數(shù)據(jù)庫(kù)Demo.mdb是否在當(dāng)前路徑下!");returnFALSE;}(2)、關(guān)閉//如果數(shù)據(jù)庫(kù)連接有效if(m_pConnection->State)m_pConnection->Close();m_pConnection=NULL;(3)、設(shè)置連接時(shí)間//設(shè)置連接時(shí)間-------------
4、----------------------pConnection->put_ConnectionTimeout(long(5));2.打開(kāi)一個(gè)結(jié)果集(1)打開(kāi),首先創(chuàng)建一個(gè)_RecordsetPtr實(shí)例,然后調(diào)用Open()得到一條SQL語(yǔ)句的執(zhí)行結(jié)果_RecordsetPtrm_pRecordset;m_pRecordset.CreateInstance(__uuidof(Recordset));//在ADO操作中建議語(yǔ)句中要常用try...catch()來(lái)捕獲錯(cuò)誤信息,//因?yàn)樗袝r(shí)會(huì)經(jīng)常出現(xiàn)一些意想不到的錯(cuò)誤。jingzhouxutry{m_pRecor
5、dset->Open("SELECT*FROMDemoTable",//查詢DemoTable表中所有字段m_pConnection.GetInterfacePtr(),//獲取庫(kù)接庫(kù)的IDispatch指針adOpenDynamic,adLockOptimistic,adCmdText);}catch(_com_error*e){AfxMessageBox(e->ErrorMessage());}(2)關(guān)閉結(jié)果集m_pRecordset->Close();3.操作一個(gè)結(jié)果集(1)、遍歷(讀取)a)、用pRecordset->adoEOF來(lái)判斷數(shù)據(jù)庫(kù)指針是否已經(jīng)
6、移到結(jié)果集的末尾了;m_pRecordset->BOF判斷是否在第一條記錄前面:while(!m_pRecordset->adoEOF){var=m_pRecordset->GetCollect("Name");if(var.vt!=VT_NULL)strName=(LPCSTR)_bstr_t(var);var=m_pRecordset->GetCollect("Age");if(var.vt!=VT_NULL)strAge=(LPCSTR)_bstr_t(var);m_AccessList.AddString(strName+"-->"+strAge);m_
7、pRecordset->MoveNext();}b)、取得一個(gè)字段的值的辦法有兩種辦法一是//表示取得第0個(gè)字段的值m_pRecordset->GetCollect("Name");或者m_pRecordset->GetCollect(_variant_t(long(0));二是pRecordset->get_Collect("COLUMN_NAME");或者pRecordset->get_Collect(long(index));(2)、添加a)、調(diào)用m_pRecordset->AddNew();b)、調(diào)用m_pRecordset->PutCollect();
8、給每個(gè)字段賦值c)、調(diào)用