




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第9章數據庫編程9.1綜述9.2數據庫應用實例思考題
9.1綜述
數據庫技術是信息技術的基礎。作為計算機應用領域的一個重要組成部分,管理數據庫是計算機的主要用途之一,尤其是商業應用軟件基本上都有數據庫交互功能。使用數據庫管理數據有很明顯的優點,如減小數據冗余,可以對數據的一致性和完整性統一控制,實現數據共享和快速查找等。因此數據庫在不同的領域,不同的部門得到了廣泛的應用。
在VC++6.0中,用戶可以選擇使用開放數據鏈接(ODBC)、數據訪問對象(DAO)、OLEDB或ActiveX數據對象(ADO)方式來訪問數據庫,MFC中也提供了數據庫類,使用戶可以方便地進行數據庫操作。9.1.1常見數據庫訪問技術簡介
1.VisualC++開發數據庫技術的特點
1)簡單性
Visual
C++中提供了MFC類庫、ATL模板類以及AppWizard、ClassWizard等一系列的Wizard工具用于幫助用戶快速地建立自己的應用程序,大大簡化了應用程序的設計。開發者使用這些技術只需編寫很少的代碼或不需編寫代碼就可以開發一個數據庫應用程序。
2)靈活性
Visual
C++提供的開發環境使開發者可以根據自己的需要設計應用程序的界面和功能,而且Visual
C++提供了豐富的類庫和方法,使開發者可以根據自己的應用特點進行選擇。
3)訪問速度快
為了解決ODBC開發的數據庫應用程序訪問數據庫速度慢的問題,Visual
C++提供了新的訪問技術——OLE
DB和ADO。OLE
DB和ADO都是基于COM接口的技術,使用這種技術可以直接對數據庫的驅動程序進行訪問,這大大提高了訪問速度。
4)可擴展性
Visual
C++提供了OLE技術和ActiveX技術,這種技術可以增強應用程序的能力。使用OLE技術和ActiveX技術可以使開發者利用Visual
C++中提供的各種組件、控件以及第三方開發者提供的組件來創建自己的程序,從而實現應用程序的組件化。使用這種技術使應用程序具有良好的可擴展性。
5)可訪問不同種類數據源
傳統的ODBC技術只能訪問關系型數據庫,在Visual
C++中,提供了OLE
DB訪問技術,用戶不僅可以訪問關系型數據庫,還可以訪問非關系型數據庫。
2.VisualC++常用開發數據庫技術
VisualC++提供了多種訪問數據庫的技術,主要有如下幾種。
1)?SQL(結構化查詢語言)
SQL語句分為兩類:一類是DDL(DataDefinitionLanguage,數據定義語言)語句,它用來創建表、索引等,另一類是DML(DataManipulationLanguage,數據操作語言)語句,這些語句用來讀取數據、更新數據和執行其他類似操作。
2)?ODBC(OpenDataBaseConnectivity)
ODBC是客戶應用程序訪問關系數據庫時提供的一個統一的接口。對于不同的數據庫,ODBC提供了一套統一的API,使應用程序可以應用所提供的API來訪問任何提供了ODBC驅動程序的數據庫。而且ODBC已經成為一種標準,所以目前所有的關系數據庫都提供了ODBC驅動程序,這使ODBC的應用非常廣泛,基本上可用于所有的關系數據庫。
但由于ODBC只能用于關系數據庫,因此利用ODBC很難訪問對象數據庫及其他非關系數據庫。
由于ODBC是一種底層的訪問技術,因此,ODBC
API可以使客戶應用程序從底層設置和控制數據庫,完成一些高層數據庫技術無法完成的功能。
3)?MFCODBC(MicrosoftFoundationClassesODBC)
由于直接使用ODBC
API編寫應用程序要編制大量代碼,因此在Visual
C++中提供了MFC
ODBC類,封裝了ODBC
API,這使得利用MFC來創建ODBC的應用程序非常簡便。
4)?DAO(DataAccessObject)
DAO提供了一種通過程序代碼創建和操縱數據庫的機制。多個DAO構成一個體系結構,在這個結構中,各個DAO對象協同工作。MFC
DAO是微軟提供的用于訪問Microsoft
Jet數據庫文件(*.mdb)的強有力的數據庫開發工具。它通過DAO的封裝,向程序員提供了DAO豐富的操作數據庫手段。
5)?OLEDB(ObjectLinkandEmbeddingDataBase)
OLE
DB是Visual
C++開發數據庫應用中提供的新技術,它基于COM接口。因此,OLE
DB對所有的文件系統包括關系數據庫和非關系數據庫都提供了統一的接口。這些特性使得OLE
DB技術比傳統的數據庫訪問技術更加優越。
與ODBC技術相似,OLE
DB屬于數據庫訪問技術中的底層接口。直接使用OLE
DB來設計數據庫應用程序需要大量的代碼。在VC中提供了ATL模板,用于設計OLE
DB數據應用程序和數據提供程序。
6)?ADO(ActiveXDataObject)
ADO技術是基于OLE
DB的訪問接口,它繼承了OLE
DB技術的優點,并且,ADO對OLE
DB的接口作了封裝,定義了ADO對象,使程序開發得到簡化。ADO技術屬于數據庫訪問的高層接口。
本書中,對MFCODBC做重點介紹。9.1.2ODBC介紹
1.ODBC概述
Microsoft于1991年1月發布了ODBC,并迅速得到了廣大用戶的認可,各主要數據庫廠商也紛紛推出支持ODBC的驅動程序。ODBC作為
Microsoft的重大成果,已經成功地為Windows操作系統建立了一個開放的接口。
ODBC是OpenDatabaseConnectivity的縮寫,意思為“開放數據庫鏈接”。ODBC是使用最廣泛的Windows應用程序數據庫接口。ODBC為不同的數據庫資源提供一個標準的接口,可以使用與數據庫管理系統(DBMS)的類型無關的方式訪問數據庫。一個基于ODBC的應用程序對數據庫的操作不依賴任何DBMS,不直接與DBMS打交道,所有的數據庫操作由對應的DBMS的ODBC驅動程序完成。也就是說,不論是FoxPro、Access還是Oracle數據庫,均可用ODBCAPI進行訪問。由此可見,ODBC的最大優點就是能以統一的方式處理所有的數據庫。作為一個一致的數據庫操作接口,ODBC提供了一個允許單一應用程序訪問許多不同數據庫管理系統的機制,這種機制允許應用程序開發者不把一個特定的數據庫管理系統(DBMS)作為目標去創建應用程序,隨后用戶能夠增加數據庫驅動程序模塊,該數據庫驅動程序把應用程序連接到用戶選擇的DBMS上。
ODBC通過使用數據庫驅動程序(Driver)來提供數據庫的獨立性。驅動程序是用以支持ODBC函數調用的模塊,ODBC通過調用驅動程序所支持的函數來對數據庫進行操作。驅動程序與具體的數據庫有關,如果要訪問不同類型的數據庫,ODBC就需要動態地連接到不同的驅動程序上。
ODBC的另一個重要組成部分是驅動程序管理器(DriverManager)。ODBC驅動程序管理器位于Windows控制面板中的32位ODBC程序項中。驅動程序管理器包含在ODBC32.DLL中,能夠連接到所有的ODBC應用程序中,它負責安裝驅動程序、管理數據源、ODBC函數與DLL中函數的綁定,并幫助程序員跟蹤ODBC的函數調用。在ODBC中,應用程序不能直接存取數據庫,必須通過管理器和數據庫交換信息。
MFC提供的ODBC類對較復雜的ODBCAPI進行了封裝,提供了簡化的調用接口,從而大大方便了數據庫應用程序的開發。程序員不必了解ODBCAPI和SQL的具體細節,利用ODBC類即可完成對數據庫的大部分操作。VisualC++6.0中已經提供了對ODBC3.51的支持,用戶可以用其API函數進行操作。
2.ODBC組成
一個完整的ODBC由下列幾個部件組成:
(1)應用程序(Application)。
(2)ODBC管理器(Administrator)。該程序位于Windows95控制面板(ControlPanel)的32位ODBC內,其主要任務是管理安裝的ODBC驅動程序和管理數據源。
(3)驅動程序管理器(DriverManager)。驅動程序管理器包含在ODBC32.DLL中,對用戶是透明的。其任務是管理ODBC驅動程序,是ODBC中最重要的部件。
(4)?ODBCAPI。
(5)?ODBC驅動程序。ODBC驅動程序是一些DLL,提供了ODBC和數據庫之間的接口。
(6)數據源。數據源包含了數據庫位置和數據庫類型等信息,實際上是一種數據連接的抽象。各部件之間的關系如圖9-1所示。圖9-1ODBC組成結構圖應用程序要訪問一個數據庫,首先必須用ODBC管理器注冊一個數據源(或動態注冊一個數據源),管理器根據數據源提供的數據庫位置、數據庫類型及ODBC驅動程序等信息,建立起ODBC與具體數據庫的聯系。這樣,只要應用程序將數據源名提供給ODBC,ODBC就能建立起與相應數據庫的連接。
在ODBC中,ODBCAPI不能直接訪問數據庫,必須通過驅動程序管理器與數據庫交換信息。驅動程序管理器負責將應用程序對ODBCAPI的調用傳遞給正確的驅動程序,而驅動程序在執行完相應的操作后,將結果通過驅動程序管理器返回給應用程序。
在VC的數據庫類中,最主要的有CDatabase類和CRecordset類。
3.CDatabase類
CDatabase類主要用于對數據庫的連接,應用程序通過此連接訪問數據源。
使用CDatabase的操作步驟如下:
(1)構造一個CDatabase對象。
(2)調用CDatabase類的成員函數OpenEx()打開一個鏈接。
(3)當用戶在程序中構造CRecordset對象來處理連接的數據源時,將一個指向CDatabase對象的指針傳遞給CRecordset對象。
(4)使用連接完后,調用CDatabase::Close成員函數來關閉連接,并刪除CDatabaset。
常用的成員函數如下:
1)構造函數
通過CDatabase函數可以創建一個CDatabase對象,它的原型如下:
CDatabase();
構造對象后,必須調用成員函數Open或OpenEx建立到指定數據源的連接。
2)?Open()函數
通過Open函數建立數據庫對象與ODBC數據源之間的連接,其函數原型如下:
virtualBOOLOpenEx(LPCTSTRlpszDSN,
BOOLbExclusive=FALSE,
BOOLbReadOnly=FALSE,
LPCTSTRlpszConnect="ODBC",
BOOLbUseCursorLib=TRUE);
Open函數參數說明如表9-1所示。
3)?OpenEx()函數
通過OpenEx函數建立數據庫對象與ODBC數據源之間的連接,其函數原型如下:
virtualBOOLOpenEx(LPCTSTRlpszConnectString,DWORDdwOptions=0);
throw(CDBException,CMemoryException);
OpenEX函數參數說明如表9-2所示。
4)?Close()函數
該函數斷開數據庫對象與ODBC數據源之間的連接,其函數原型如下:
virtualvoidClose();
5)?GetConnect()函數
通過這個函數可以獲得與ODBC數據源連接的字符串,其函數原型如下:
constString&GetConnect();
6)?IsOpen()函數
通過IsOpen函數可以確定當前的CDatabase對象是否與數據源連接,其函數原型如下:
BOOLIsOpen();
如當前的CDatabase對象已經與數據源連接,返回非0值,否則返回0值。
7)?GetDatabaseName()函數
通過GetDatabaseName函數可以得到與CDatabase對象連接的數據庫名稱,其函數原型如下:
CStringGetDatabaseName();
8)?CanUpdate()函數
通過CanUpdate函數可以檢測CDatabase對象是否允許更新,其函數原型如下:
BOOLCanUpdate();
如果CDatabase對象允許更新,則返回非0值,否則返回0值。
9)?CanTransact()函數
通過CanTransact函數可以確定數據源是否支持事務,其函數原型如下:
BOOLCanTransact()const;
如果數據源支持事務,則返回非0值,否則返回0值。
10)?SetLoginTimeout()函數
通過SetLoginTimeout函數可以設置登錄超時時間,其函數原型如下:
voidSetLoginTimeout(DWORDdwSeconds);
11)?SetQueryTimeout()函數
SetQueryTimeout函數可以設置查詢超時時間,其函數原型如下:
voidSetQueryTimeout(DWORDdwSeconds);
4.CRecordset類
CRecordset類主要用來與數據庫進行交互。類中封裝了對一個數據記錄的處理,如添加、修改、刪除、更新等操作。
常見的成員函數如下。
1)構造函數
在處理數據庫的記錄集之前,需要為CRecordset對象打開記錄集。CRecordset類的Open函數用于打開記錄集,但在打開之前,首先要構造CRecordset對象,這時需用到CRecordset的構造函數,函數原型為:
CRecordset(CDatabase*pDatabase=NULL);參數為指向CDatabase的指針。默認值為NULL。如果有了CDatabase對象,則可以直接傳遞給CRecordset構造函數。如果參數CDatabase對象沒有進行連接,即使用默認參數NULL,則在CRecordset對象的Open函數中進行連接。
2)?Open()函數
Open函數用于為CRecordset對象打開記錄集,函數原型為:
virtualBOOLOpen(UINTnOpenType=AFX_DB_USE_DEFAULT_TYPE,
LPCTSTRlpszSQL=NULL,DWORDdwOptions=none);
throw(CDBException,CMemoryException);
Open函數參數說明如表9-3所示。0
3)?Close()函數
Close函數用于關閉記錄集,其函數原型如下:
virtualvoidClose();
4)?AddNew()函數
AddNew用于向記錄集中添加一條新的空白記錄,插入數據庫的末尾。用戶可以通過修改成員變量的值在空白記錄中寫入數據,然后調用Update函數更新數據庫。其函數原型如下:
virtualvoidAddNew();
throw(CDBException);
如果選擇dynasets方式打開記錄集,新增加的記錄會立刻出現在記錄集的末尾;而對于snapshots方式,只有調用Requery函數后記錄集中才會體現這種增加。
5)?Delete()函數
Delete函數用于刪除當前記錄,記錄集指針移動到下一條記錄,其函數原型如下:
virtualvoidDelete();
throw(CDBException);
注意,執行此命令后,不需要使用Update函數進行更新;刪除記錄前,需要確認是否可以修改數據源,可以使用CanUpdate函數進行判斷。
6)?Edit()函數
Edit函數用于編輯記錄集中的當前記錄,調用此函數后,可對成員變量進行修改,其函數原型如下:
virtualvoidEdit();
throw(CDBException,CMemoryException);
執行此命令后,需要使用Update函數進行更新。
7)?Update()函數
Update函數用于將AddNew和Edit函數執行后對記錄集的修改進行更新,保存到數據源中,其函數原型為:
virtualvoidUpdate();
throw(CDBException);
8)?CancelUpdate()函數
與Update函數功能相反,CancelUpdate函數用于取消Edit和AddNew函數進行的更新操作,其函數原型為:
virtualvoidCancelUpdate();
9)?Requery()函數
Requery函數用于重新刷新記錄集。調用該函數后,記錄集將獲得從數據源中重新獲取的數據而重建記錄集,所有相關的應用程序進行的修改將反應在新的記錄集上,其函數原型為:
virtualvoidRequery();
throw(CDBException);
如果用戶進行了查詢過濾操作,可以在修改了m_strFilter和m_strSort成員變量后調用Requery函數。
10)?MoveFirst()函數
MoveFirst函數可將當前位置移動到開始位置,函數原型為:
voidMoveFirst();
throw(CDBException,CMemoryException);
11)?MoveLast()函數
MoveLast函數可將當前位置移動到末尾位置,函數原型為:
voidMoveLast();
throw(CDBException,CMemoryException);
12)?MoveNext()函數
MoveNext函數可將當前位置向前移動一個記錄位置,函數原型為:
voidMoveNext();
throw(CDBException,CMemoryException);
13)?MovePrev()函數
MovePrev函數可將當前位置向后移動一個記錄位置,函數原型為:
voidMovePrev();
throw(CDBException,CMemoryException);
14)?Move()函數
Move函數用于移動記錄集指針到指定位置,函數原型為:
voidMove(longnRows,WORDwFetchType=SQL_FETCH_RELATIVE);
throw(CDBException,CMemoryException);
Move函數參數說明如表9-4所示。
15)?GetRecordCount()函數
GetRecordCount函數用于獲得記錄集中記錄的條目數,其函數原型為:
LongGetRecordCount();
16)?GetTableName()函數
GetTableName函數用于獲得記錄集對應的數據庫表名稱,其函數原型為:
ConstCString&GetTableName();
17)?GetSQL()函數
GetSQL函數用于獲得記錄集所使用的SQL語句,函數原型為:
ConstCString&GetSQL();
18)?IsBOF()函數
IsBOF函數用于判斷當前記錄集指針的位置是否已到達記錄集的起始位置,函數原型為:
BOOLIsBOF();
19)?IsEOF()函數
IsEOF函數用于判斷當前記錄集指針的位置是否已到達記錄集的最后一條位置,函數原型為:
BOOLIsEOF();
20)?IsDelete()函數
IsDelete函數用于判斷當前記錄集指針的位置是否指向一個已經被刪除的記錄位置,函數原型為:
BOOLIsDelete();
9.2數據庫應用實例
下面通過一個數據庫應用實例來學習如何創建一個數據庫、連接一個數據庫并且操作一個數據庫的方法。
9.2.1利用Access創建一個數據庫
下面將為后面的ODBC應用建立一個名為“studentinfo”的Access數據庫,操作步驟如下:
(1)進入“MicrosoftAccess”操作界面。
(2)選擇“文件/新建”命令,彈出“新建文件”對話框,單擊“空數據庫”,如圖9-2所示。
(3)彈出“文件新建數據庫”對話框,在“保存位置”右邊的下拉列表中選擇數據庫的保存路徑,這里選擇“d:\visualc++程序教程\第9章”,在“文件名”右邊的編輯框中輸入“sutdentinfo.mdb”為新建數據庫命名,單擊“創建”按鈕。
(4)回到“MicrosoftAccess”操作界面,出現了數據庫設計工作區,單擊“設計”按鈕,如圖9-2所示。
(5)彈出“表1:表”對話框,等待定義數據庫表各字段名稱。定義如表9-5所示。圖9-2數據庫設計工作區
(6)彈出“是否保存對表1的設計的更改?”提示框,單擊“是”按鈕,如圖9-3所示。
(7)彈出“另存為”對話框,在“表名稱”下的編輯框中輸入“student”,為表命名,單擊“確定”按鈕。
(8)回到數據庫設計工作區,單擊“打開”按鈕,按照各字段,輸入初始客戶學生信息,如圖9-4所示。圖9-3提示框圖9-4輸入初始學生信息9.2.2為ODBC數據源管理器添加ODBC數據庫源
ODBC應用程序是連接在ODBC數據源上的。本機的數據源可以使用控制面板中ODBC數據源管理器進行配置。
下面將剛建立的“studentinfo”數據庫添加到ODBC數據源管理器中。
操作步驟如下:
(1)?Windows桌面上單擊“開始”按鈕。
(2)彈出開始菜單,選擇“設置/控制面板/管理工具/數據源(ODBC)”命令。
(3)彈出“ODBC數據源管理器”對話框,選擇“用戶DSN”選項卡,單擊“添加”按鈕,如圖9-5所示。圖9-5“ODBC數據源管理器”對話框這里,用戶DSN中給出的是在本地機上的數據源;系統DSN中給出的是可以為任何用戶使用的本地數據源;文件DSN中給出了數據源文件。
(4)彈出“創建新數據源”對話框,驅動程序選擇“MicrosoftAccessDrive(*.mdb)選項,單擊“完成”按鈕,如圖9-6所示。
(5)彈出“ODBCMicrosoftAccess安裝”對話框,在“數據源名”右邊的編輯框中輸入“studentinfo”;在“數據庫”分組框中單擊“選擇”按鈕,如圖9-7所示。圖9-6“創建新數據源”對話框圖9-7“ODBCMicrosoftAccess安裝”對話框
(6)彈出“選擇數據庫”對話框,在“驅動器”下的組合框中選擇創建的“addressbook.mdb”數據庫所在的驅動器符號,在“目錄”下的樹形列表框中選擇數據庫所在位置的路徑,這里的路徑為“d:\vc++程序設計\第9章”,在左邊的列表框中出現該路徑下的所有后綴名為“.mdb”的文件,雙擊“studentinfo.mdb”,單擊“確定”按鈕,如圖9-8所示。
(7)回到“ODBC數據源管理器”對話框,選擇“用戶DSN”選項卡,可以在“用戶數據源”下的列表框中看到新增加的用戶ODBC數據源“studentinfo”,單擊“確定”按鈕,如圖9-9所示。
這樣,就建立了一個名為“addressbook”的用戶ODBC數據源。圖9-8“選擇數據庫”對話框圖9-9“ODBC數據源管理器”對話框9.2.3建立一個帶有ODBC數據庫支持功能的單文檔界面工程文件
操作步驟如下:
(1)打開VisualC++6.0,選擇“文件/新建”命令,即彈出“新建”對話框。
(2)在彈出的對話框中,選擇“工程”選項卡,在列表中選擇
,在“位置”中輸入工程建立路徑,在“工程”文本框中輸入工程名“chap9_1”,然后單擊“確定”按鈕。
(3)彈出“MFCAppWizard-Step1”對話框,選擇“單個文檔”,然后選擇“下一個”。
(4)彈出“MFCAppWizard-Step2of6”對話框,選擇“查看數據庫不使用文件支持”單選框,單擊“DataSource…”按鈕,如圖9-10所示。圖9-10“MFCAppWizard-Step2of6”對話框
(5)彈出“DatabaseOptions”對話框,在“Datasource”中選中“ODBC”選項,在旁邊的下拉菜單中選中“studentinfo”,如圖9-11所示。
(6)彈出“SelectDatabaseTables”對話框,在列表框中選擇“student”,單擊“OK”按鈕,如圖9-12所示。
(7)彈出“MFCAppWizard-Step2of6”對話框,單擊“完成”按鈕,如圖9-13所示。
這樣就建立了一個ODBC支持的工程文件。圖9-11“DatabaseOptions”對話框圖9-12“SelectDatabaseTables”對話框圖9-13“MFCAppWizard-Step2of6”對話框9.2.4設計用戶操作主界面
現在已經生成了一個帶有數據庫支持功能的單文檔界面工程文件,系統自動生成了一個名為“IDD_CHAP9_1_FORM”的對話框,運行時自動顯示。下面就利用該對話框作為用戶操作主界面。
●用戶操作主界面下包含:
●學生信息瀏覽;
●學生信息刪除;
●學生信息添加;
●學生信息修改。操作步驟如下:
(1)在選項卡中,雙擊文件夾,在展開菜單中選擇對話框。
(2)雙擊對話框,在右邊的對話框編輯區中利用編輯框、靜態文本和按鈕設計主界面,如圖9-14所示。
各功能區使用控件列表說明如表9-6所示。圖9-14用戶操作主界面設計表9-6控件列表說明9.2.5實現學生信息瀏覽功能
建立工程文件時,系統菜單中已經自動生成“記錄”菜單,其中包含“第一個記錄”、“前一個記錄”、“下一個記錄”、“最后一個記錄”4個選項,其ID分別對應為“ID_RECORD_FIRST”、“ID_RECORD_PREV”、“ID_RECORD_NEXT”、“ID_RECORD_LAST”。
下面就利用這4個選項完成對學生信息的瀏覽功能,并將結果在主操作界面的“學生信息管理系統”功能區中顯示出來。操作步驟如下:
(1)在主菜單中選擇“查看/建立類向導”。
(2)彈出“MFCClassWizard”對話框,選擇“MessageVariables”選項卡;在“Classname”下的組合框中,選擇“CChap9_1View”選項;在“ControlIDs”下的列表框中選擇“IDC_NAME”,單擊“AddVariable...”按鈕,如圖9-15所示。
(3)彈出“AddMemberVariable”對話框,在“Membervariablename”下的組合框中輸入“m_name”,單擊“OK”按鈕,如圖9-16所示。
(4)回到“MFCClassWizard”對話框,可以看到增加了ContrlIDs為IDC_ADDRESS,類型為CString,變量名為m_address的成員變量。
(5)使用同樣的方法添加成員變量,如表9-7所示。圖9-15“MFCClassWizard”對話框圖9-16“AddMemberVariable”對話框
(6)選擇“MFCClassWizard”選項卡,在“Classname”下的組合框中,選擇“CChap9_1View”選項;在“ObjectIDs”下的列表框中選擇“ID_RECORD_FIRST”;在“Messages”下的列表框中選擇“COMMAND”,單擊“AddFunction…”按鈕,如圖9-17所示。
(7)彈出“AddMemberFunction”對話框,單擊“OK”按鈕,如圖9-18所示。
(8)回到“MFCClassWizard”對話框,在“Memberfunctions”下的列表框中已經增加了名為“OnRecordFirst”的成員函數,如圖9-19所示。圖9-17“MFCClassWizard”對話框圖9-18“AddMemberFunction”對話框圖9-19添加“OnRecordFirst”成員函數
(9)用同樣的方法,如表9-8所示添加成員函數。(10)選擇,修改函數體內容:
voidCChap9_1View::OnRecordFirst()
{
//TODO:Addyourcommandhandlercodehere
m_pSet->MoveFirst();//數據庫表記錄集指針移動到數據庫起始位置
m_name=m_pSet->m_name;
m_ID=m_pSet->m_ID;
m_grade=m_pSet->m_grade;
m_major=m_pSet->m_major;
m_tel=m_pSet->m_telephone;
UpdateData(FALSE);//將數據顯示在編輯框中
}這里,m_pSet為系統自動生成的CRecordset派生類Chap9_1Set的對象指針,使用該指針可以對數據庫表中的內容進行操作。其中m_pSet->name、m_pSet->m_ID、m_pSet->m_major、m_pSet->m_telephone分別對應“studentinfo”數據庫表“student”中的name、ID、major、telephone四個字段當前數據庫表記錄集指針位置的數據。(11)選擇,修改函數體內容:
voidCChap9_1View::OnRecordLast()
{
//TODO:Addyourcommandhandlercodehere
m_pSet->MoveLast();//數據庫表記錄集指針移動到數據庫起始位置
m_name=m_pSet->m_name;
m_ID=m_pSet->m_ID;
m_grade=m_pSet->m_grade;
m_major=m_pSet->m_major;
m_tel=m_pSet->m_telephone;
UpdateData(FALSE);
}(12)選擇,修改函數體內容:
voidCChap9_1View::OnRecordNext()
{
//TODO:Addyourcommandhandlercodehere
m_pSet->MoveNext();//數據庫表記錄集指針當前位置向后移動一條記錄
m_name=m_pSet->m_name;
m_ID=m_pSet->m_ID;
m_grade=m_pSet->m_grade;
m_major=m_pSet->m_major;
m_tel=m_pSet->m_telephone;
UpdateData(FALSE);
}(13)選擇,修改函數體內容:
voidCChap9_1View::OnRecordPrev()
{
//TODO:Addyourcommandhandlercodehere
m_pSet->MovePrev();//數據庫表記錄集指針當前位置向前移動一條記錄
m_name=m_pSet->m_name;
m_ID=m_pSet->m_ID;
m_grade=m_pSet->m_grade;
m_major=m_pSet->m_major;
m_tel=m_pSet->m_telephone;
UpdateData(FALSE);
}
(14)選擇菜單“編譯/編譯chap9_1View.cpp”編譯程序,無誤;選擇菜單“編譯/構件chap9a.exe”,無誤;選擇菜單“編譯/執行chap9_1.exe”,選擇“記錄/下一個記錄”,“學生信息管理系統”功能區即出現記錄結果,如圖9-20所示。圖9-20學生信息瀏覽運行結果9.2.6實現學生信息添加功能
添加記錄操作通過單擊按鈕來完成,下面為按鈕添加BN_CLICKED成員函數。
(1)在主菜單中選擇“查看/建立類向導”。
(2)彈出“MFCClassWizard”對話框,選擇“MessageMaps”選項卡;在“Classname”下的組合框中,選擇“CChap9_1View”選項;在“ObjectIDs”下的列表框中選擇“IDC_ADD”;在“Messages”下的列表框中選擇“BN_CLICKED”,單擊“AddFunction…”按鈕,如圖9-21所示。圖9-21添加BN_CLICKED成員函數
(3)彈出“AddMemberFuction”對話框,單擊“OK”按鈕,如圖9-22所示。
(4)回到“MFCClassWizard”對話框,在“Memberfunctions”下的列表框中已經增加了名為“OnAdd”的成員函數。
(5)修改函數體內容:
voidCChap9_1View::OnAdd()
{
//TODO:Addyourcontrolnotificationhandlercodehere
UpdateData(TRUE); //將編輯框中的輸入保存到對應變量中
m_pSet->AddNew(); //記錄集當前指針位置添加一空白記錄
m_pSet->m_name=m_name; m_pSet->m_ID=m_ID;
m_pSet->m_grade=m_grade;
m_pSet->m_major=m_major;
m_pSet->m_telephone=m_tel;
m_pSet->Update(); //更新記錄
m_pSet->MoveLast(); //數據庫記錄集指針移動到最后一條記錄
m_pSet->Requery(); //重新排序
}
(6)選擇菜單“編譯/編譯chap9_1View.cpp”編譯程序,無誤;選擇菜單“編譯/構件chap9_1.exe”,無誤;選擇菜單“編譯/執行chap9_1.exe”,在對應的編輯框中輸入對應信息,單擊
按鈕,如圖9-23所示。圖9-23增加學生成績信息操作
(7)選擇菜單“記錄/最后一個記錄”,在“成績瀏覽”功能區顯示增加的新記錄,如圖9-24所示。圖9-24瀏覽最后一個記錄9.2.7實現學生信息刪除功能
對學生信息的刪除操作是通過單擊按鈕,對當前顯示的記錄進行刪除。
操作步驟如下:
(1)選擇菜單“查看/建立類向導”。
(2)彈出“MFCClassWizard”對話框,選擇“MessageMaps”選項卡;在“Classname”下的組合框中,選擇“CChap9aView”選項;在“ObjectIDs”下的列表框中選擇“IDC_DELETE”;在“Messages”下的列表框中選擇“BN_CLICKED”,單擊“AddFunction…”按鈕,彈出“AddMemberFu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年學前教育機構師資隊伍教師專業素養與教學效果研究報告
- 2025年科技互聯網行業產業鏈上下游協同發展分析報告
- ICU生命體征監測
- 在線消費分期服務企業制定與實施新質生產力項目商業計劃書
- 高精度激光測長儀行業深度調研及發展項目商業計劃書
- 動漫IP主題研學游行業跨境出海項目商業計劃書
- 納米多孔金屬材料行業深度調研及發展項目商業計劃書
- 便利店行業2025年創新產品與服務報告
- 2025年細胞治療臨床試驗審批流程中的臨床研究報告倫理審查應對策略分析報告
- 2025年工業互聯網平臺NFV在工業控制系統中的應用與案例分析報告
- 雇人包工免責協議書
- 2025屆高三5月份全國各地聯考文言文閱讀分類匯編(解析版)
- 土建項目分包協議書
- 吐魯番市高昌區招聘社區工作者考試真題2024
- 山東省濟南市2025屆高三三模歷史試卷(含答案)
- 2025年中考道法答題技巧與模板構建專題08主觀題答題技巧(觀點概括類試)(學生版+解析)
- 2024-2025學年廣東省深圳市高一數學下學期7月期末考試(附答案)
- “教-學-評”一體化下初中英語寫作教學評價措施
- 2025團員考試試題及答案
- 2025年軟件測試工程師考試題及答案
- 血管內導管相關性血流感染預防與診治指南(2025)解讀課件
評論
0/150
提交評論