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