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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

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

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

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

8、eldInfo Info; /定義結構CODBCFieldInfo體變量InfoOpen(AFX_DB_USE_DEFAULT_TYPE,TableName); /打開數據庫表,讀取字段名信息存儲在結構變量Info中GetODBCFieldInfo(int nItem, CODBCFieldInfo Info);Close(); /關閉記錄集(2) 從結構變量Info中提取指定字段名CString m_sName = Info.m_strName; (3) 調用ClistCtrl類的InsertColumn()成員函數,將字段名插入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(); /打開學生成績表記錄集 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記錄集的數據1編程要點(1) 使用CRecordset類的Open()函數,打開記錄集;(2) 使用CRecordset類的GetODBCFieldCount()函數,求得記錄總數;(3)調用CRecordset類的GetFieldValue()函數,讀取當

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

12、3 為“IDD_DIALOG_ADD”對話框中各Edit控件引入變量為了使各編輯框的值寫入數據庫的相應字段,必須用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 實現記錄的添加功能 在MyOdbc工程中,實現“添加記錄”功能分3步完成:(1) 啟動“添加

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

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

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

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

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

18、lse this-ShowStudentRecord();12.8.6 實現排序功能利用MFC ClassWizard,為IDC_LIST3控件添加LVN_COLUMNCLICK消息響應函數 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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論