數(shù)據(jù)庫編程課件_第1頁
數(shù)據(jù)庫編程課件_第2頁
數(shù)據(jù)庫編程課件_第3頁
數(shù)據(jù)庫編程課件_第4頁
數(shù)據(jù)庫編程課件_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、第12章 數(shù)據(jù)庫編程 本章要點通過本章的學(xué)習(xí),使讀者: 使用ODBC類進行數(shù)據(jù)庫編程 自動注冊數(shù)據(jù)源的ODBC數(shù)據(jù)庫編程 數(shù)據(jù)庫表記錄的添加、刪除和修改等編輯功能 數(shù)據(jù)記錄查詢和排序12.1 學(xué)生成績管理系統(tǒng)12.1.1 系統(tǒng)介紹圖12-1是一個班級學(xué)生成績管理系統(tǒng),每個班有3個表:學(xué)生成績表、各科成績表和任課老師表。具有以下功能:(1) 數(shù)據(jù)庫表記錄的瀏覽;(2) 數(shù)據(jù)庫表記錄的編輯:添加、刪除和修改;(3) 記錄查尋:按查詢條件瀏覽記錄;(4) 記錄排序:在學(xué)生成績記錄表中,單擊字段名列表頭,可按升序或降序交替排序記錄。12.2 ODBC類的編程基礎(chǔ)12.2.1 ODBC的結(jié)構(gòu)ODBC由4

2、個部分組成,分別是 (1) 應(yīng)用程序(Application) (2) ODBC管理器(ODBC Manage) (3) ODBC驅(qū)動程序(ODBC Drivers) (4) 數(shù)據(jù)源(Data Sources) 應(yīng)用程序 ODBC管理器 ODBC驅(qū)動程序數(shù)據(jù)庫12.2.2 MFC提供的ODBC類CDatabase(數(shù)據(jù)庫類) CRecordset(記錄集類) CRecordView(可視記錄集類) CDBException(異常類) CFilelExchange(數(shù)據(jù)交換類) 12.2.3 應(yīng)用ODBC編程1. ODBC類編程的一般步驟使用ODBC類進行編程,一般步驟如下: (1) 連接數(shù)據(jù)源

3、。(2) 創(chuàng)建并執(zhí)行SQL語句。(3) 檢查結(jié)果記錄。(4) 斷開數(shù)據(jù)源。2. 數(shù)據(jù)記錄的基本操作(1) 增加記錄m_pSet-AddNew(); /增加記錄 /輸入新的字段值m_pSet-Update(); /將新記錄存入數(shù)據(jù)庫m_pSet-Requery() /重建記錄集 (2) 刪除記錄 m_pSet-Delete(); /刪除記錄m_pSet-Requery(); /重建記錄集(3) 修改記錄m_pSet-Edit(); /修改當(dāng)前記錄 /修改當(dāng)前記錄字段值m_pSet-Update(); /將新記錄存入數(shù)據(jù)庫m_pSet-Requery() /重建記錄集12.2.4 創(chuàng)建數(shù)據(jù)源(DS

4、N)1用ODBC數(shù)據(jù)源管理器,創(chuàng)建數(shù)據(jù)源2. 在應(yīng)用程序中注冊數(shù)據(jù)源SQLConfigDataSource(NULL, /不需要彈出對話框;ODBC_ADD_DSN, /添加數(shù)據(jù)源;“Microsoft Access Driver(*.mdb)”, /驅(qū)動程序名;“DSN=MyStudentOdbc0” /數(shù)據(jù)源名稱;“Description=This is a sample0” /數(shù)據(jù)源的說明;“FileType= Microsoft Access0” /數(shù)據(jù)源文件類型說明;“DBQ=D:MyVCMyODBC.mdb0” /數(shù)據(jù)源文件絕對路經(jīng)DEFAULTDIR=D: /默認(rèn)目錄為D:12.

5、3 創(chuàng)建“學(xué)生成績管理系統(tǒng)”應(yīng)用程序12.3.1 創(chuàng)建工程12.3.2 界面設(shè)計12.3.3 為控件引入變量12.3.4 實現(xiàn)班級表的選擇12.4 定義操作記錄集類的對象12.4.1創(chuàng)建CMyRecordSet類創(chuàng)建一個CRecordset類的派生類CMyRecordSet,用于操作數(shù)據(jù)庫的學(xué)生成績表。12.4.3創(chuàng)建CMyTeRecordSet類創(chuàng)建一個CRecordset類的派生類CMyTeRecordSet,用來操作數(shù)據(jù)庫的任課教師表12.4.2創(chuàng)建CMyObRecordSet類創(chuàng)建一個CRecordset類的派生類CMyObRecordSet,用于操作數(shù)據(jù)庫的學(xué)生科目表。12.4.4

6、定義操作記錄集類的對象(1) 在MyOdbcDlg.h文件中,添加如下包含文件:#include MyRecordSet.h(2) 在CMyOdbcDlg類中,定義操作ODBC記錄集類的對象,即添加語句:CMyRecordSet m_Set; /用于操作數(shù)據(jù)庫成績表CMyObRecordSet m_bSet; /用于操作數(shù)據(jù)庫科目表CMyTeRecordSet m_tSet; /用于操作數(shù)據(jù)庫任課教師表12.5注冊數(shù)據(jù)源,連接數(shù)據(jù)庫1編程要點(1) 在項目工程的StdAfx.h文件中,添加支持?jǐn)?shù)據(jù)庫和自動注冊數(shù)據(jù)源庫函數(shù)所需的頭文件:#include #include (2) 選擇數(shù)據(jù)庫文件,

7、調(diào)用SQLConfigDataSource()函數(shù), 注冊數(shù)據(jù)源。(3) 在CMyOdbcDlg類中,添加CDatabase 類對象(4) 利用CDatabase 類的OpenEx函數(shù)建立與數(shù)據(jù)庫的連接,并捕獲異常。2程序?qū)崿F(xiàn)添加“連接數(shù)據(jù)庫”按鈕的BN_CLICKED消息響應(yīng)函數(shù),在消息響應(yīng)函數(shù)中,編寫代碼實現(xiàn)如下功能:選擇數(shù)據(jù)庫文件; 調(diào)用SQLConfigDataSource()函數(shù), 注冊數(shù)據(jù)源;連接數(shù)據(jù)庫。12.6 實現(xiàn)數(shù)據(jù)庫記錄的顯示功能12.6.1 字段名的獲取與顯示1編程要點(1) 調(diào)用CRecordset類的GetODBCFieldInfo()成員函數(shù)獲取表信息CODBCFi

8、eldInfo Info; /定義結(jié)構(gòu)CODBCFieldInfo體變量InfoOpen(AFX_DB_USE_DEFAULT_TYPE,TableName); /打開數(shù)據(jù)庫表,讀取字段名信息存儲在結(jié)構(gòu)變量Info中GetODBCFieldInfo(int nItem, CODBCFieldInfo Info);Close(); /關(guān)閉記錄集(2) 從結(jié)構(gòu)變量Info中提取指定字段名CString m_sName = Info.m_strName; (3) 調(diào)用ClistCtrl類的InsertColumn()成員函數(shù),將字段名插入List控件的表頭顯示InsertColumn(int nIt

9、em, LPTSTR lpszText,LVCFMT_LEFT,int nWidth); 12.6.2 打開ODBC記錄集void CMyOdbcDlg:Select()if(m_Set.IsOpen()m_Set.Close();if(m_bSet.IsOpen()m_bSet.Close(); if(m_tSet.IsOpen()m_tSet.Close(); /打開學(xué)生成績表記錄集 CString str; str.Format(%sSTUDENT,m_Getstring); m_Set.Open(AFX_DB_USE_DEFAULT_TYPE,str); /打開科目表記錄集 str.F

10、ormat(%sOBJECT,m_Getstring); m_bSet.Open(AFX_DB_USE_DEFAULT_TYPE,str); /打開任課教師表記錄集 str.Format(%sTECHER,m_Getstring); m_tSet.Open(AFX_DB_USE_DEFAULT_TYPE,str);12.6.3 遍歷ODBC記錄集的數(shù)據(jù)1編程要點(1) 使用CRecordset類的Open()函數(shù),打開記錄集;(2) 使用CRecordset類的GetODBCFieldCount()函數(shù),求得記錄總數(shù);(3)調(diào)用CRecordset類的GetFieldValue()函數(shù),讀取當(dāng)

11、前記錄的指定字段的值;(4) 將讀取的字段值,調(diào)用ClistCtrl類的成員函數(shù)SetItemText(),插入到List控件中顯示;(5) 關(guān)閉記錄集。2程序?qū)崿F(xiàn)ShowStudentRecord(); /顯示學(xué)生成績ShowObjectRecord(); /顯示科目ShowTeacherRecord(); /顯示任課老師12.7 實現(xiàn)數(shù)據(jù)庫記錄的編輯功能主要包括:添加新記錄、刪除記錄和修改記錄。添加新記錄的算法分3步實現(xiàn):(1)創(chuàng)建記錄的錄入界面(2)將控件中錄入的數(shù)據(jù)構(gòu)造SQL語句(3)再寫入數(shù)據(jù)庫。12.7.1 創(chuàng)建“添加記錄”界面 12.7.2 創(chuàng)建CRecordADD類 12.7.

12、3 為“IDD_DIALOG_ADD”對話框中各Edit控件引入變量為了使各編輯框的值寫入數(shù)據(jù)庫的相應(yīng)字段,必須用MFC CassWizard為Edit Box編輯框控件:IDC_EDIT_NAME、IDC_EDIT_XUEHAO、IDC_EDIT_MATHS、IDC_EDIT_COMPUTER、IDC_EDIT_CPROGRAM、IDC_EDIT_DATABASE和IDC_EDIT_ENGLISH引入變量。為“IDD_DIALOG_ADD”對話框創(chuàng)建一個新類,類名為CRecordADD。12.7.4 實現(xiàn)記錄的添加功能 在MyOdbc工程中,實現(xiàn)“添加記錄”功能分3步完成:(1) 啟動“添加

13、記錄”用戶對話框,錄入記錄各字段值;(2) 將記錄各字段賦給學(xué)生記錄集(CMyRecordSet)對應(yīng)字段,完成記錄添加功能。(3) 修改科目表記錄。(4) 更新顯示學(xué)成績表和科目表記錄。1. 編程要點1 - 添加新記錄(1) 用CRecordset類的成員函數(shù)AddNew進入添加模式;(2) 填寫該記錄;(3) 調(diào)用函數(shù)Updata把添加的新記錄傳遞到數(shù)據(jù)庫的表中;添加新記錄的步驟 2. 編程要點2 - 修改記錄(1) 用CRecordset類的成員函數(shù)Edit進入修改模式;(2) 修改當(dāng)前記錄;(3) 調(diào)用函數(shù)Updata把修改后的記錄傳遞到數(shù)據(jù)庫的表中; 修改記錄的步驟 12.8 實現(xiàn)記

14、錄的查詢和排序功能有兩種實現(xiàn)記錄查找和排序方法:一種實現(xiàn)方法是使用SQL語言,另一種方法是使用ODBC。下面來介紹如何通過ODBC進行記錄的查詢和排序。12.8.1 預(yù)備知識(1) 在m_strFilter成員變量中設(shè)置篩選條件以實現(xiàn)Select語句中Where從句的功能;(2) 在m_strSort成員變量中設(shè)置排序字段以實現(xiàn)Select語句中Order by從句的功能;(3) 打開記錄集后,記錄的組成和順序就是確定的,為了對記錄重新篩選和排序,m_strFilter和m_strSort成員變量設(shè)置新值后,還必須重新打開記錄集或調(diào)用CRecordset類的Requery()方法。1記錄篩選的

15、示例代碼例如,查詢“計算機原理=80”的所有學(xué)生成績記錄,可用如下程序?qū)崿F(xiàn)。void CMyOdbcDlg:OnRecordFilter()m_Set.Open(AFX_DB_USE_DEFAULT_TYPE, TableName);m_Set.m_strFilter = 計算機原理=80; m_Set.Requery();ShowStudentRecord(); /顯示查詢結(jié)果2. 記錄排序的示例代碼例如,以“高等數(shù)學(xué)”為關(guān)鍵字段,進行升序排序,可用如下程序?qū)崿F(xiàn)。 void CMyOdbcDlg:OnRecordSort()m_Set.Open(AFX_DB_USE_DEFAULT_TYPE

16、, TableName);m_Set.m_strSort = 高等數(shù)學(xué) ASCm_Set.Requery();ShowStudentRecord(); /顯示排序結(jié)果12.8.2 創(chuàng)建“查詢條件”的界面1創(chuàng)建對話框資源2編輯對話框資源12.8.3 創(chuàng)建CRecordFIND類12.8.4 為CRecordFIND類添加成員 為了獲取在“查詢條件”對話框中設(shè)置的查詢條件,把“查詢條件”傳遞給CMyOdbcDlg類來處理,必須為各控件引入變量,同時在CRecordFIND類添加數(shù)據(jù)成員,作為數(shù)據(jù)傳遞的中間變量。12.8.5 實現(xiàn)記錄查詢功能void CMyOdbcDlg:OnButtonFind(

17、) /1. 顯示查找條件輸入對話框CRecordFIND dlg;if( dlg.DoModal()!=IDOK)return; /2. 打開記錄集this-Select(); /3. 構(gòu)造篩選條件 m_Set.m_strFilter.Format(%s%s%.2f,dlg.m_Getstring1,dlg.m_Getstring2,dlg.m_find);m_ListCtrlx.DeleteAllItems();m_Set.Requery();/4. 顯示篩選結(jié)果if(m_Set.IsEOF() AfxMessageBox(沒有符合條件的記錄);m_Set.Close();return ;e

18、lse this-ShowStudentRecord();12.8.6 實現(xiàn)排序功能利用MFC ClassWizard,為IDC_LIST3控件添加LVN_COLUMNCLICK消息響應(yīng)函數(shù) void CMyOdbcDlg:OnColumnclickList3(NMHDR* pNMHDR, LRESULT* pResult) NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;/ TODO: Add your control notification handler code hereif(m_bS = false) int k= pNMListView-iSubItem; Sort(k); m_ListCtrlx.DeleteAllItems(); this-ShowStudentRecord(); *pResult = 0; void CMyOdbcDlg:Sort(int secol) static bool isAsc=true; this-Select();CODBCFieldInfo fieldInfo;m_Set.GetODBCFieldInfo(secol,fieldInfo);if(isAsc)m_Set.m_strSort=fieldInfo.m_strName+ ASC;else m_Set.m_str

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論