生活随笔
收集整理的這篇文章主要介紹了
数据库编程入门培训(二)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
??????本文為數(shù)據(jù)庫編程入門培訓(xùn)的第二講,主要講述一下數(shù)據(jù)庫編程具體怎么實(shí)現(xiàn)。示例代碼在本文后面的附件中可以下載。
??????如上篇文章所描述的那樣,由于Microsoft Access數(shù)據(jù)庫比較直觀,適合初學(xué)者入門學(xué)習(xí),故我在此依然以Access為例,示范如何對(duì)數(shù)據(jù)庫進(jìn)行編程練習(xí); 而且,我使用的編程示例是基于Microsoft公司提供的Dao技術(shù),雖然該技術(shù)已經(jīng)早已過時(shí),但是由于它的編程簡(jiǎn)單、明晰,很適合初學(xué)者,故依然在此使用Dao技術(shù)做數(shù)據(jù)庫編程的示范,希望數(shù)據(jù)庫編程高手們能夠理解。
???????回顧上篇文章描述的,我們對(duì)數(shù)據(jù)庫的操作主要分為以下幾個(gè)方面:
????????? 1. 初始化/逆初始化數(shù)據(jù)庫引擎 (操作數(shù)據(jù)庫引擎)
??????????2. 創(chuàng)建/打開/關(guān)閉數(shù)據(jù)庫 (操作數(shù)據(jù)庫文件)
??????????3. 查找/打開/新增/刪除一個(gè)數(shù)據(jù)表 (操作數(shù)據(jù)庫的表)
????????? 4. 為一個(gè)新數(shù)據(jù)表添加字段,刪除字段,修改字段屬性 (操作數(shù)據(jù)庫的字段)
?????? ?? 5. 添加/刪除/修改一條記錄 (操作記錄集)
????????? 6. 根據(jù)條件檢索出滿足條件的記錄集 (查詢和檢索)
????????? 7. 其他:移動(dòng)到下一條記錄,獲取表的總個(gè)數(shù),獲取記錄的總數(shù)……
???????因此,我將通過示例代碼來實(shí)現(xiàn)上述的某些基本功能,具體的各個(gè)類各個(gè)函數(shù)的用法,大家可以自己查看MSDN,里面都有非常詳細(xì)的說明。
???????????????????#include?<afxdao.h> ?#include?<iostream> ??????#pragma?warning(disable?:?4995) ???????int?_tmain(int?argc,?_TCHAR*?argv[]) ?{ ??????????CDaoDatabase?m_db;???? ????????????????CDaoTableDef?m_tableDef(&m_db); ???????????CDaoRecordset?rs(&m_db); ???????????AfxDaoInit(); ???????????TRY ?????{ ?????????m_db.Create(_T("D:\\user.mdb"),dbLangGeneral,dbVersion30);???? ?????} ?????CATCH(CDaoException,?e) ?????{ ? // 通過這條語句可以將錯(cuò)誤描述字符串存儲(chǔ)到szError中
?? CString szError = e->m_pErrorInfo-> m_strDescription;????????std::cout?<<?"error?occur?!"?<<std::endl; ?????????return?0; ?????} ?????END_CATCH ???????????if?(!m_db.IsOpen()) ?????{ ?????????TRY ?????????{ ??????????????????????????m_db.Open(_T("D:\\user.mdb"),?TRUE,?FALSE,?_T("")); ?????????} ?????????CATCH(CDaoException,?e) ?????????{ ?????????????std::cout?<<?"error?occur?!"?<<std::endl; ?????????????return?0; ?????????} ?????????END_CATCH ?????} ???????????TRY ?????{ ?????????m_tableDef.Create(_T("登錄信息表")); ?????} ?????CATCH(CDaoException,?e) ?????{ ?????????std::cout?<<?"error?occur?!"?<<std::endl; ?????????return?0; ?????} ?????END_CATCH ???????????TRY ?????{ ??????????????????m_tableDef.CreateField(_T("學(xué)號(hào)"),dbText,200,dbVariableField|dbUpdatableField); ??????????????????m_tableDef.CreateField(_T("密碼"),dbText,200,dbVariableField|dbUpdatableField); ??????????????????m_tableDef.CreateField(_T("年齡"),dbLong,200,dbVariableField|dbUpdatableField); ???????????????????m_tableDef.Append(); ?????} ?????CATCH(CDaoException,?e) ?????{ ?????????std::cout?<<?"error?occur?!"?<<std::endl; ?????????return?0; ?????} ?????END_CATCH ???????????TRY?? ?????{?? ??????????????????rs.Open(&m_tableDef); ???????????????????if?(!rs.IsEOF()) ?????????{ ?????????????rs.MoveLast(); ?????????} ???????????????????rs.AddNew();?? ??????????????????rs.SetFieldValue(_T("學(xué)號(hào)"),_T("012006011208")); ??????????????????rs.SetFieldValue(_T("密碼"),_T("123456")); ??????????????????rs.SetFieldValue(_T("年齡"),_T("18")); ??????????????????rs.Update();?? ???????????????????rs.Close(); ?????} ?????CATCH(CDaoException,?e) ?????{ ?????????std::cout?<<?"error?occur?!"?<<std::endl; ?????????return?0; ?????} ?????END_CATCH ???????????TRY?? ?????{ ??????????????????rs.Open(&m_tableDef); ???????????????????rs.MoveFirst(); ??????????COleVariant?coleUserNo; ?????????COleVariant?colePassword; ?????????COleVariant?coleAge; ???????????????????rs.GetFieldValue(_T("學(xué)號(hào)"),?coleUserNo); ?????????rs.GetFieldValue(_T("密碼"),?colePassword); ?????????rs.GetFieldValue(_T("年齡"),?coleAge); ???????????????????LONG?age?=?coleAge.lVal; ???????????????????CString?szUserNo?=?V_BSTR(&coleUserNo);? ?????????CString?szPassword?=?V_BSTR(&colePassword); ???????????????????rs.Close(); ??????} ?????CATCH(CDaoException,?e) ?????{ ?????????std::cout?<<?"error?occur?!"?<<std::endl; ?????????return?0; ?????} ?????END_CATCH ????????? ??????????TRY ?????{ ?????????if?(m_db.IsOpen()) ?????????{ ?????????????m_db.Close(); ?????????} ?????} ?????CATCH(CDaoException,?e) ?????{ ?????????std::cout?<<?"error?occur?!"?<<std::endl; ?????} ?????END_CATCH ???????????AfxDaoTerm(); ??????std::cout?<<?"?數(shù)據(jù)庫文件已經(jīng)輸出到D://user.mdb"?<<?std::endl; ????? ?????int?temp; ?????std::cin?>>?temp; ??????return?1; ?} ? ????? 希望大家仔細(xì)閱讀上述代碼,并通過MSDN的幫助,真正對(duì)數(shù)據(jù)庫編程有一個(gè)直觀的認(rèn)識(shí),以后進(jìn)行其他類型的數(shù)據(jù)庫編程就可以很快地上手了。
??????為了檢驗(yàn)大家是否真正了解和掌握了數(shù)據(jù)庫編程,下面我出一道題目,希望大家依靠自己的能力把它實(shí)現(xiàn),權(quán)當(dāng)練習(xí)練習(xí)。
題目:簡(jiǎn)單的登陸系統(tǒng)
提供簡(jiǎn)單的注冊(cè)功能,注冊(cè)信息包括:
用戶名(不允許重復(fù)),登錄密碼,性別,年齡
使用Access數(shù)據(jù)庫存儲(chǔ)上述信息
程序提供如下功能:
1. 啟動(dòng)程序后,自動(dòng)創(chuàng)建數(shù)據(jù)庫文件、用戶信息表、相應(yīng)的字段
2. 能夠刪除數(shù)據(jù)表,然后重建數(shù)據(jù)表
3. 能夠新增一條用戶記錄
4. 能夠顯示數(shù)據(jù)庫中的全部用戶名
5. 能夠顯示指定用戶名的個(gè)人信息
6. 能夠刪除指定用戶名的記錄
7. 能夠修改指定用戶名的用戶的年齡
8. 能夠查詢顯示“年齡>18歲”的所有用戶名
?
?
總結(jié)
以上是生活随笔為你收集整理的数据库编程入门培训(二)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。