mfc數(shù)據(jù)庫(kù)編程及其應(yīng)用_第1頁(yè)
已閱讀1頁(yè),還剩8頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、2010年10月,重慶理工大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系劉恒洋,共10頁(yè)第1頁(yè),第7章 MFC數(shù)據(jù)庫(kù)編程及其應(yīng)用,重點(diǎn),1.數(shù)據(jù)庫(kù)系統(tǒng)和ODBC,2.CRecordSet的應(yīng)用,3.示例系統(tǒng)中數(shù)據(jù)庫(kù)操作類的設(shè)計(jì),2010年10月,重慶理工大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系劉恒洋,共10頁(yè)第2頁(yè),7.1 數(shù)據(jù)庫(kù)系統(tǒng)的基本概念,數(shù)據(jù)庫(kù)系統(tǒng)由數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)管理系統(tǒng)和數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)3部分組成,如右圖:數(shù)據(jù)庫(kù)是數(shù)據(jù)的集合,

2、由一個(gè)或多個(gè)表組成,一般將表中的一行稱作記錄(record)或行(row),將表的列稱作字段(field)或列(column);,數(shù)據(jù)庫(kù)應(yīng)用程序是在數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)的支持下對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)進(jìn)行加工、處理的程序,MFC提供了兩種支持:ODBC和DAO。,數(shù)據(jù)庫(kù)系統(tǒng)的組成,數(shù)據(jù)庫(kù)管理系統(tǒng)是一套程序,用來(lái)定義、管理和處理數(shù)據(jù)庫(kù)與應(yīng)用程序之間的聯(lián)系,例如,F(xiàn)oxPro、Access等;不同的數(shù)據(jù)庫(kù)在實(shí)現(xiàn)它的數(shù)據(jù)庫(kù)管理系統(tǒng)時(shí)都有一些不

3、同的特性,因而使得用某個(gè)數(shù)據(jù)庫(kù)管理系統(tǒng)開(kāi)發(fā)的數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)無(wú)法在其他數(shù)據(jù)庫(kù)管理系統(tǒng)上使用;為了使一個(gè)數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)能夠適用于所有的數(shù)據(jù)庫(kù)管理系統(tǒng),人們?cè)跀?shù)據(jù)庫(kù)應(yīng)用系統(tǒng)和數(shù)據(jù)庫(kù)管理系統(tǒng)之間增加了一個(gè)符合某種規(guī)范的標(biāo)準(zhǔn)接口,從而使得按照標(biāo)準(zhǔn)接口設(shè)計(jì)的數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)可以訪問(wèn)所有支持標(biāo)準(zhǔn)接口的數(shù)據(jù)庫(kù)管理系統(tǒng)。常用的標(biāo)準(zhǔn)接口有ODBC、DAO、JDBC等,他們之間的關(guān)系如圖所示:SQL(Structured Query Language,結(jié)構(gòu)

4、化查詢語(yǔ)言)最早由IBM提出,是專門用來(lái)處理關(guān)系數(shù)據(jù)庫(kù)的基于文本的語(yǔ)言。SQL向數(shù)據(jù)庫(kù)提供了完善而一致的接口,它不是獨(dú)立的計(jì)算機(jī)語(yǔ)言,需要DBMS的支持才能執(zhí)行。SQL是一種標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)語(yǔ)言,目前大多數(shù)DBMS都支持它。,2010年10月,重慶理工大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系劉恒洋,共10頁(yè)第3頁(yè),7.2 ODBC基本概念,ODBC是微軟公司開(kāi)放服務(wù)結(jié)構(gòu)中有關(guān)數(shù)據(jù)庫(kù)的一個(gè)組成部分,它建立了一組規(guī)范,并提供了一組對(duì)數(shù)據(jù)庫(kù)訪

5、問(wèn)的標(biāo)準(zhǔn)API。這些API利用SQL來(lái)完成大部分任務(wù),ODBC本身也提供了對(duì)SQL語(yǔ)言的支持,用戶可以直接將SQL語(yǔ)句送給ODBC;基于ODBC的應(yīng)用程序?qū)?shù)據(jù)庫(kù)的操作不依賴于任何DBMS,不直接與DBMS打交道,所有的數(shù)據(jù)庫(kù)操作由對(duì)應(yīng)DBMS的ODBC驅(qū)動(dòng)程序完成,一個(gè)完整的ODBC由下列幾個(gè)部件組成;應(yīng)用程序:ODBC管理器:管理安裝的ODBC驅(qū)動(dòng)程序和管理數(shù)據(jù)源;驅(qū)動(dòng)程序管理器:包含在ODBC32.DLL中,任務(wù)是管理OD

6、BC驅(qū)動(dòng)程序;ODBC API:給數(shù)據(jù)庫(kù)應(yīng)用程序提供訪問(wèn)數(shù)據(jù)庫(kù)的接口函數(shù);ODBC驅(qū)動(dòng)程序:一些DLL,提供了ODBC和數(shù)據(jù)庫(kù)之間的接口;數(shù)據(jù)源:包含數(shù)據(jù)庫(kù)位置和數(shù)據(jù)庫(kù)類型的信息。在ODBC中,ODBC API不能直接訪問(wèn)數(shù)據(jù)庫(kù),必須通過(guò)驅(qū)動(dòng)程序管理器與數(shù)據(jù)庫(kù)交換信息。驅(qū)動(dòng)程序管理器負(fù)責(zé)將應(yīng)用程序?qū)DBC API的調(diào)用傳遞給正確的驅(qū)動(dòng)程序,而驅(qū)動(dòng)程序在執(zhí)行完相應(yīng)的操作后,將結(jié)果通過(guò)驅(qū)動(dòng)程序管理器返回給應(yīng)用程序。,ODBC部件關(guān)

7、系圖,2010年10月,重慶理工大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系劉恒洋,共10頁(yè)第4頁(yè),7.3 MFC的ODBC類簡(jiǎn)介,MFC的ODBC類主要包括有以下幾個(gè):CDatabase類:負(fù)責(zé)建立與數(shù)據(jù)源的連接; CRecordset類: 該類的一個(gè)對(duì)象代表從數(shù)據(jù)源選擇的一組記錄(記錄集); CRecordView類:提供了一個(gè)表單視圖與某個(gè)記錄集直接相連,利用對(duì)話框數(shù)據(jù)交換機(jī)制(DDX)在記錄集與表單視圖

8、的控件之間傳輸數(shù)據(jù);CFieldExchange類:支持記錄字段數(shù)據(jù)交換(DFX),即記錄集字段數(shù)據(jù)成員與相應(yīng)的數(shù)據(jù)庫(kù)表的字段之間的數(shù)據(jù)交換;CDBException類:代表ODBC產(chǎn)生的異常。概括地講,CDatabase針對(duì)某個(gè)數(shù)據(jù)庫(kù),它負(fù)責(zé)連接數(shù)據(jù)源;CRecordset針對(duì)數(shù)據(jù)源中的記錄集,它負(fù)責(zé)對(duì)記錄的操作;CRecordView負(fù)責(zé)界面;CFieldExchange負(fù)責(zé)CRecordset與數(shù)據(jù)源的數(shù)據(jù)交換。,2010年

9、10月,重慶理工大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系劉恒洋,共10頁(yè)第5頁(yè),先構(gòu)造一個(gè)CDatabase對(duì)象,然后調(diào)用Open成員函數(shù):lpszDSN:數(shù)據(jù)源名,也可以在lpszConnect參數(shù)中包括數(shù)據(jù)源名,此時(shí)lpszDSN必須為NULL,若兩處均未提供數(shù)據(jù)源名,則會(huì)顯示一個(gè)數(shù)據(jù)源對(duì)話框,用戶可以在該對(duì)話框中選擇一個(gè)數(shù)據(jù)源;參數(shù)bExclusive:說(shuō)明是否獨(dú)占數(shù)據(jù)源;參數(shù)bReadOnly:True則對(duì)數(shù)據(jù)源的連

10、接是只讀的,否則為可讀寫(xiě)的; 參數(shù)lpszConnect:指定了一個(gè)連接字符串。該串中可以包括數(shù)據(jù)源名、用戶賬號(hào)和口令等信息,字符串中的ODBC表示要連接到一個(gè)ODBC數(shù)據(jù)源上;參數(shù)bUseCursorLib:若為True,則會(huì)裝載光標(biāo)庫(kù),否則不裝載??煺招枰鈽?biāo)庫(kù),動(dòng)態(tài)集不需要光標(biāo)庫(kù);若連接成功,函數(shù)返回True,否則返回False,若函數(shù)內(nèi)部出現(xiàn)錯(cuò)誤,則會(huì)產(chǎn)生一個(gè)異常。一些其它的有用成員函數(shù):,virtual BOOL Op

11、en(LPCTSTR lpszDSN, BOOL bExclusive = FALSE, BOOL bReadOnly = FALSE, LPCTSTR lpszConnect = "ODBC;", BOOL bUseCursorLib = TRUE);throw(CDBException, CMemoryException);,CDatabase m_db;//在文檔類中嵌入一個(gè)CDatabase對(duì)象m_db.

12、Open("Student Registration"); //連接到一個(gè)名為Student Registration的數(shù)據(jù)源m_db.Open(NULL,FALSE,FALSE,"ODBC;DSN=Student Registration;UID = ZYF;PWD = 1234"); //在連接數(shù)據(jù)源的同時(shí)指定了用戶賬號(hào)和口令m_db.Open(NULL);//將彈出一個(gè)數(shù)據(jù)源對(duì)話框,vi

13、rtual void Close();//斷開(kāi)與數(shù)據(jù)庫(kù)的連接,CDatabase的析構(gòu)函數(shù)中同樣會(huì)自動(dòng)調(diào)用該函數(shù)BOOL IsOpen() const;//返回True則表明當(dāng)前有一個(gè)連接const CString& GetConnect() const;//獲取當(dāng)前的連接字符串,7.3.1 CDatabase類,2010年10月,重慶理工大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系劉恒洋,共10頁(yè)第6頁(yè),1. 動(dòng)態(tài)集、快照、

14、光標(biāo)和光標(biāo)庫(kù),共享數(shù)據(jù)的一個(gè)主要問(wèn)題就是如何協(xié)調(diào)各個(gè)用戶對(duì)數(shù)據(jù)源的修改,在MFC中這取決于用戶采用哪種記錄集來(lái)處理;記錄集主要分為快照(Snapshot)和動(dòng)態(tài)集(Dynaset)兩種:快照型記錄集提供了對(duì)數(shù)據(jù)的靜態(tài)視,當(dāng)其他用戶改變了記錄時(shí)(包括修改、添加和刪除),快照中的記錄不受影響;動(dòng)態(tài)集提供了數(shù)據(jù)的動(dòng)態(tài)視,當(dāng)其他用戶修改或刪除了記錄集中的記錄時(shí),會(huì)在動(dòng)態(tài)集中反映出來(lái)。在記錄集中滾動(dòng),需要有一個(gè)標(biāo)志來(lái)指明滾動(dòng)后的位置。OD

15、BC驅(qū)動(dòng)程序會(huì)維護(hù)一個(gè)光標(biāo),用來(lái)跟蹤記錄集的當(dāng)前記錄;光標(biāo)庫(kù)是處于ODBC驅(qū)動(dòng)程序管理器和驅(qū)動(dòng)程序之間的動(dòng)態(tài)鏈接庫(kù)。光標(biāo)庫(kù)的主要功能是支持快照以及為底層驅(qū)動(dòng)程序提供雙向滾動(dòng)能力。光標(biāo)庫(kù)管理快照記錄的緩沖區(qū),該緩沖區(qū)反映本程序?qū)τ涗浀男薷暮蛣h除,但不反映其他用戶對(duì)記錄的改變,由此可見(jiàn),快照實(shí)際上相當(dāng)于當(dāng)前的光標(biāo)庫(kù)緩沖區(qū);與快照不同,動(dòng)態(tài)集不用光標(biāo)庫(kù)維持的緩沖區(qū)來(lái)存放記錄。,7.3.2 CRecordSet類,2010年10月,重慶理工

16、大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)系劉恒洋,共10頁(yè)第7頁(yè),2. SQL查詢,記錄集的建立實(shí)際上是一個(gè)查詢過(guò)程,SQL的SELECT語(yǔ)句用來(lái)查詢數(shù)據(jù)源。在建立記錄集時(shí),CRecordset會(huì)根據(jù)參數(shù)構(gòu)造一個(gè)SELECT語(yǔ)句來(lái)查詢數(shù)據(jù)源,并用查詢的結(jié)果創(chuàng)建記錄集,SELECT語(yǔ)句的句法如下:如果列名或表名中包含有空格,則必須用方括號(hào)把該名稱括起來(lái);,SELECT field-list FROM table-name [WHERE

17、 m_strFilter] [ORDER BY m_strSort],3. 記錄集的建立和關(guān)閉,要建立記錄集,首先要構(gòu)造一個(gè)CRecordset派生類對(duì)象,然后調(diào)用Open成員函數(shù)查詢數(shù)據(jù)源中的記錄來(lái)建立記錄集,CRecordset(CDatabase* pDatabase = NULL); virtual CString GetDefaultConnect(); virtual BOOL Open(UINT nOpenType

18、= AFX_DB_USE_DEFAULT_TYPE, LPCTSTR lpszSQL = NULL, DWORD dwOptions = none);throw(CDBException, CMemoryException); BOOL CanRestart() const;//若支持Requery則返回TrueBOOL IsOpen() const;//若記錄集已建立則返回True,2010年10月,重慶理工大學(xué)計(jì)算機(jī)科學(xué)與工程學(xué)

19、院計(jì)算機(jī)科學(xué)與技術(shù)系劉恒洋,共10頁(yè)第8頁(yè),4. 滾動(dòng)記錄,CRecordset提供了以下所示幾個(gè)成員函數(shù)用來(lái)在記錄集中滾動(dòng):,void MoveNext();//前進(jìn)一個(gè)記錄void MovePrev();//后退一個(gè)記錄void MoveFirst();//滾動(dòng)到記錄集中的第一個(gè)記錄void MoveLast();//滾動(dòng)到記錄集中的最后一個(gè)記錄void SetAbsolutePosition(long nRows);//滾

20、動(dòng)到絕對(duì)位置virtual void Move(long nRows, WORD wFetchType = SQL_FETCH_RELATIVE);BOOL IsEOF() const; BOOL IsBOF() const; long GetRecordCount( ) const;,5. 修改、添加和刪除記錄,通過(guò)向CDatabase對(duì)象的ExecuteSQL成員函數(shù)傳遞SQL語(yǔ)句的方法達(dá)到修改、添加和刪除數(shù)據(jù)庫(kù)數(shù)據(jù)的目的,

溫馨提示

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

評(píng)論

0/150

提交評(píng)論