第8章數(shù)據(jù)控件課件_第1頁(yè)
第8章數(shù)據(jù)控件課件_第2頁(yè)
第8章數(shù)據(jù)控件課件_第3頁(yè)
第8章數(shù)據(jù)控件課件_第4頁(yè)
第8章數(shù)據(jù)控件課件_第5頁(yè)
已閱讀5頁(yè),還剩118頁(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)介

第8章數(shù)據(jù)控件與數(shù)據(jù)綁定控件的使用數(shù)據(jù)庫(kù)編程技術(shù)18.1VB開(kāi)發(fā)數(shù)據(jù)庫(kù)概述8.1.1VB數(shù)據(jù)庫(kù)開(kāi)發(fā)功能概述VB是微軟公司發(fā)布的應(yīng)用程序開(kāi)發(fā)工具,不但具有強(qiáng)大的程序設(shè)計(jì)能力,還具有強(qiáng)大的數(shù)據(jù)庫(kù)編程能力。1.VB6.0數(shù)據(jù)庫(kù)編程的特征VB處理的數(shù)據(jù)庫(kù)屬于關(guān)系類型數(shù)據(jù)庫(kù),由不同層次的對(duì)象組成。一個(gè)數(shù)據(jù)庫(kù)由多個(gè)表組成,每個(gè)表包含若干字段。支持ADO存取模式,即ActiveXDataObject支持OLEDB和COM,即對(duì)象連接與嵌入數(shù)據(jù)庫(kù)和組件對(duì)象模型。其中COM是一種標(biāo)準(zhǔn),按此標(biāo)準(zhǔn)開(kāi)發(fā)的軟件模塊可以“插入”到系統(tǒng)中使用??梢葬槍?duì)SQLServer和Oracle等不同的數(shù)據(jù)庫(kù)服務(wù)器開(kāi)發(fā)完善的客戶/服務(wù)器應(yīng)用程序。具有管理和顯示數(shù)據(jù)源的數(shù)據(jù)控件和數(shù)據(jù)綁定控件。數(shù)據(jù)控件用于與數(shù)據(jù)庫(kù)連接,數(shù)據(jù)綁定控件用于顯示數(shù)據(jù)表的記錄。提供報(bào)表設(shè)計(jì)工具,能夠快速生成報(bào)表提供了使用和配置連接的工具與命令,及進(jìn)行ODBC開(kāi)發(fā)的API函數(shù)。22.VB作為數(shù)據(jù)庫(kù)開(kāi)發(fā)平臺(tái)的優(yōu)點(diǎn)(1)簡(jiǎn)單性VB為每種數(shù)據(jù)訪問(wèn)模式提供了相應(yīng)的控件,通過(guò)控件,可以方便地連接數(shù)據(jù)庫(kù),只需編寫(xiě)少量的代碼甚至不用編寫(xiě)代碼就可以訪問(wèn)和操作數(shù)據(jù)庫(kù)。(2)靈活性VB不象一般數(shù)據(jù)庫(kù)那樣局限于特定的應(yīng)用程序結(jié)構(gòu),也不需要用某些指令對(duì)打開(kāi)的數(shù)據(jù)庫(kù)進(jìn)行操作。(3)可擴(kuò)充性在VB中可以用ActiveX控件,這些控件可以由微軟公司提供,也可以由第三方開(kāi)發(fā)。有了ActiveX控件,可以在VB中增加新功能。38.1.2VB6.0支持的數(shù)據(jù)庫(kù)種類數(shù)據(jù)庫(kù)編程語(yǔ)言一般都有自己特定格式的數(shù)據(jù)庫(kù)。VB默認(rèn)的數(shù)據(jù)庫(kù)格式與MicrosoftAccess格式相同.可以對(duì)其它多種格式的數(shù)據(jù)庫(kù)進(jìn)行操作和處理。VB支持的數(shù)據(jù)庫(kù)有以下三類:VB本地?cái)?shù)據(jù)庫(kù),與MicrosoftAccess格式相同。外部數(shù)據(jù)庫(kù),如dbase,MicrosoftFoxPro等。ODBC數(shù)據(jù)庫(kù),支持符合ODBC標(biāo)準(zhǔn)的客戶-服務(wù)器數(shù)據(jù)庫(kù),如:MicrosoftSQLServer,Oracle等。48.1.3VB6.0支持的數(shù)據(jù)存取模式VB6.0支持的數(shù)據(jù)庫(kù)存取模式有以下三種:數(shù)據(jù)存取對(duì)象(DataAccessObjects,簡(jiǎn)稱DAO)遠(yuǎn)程數(shù)據(jù)對(duì)象(RemoteDataObjects,簡(jiǎn)稱RDO)ActiveX數(shù)據(jù)對(duì)象(ActiveXDataObjects,簡(jiǎn)稱ADO)1.DAO簡(jiǎn)介DAO模式是VB最早期的數(shù)據(jù)訪問(wèn)模式。是以Microsoft的Jet數(shù)據(jù)庫(kù)引擎為核心而發(fā)展起來(lái)的一組動(dòng)態(tài)鏈接庫(kù)。它提供了兩種類型來(lái)支持?jǐn)?shù)據(jù)庫(kù):通過(guò)Microsoft的Jet數(shù)據(jù)庫(kù)引擎來(lái)操作本地?cái)?shù)據(jù)庫(kù)。通過(guò)使用ODBCDirect,來(lái)存取ODBC數(shù)據(jù)庫(kù)。使用ODBC存取方法,DAO可以訪問(wèn)任何提供標(biāo)準(zhǔn)ODBC驅(qū)動(dòng)程序的客戶/服務(wù)器數(shù)據(jù)庫(kù)。52.RDO簡(jiǎn)介遠(yuǎn)程數(shù)據(jù)庫(kù)是數(shù)據(jù)庫(kù)應(yīng)用中新興的領(lǐng)域,隨著Internet的推廣,網(wǎng)絡(luò)數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)日益增加。對(duì)于網(wǎng)絡(luò)應(yīng)用程序來(lái)說(shuō),其數(shù)據(jù)訪問(wèn)端與數(shù)據(jù)庫(kù)之間有比較遠(yuǎn)的距離,使用DAO組件已不能滿足遠(yuǎn)程數(shù)據(jù)訪問(wèn)的要求,因此應(yīng)使用遠(yuǎn)程數(shù)據(jù)對(duì)象RDO來(lái)訪問(wèn)數(shù)據(jù)庫(kù)。RDO直接與數(shù)據(jù)庫(kù)服務(wù)器連接,所以它比較適合于客戶機(jī)/服務(wù)器方式。63.ADO簡(jiǎn)介ADO是最新的數(shù)據(jù)訪問(wèn)技術(shù),ADO提供了較為高級(jí)的訪問(wèn)OLEDB數(shù)據(jù)源的機(jī)制,它結(jié)合了DAO和RDO的優(yōu)點(diǎn),并提供了OLEDB數(shù)據(jù)源的入口。OLEDB是一個(gè)低層的數(shù)據(jù)訪問(wèn)接口,它向應(yīng)用程序提供了一個(gè)統(tǒng)一的數(shù)據(jù)訪問(wèn)方法,利用它可以訪問(wèn)各種數(shù)據(jù)源,包括傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)、電子郵件系統(tǒng)及自定義的商業(yè)對(duì)象。78.1.4SQLServer數(shù)據(jù)庫(kù)的DSN的配置1.開(kāi)放式數(shù)據(jù)庫(kù)互連(ODBC)開(kāi)放式數(shù)據(jù)庫(kù)互連—ODBC(OpenDatabaseConnectivity)的概念來(lái)源于對(duì)多個(gè)數(shù)據(jù)庫(kù)數(shù)據(jù)存取的需求。在早期的數(shù)據(jù)庫(kù)編程中,由于不同的數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS),有自己的數(shù)據(jù)庫(kù)格式和嵌入式的SQL語(yǔ)言,即使應(yīng)用程序完成同樣的功能,但只要DBMS選取的不同,則編寫(xiě)的程序?qū)⑼耆煌?。程序員為了能夠訪問(wèn)不同的數(shù)據(jù)庫(kù)而不得不學(xué)習(xí)多個(gè)DBMS的內(nèi)容。8希望擺脫專用數(shù)據(jù)庫(kù)本身的約束,對(duì)于不同的DBMS,采用統(tǒng)一的編程界面,從而使數(shù)據(jù)庫(kù)應(yīng)用程序在訪問(wèn)另外一種數(shù)據(jù)庫(kù)格式時(shí),不需要對(duì)源程序進(jìn)行修改。ODBC開(kāi)發(fā)的最初目標(biāo)就是為Windows程序員提供一套訪問(wèn)數(shù)據(jù)庫(kù)的SQL函數(shù)調(diào)用,而這些函數(shù)的調(diào)用采用相同的用戶界面。ODBC用戶可以用ODBC的SQL語(yǔ)句訪問(wèn)任何支持ODBC標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù),從而使應(yīng)用程序訪問(wèn)不同的數(shù)據(jù)庫(kù)的操作不依賴任何DBMS,也為程序的跨平臺(tái)開(kāi)發(fā)和移植提供了方便。92.DSN的配置DSN的意思是應(yīng)用程序用以請(qǐng)求一個(gè)連接到ODBC數(shù)據(jù)源的連接(Connection)的名字,即它代表一個(gè)ODBC連接的名稱,內(nèi)含了數(shù)據(jù)庫(kù)文件名、所在目錄、數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序、用戶ID、密碼等細(xì)節(jié),使得應(yīng)用程序訪問(wèn)數(shù)據(jù)庫(kù)時(shí),只要給出事先注冊(cè)的DSN,而不必考慮以上細(xì)節(jié)問(wèn)題,從而使程序中訪問(wèn)數(shù)據(jù)庫(kù)變得簡(jiǎn)單。DSN可以分為以下三種:系統(tǒng)DSN:可以被登錄到系統(tǒng)中的所有用戶使用用戶DSN:只能被建立它的用戶使用文檔DSN:把信息存儲(chǔ)在后綴名為.dsn的文件中,如果文件放在網(wǎng)絡(luò)共享的驅(qū)動(dòng)器中,就可以被所有安裝了相同驅(qū)動(dòng)程序的用戶共享。10DSN配置步驟如下:以前邊建立的數(shù)據(jù)庫(kù)“成績(jī)管理”為例。(1)打開(kāi)ODBC數(shù)據(jù)源管理器ODBC數(shù)據(jù)源管理器用來(lái)管理本機(jī)上所有的ODBC數(shù)據(jù)源,如注冊(cè)新的數(shù)據(jù)源名稱,刪除或修改數(shù)據(jù)源等。單擊[開(kāi)始]\[設(shè)置]\[控制面板],打開(kāi)控制面板窗口;在其中雙擊[管理工具]圖標(biāo),打開(kāi)管理工具窗口;雙擊[數(shù)據(jù)源ODBC]

圖標(biāo),即可打開(kāi)ODBC數(shù)據(jù)源管理器如圖8-2。圖8-2ODBC數(shù)據(jù)源管理器11(2)選擇數(shù)據(jù)源類型并添加數(shù)據(jù)源在[ODBC數(shù)據(jù)源管理器]中,單擊[系統(tǒng)DSN]選項(xiàng)卡,再單擊[添加]按鈕,將出現(xiàn)[創(chuàng)建新數(shù)據(jù)源]對(duì)話框如圖8-3。圖8-3創(chuàng)建新數(shù)據(jù)源對(duì)話框12(3)選擇驅(qū)動(dòng)程序在圖8-3所示的驅(qū)動(dòng)器列表中,選擇“SQLServer”并單擊[完成]按鈕,打開(kāi)向?qū)Т翱谌鐖D8-4。圖8-4設(shè)置數(shù)據(jù)源名稱及服務(wù)器13(4)設(shè)置數(shù)據(jù)源在數(shù)據(jù)源[名稱]框中輸入一個(gè)數(shù)據(jù)源名稱(如cjgl),[說(shuō)明]框中可不輸入,然后在[服務(wù)器]列表框中選擇需要連接的SQLServer服務(wù)器。(5)設(shè)置身份驗(yàn)證方式單擊[下一步]按鈕,打開(kāi)對(duì)話框如圖9-5所示。在該對(duì)話框中,可以設(shè)置身份驗(yàn)證方式。若選擇[使用用戶輸入登錄ID和密碼的SQLServer驗(yàn)證],需要輸入登錄ID和密碼,sa是SQLServer2000的系統(tǒng)管理員帳號(hào)。圖8-5設(shè)置身份驗(yàn)證方式14(6)設(shè)置默認(rèn)的數(shù)據(jù)庫(kù)單擊[下一步]按鈕,打開(kāi)設(shè)置數(shù)據(jù)庫(kù)選項(xiàng)對(duì)話框,如圖8-6所示。系統(tǒng)默認(rèn)的數(shù)據(jù)庫(kù)為master,在[更改默認(rèn)的數(shù)據(jù)庫(kù)為]下拉列表框中,選擇“成績(jī)管理”,即將默認(rèn)數(shù)據(jù)庫(kù)設(shè)置為所需要的數(shù)據(jù)庫(kù)。圖8-6設(shè)置數(shù)據(jù)庫(kù)連接15

(7)設(shè)置其它屬性單擊[下一步]按鈕,打開(kāi)設(shè)置其它屬性的窗口,如圖8-7所示。在此可以設(shè)置用于SQLServer消息的語(yǔ)言、數(shù)據(jù)加密、字符數(shù)據(jù)轉(zhuǎn)換等等。圖9-7設(shè)置其它屬性16(8)單擊[完成]按鈕,將打開(kāi)數(shù)據(jù)源的匯總信息窗口,如圖8-8所示。在此窗口中綜合顯示了數(shù)據(jù)源的各項(xiàng)設(shè)置,從而決定是否創(chuàng)建數(shù)據(jù)庫(kù)。圖8-8數(shù)據(jù)源匯總信息顯示17(9)單擊[測(cè)試數(shù)據(jù)源]按鈕,可以檢查數(shù)據(jù)源配置是否成功。若配置成功,將顯示圖8-9所示的對(duì)話框。圖8-9測(cè)試數(shù)據(jù)源結(jié)果顯示188.2數(shù)據(jù)庫(kù)訪問(wèn)控件的應(yīng)用在VB中,開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序有兩種方式:一種是利用VB提供的數(shù)據(jù)庫(kù)訪問(wèn)控件,另一種是編寫(xiě)程序代碼。VB6.0提供了支持DAO、RDO、ADO的特殊控件,以便訪問(wèn)和操作數(shù)據(jù)庫(kù)。Data控件可以創(chuàng)建DAO對(duì)象,RemoteData控件可以創(chuàng)建RDO對(duì)象,ADOData控件可以創(chuàng)建ADO對(duì)象利用這些控件可以方便地連接到數(shù)據(jù)庫(kù)并操作數(shù)據(jù)庫(kù),但這些控件并不能顯示數(shù)據(jù),必須借助數(shù)據(jù)綁定控件(如文本框等)顯示、修改數(shù)據(jù)。使用數(shù)據(jù)庫(kù)訪問(wèn)控件,可以簡(jiǎn)化開(kāi)發(fā)過(guò)程,減少代碼編寫(xiě)量,從而提高工作效率。19ADOData控件與Data控件、RemoteData控件相比,ADOData控件的功能更為強(qiáng)大,使用更為方便。因此本章主要介紹支持ADO的數(shù)據(jù)控件ADOData,及與其綁定的數(shù)據(jù)綁定控件的主要功能及其應(yīng)用。208.2.1ADOData控件及數(shù)據(jù)綁定控件ADOData控件可以說(shuō)是連接數(shù)據(jù)庫(kù)和數(shù)據(jù)綁定控件的橋梁。通過(guò)設(shè)置ADOData控件的屬性,可以讓它和已存在的數(shù)據(jù)庫(kù)聯(lián)系起來(lái)并能指定訪問(wèn)數(shù)據(jù)庫(kù)中的某個(gè)表,并通過(guò)數(shù)據(jù)綁定控件(如文本框,復(fù)選框等控件),顯示數(shù)據(jù)庫(kù)中的數(shù)據(jù)。數(shù)據(jù)綁定控件用來(lái)顯示數(shù)據(jù)表中的數(shù)據(jù)。需將控件綁定到ADOData控件上的某字段上,就可顯示和修改該字段的數(shù)據(jù)。21文本框(Text):顯示或輸入數(shù)據(jù)標(biāo)簽(Label):顯示數(shù)據(jù)復(fù)選框(Check):顯示邏輯類型字段,True(Yes)/False(No)列表框(List),組合框(Combo):顯示數(shù)據(jù)列表,圖像框(Image),圖片框(Picture):顯示圖片,要求字段為二進(jìn)制類型.OLE容器控件:顯示OLE類型字段的數(shù)據(jù)其它ActiveX控件.可以與ADOData控件一起使用的數(shù)據(jù)綁定控件有:22大多數(shù)數(shù)據(jù)綁定控件都有以下這三種屬性:(1)DataSource:數(shù)據(jù)源屬性。指定需要綁定到的ADOData控件的名稱。(2)DataField:用來(lái)指定綁定到哪個(gè)字段上。(3)DataChange:用來(lái)指出顯示在綁定控件里的數(shù)據(jù)是否已經(jīng)被改變,如果改變,值為True,否則值為False。238.2.2用ADOData控件建立數(shù)據(jù)庫(kù)應(yīng)用程序下面通過(guò)一個(gè)簡(jiǎn)單的例子,介紹用ADOData控件建立數(shù)據(jù)瀏覽窗體的基本步驟。(1)新建一個(gè)標(biāo)準(zhǔn)的VB工程,將ADOData控件添加到工具箱中執(zhí)行菜單[工程]\[部件],打開(kāi)“部件”對(duì)話框,在“控件”列表框中選中“MicrosoftADODataControl6.0(OLEDB)”項(xiàng),將ADOData控件添加到工具箱中。(2)將ADOData控件添加到窗體上在窗體上,ADOData控件的外觀如圖8-10所示,默認(rèn)控件名稱為Adodc1,可以單擊其上的箭頭按鈕在記錄之間移動(dòng)。圖8-10ADOData控件的外觀24(3)設(shè)置ADOData控件的數(shù)據(jù)源連接屬性操作步驟如下:在Adodc1控件的屬性窗口中,選擇(自定義)屬性右邊的[…]按鈕,打開(kāi)[屬性頁(yè)]對(duì)話框,或鼠標(biāo)右擊Adodc1控件,在彈出的快捷菜單中選擇[屬性]命令,打開(kāi)[屬性頁(yè)]對(duì)話框如圖8-11所示。在[通用]選項(xiàng)卡中選擇“使用ODBC數(shù)據(jù)資源名稱”,并在下拉列表中選擇前邊建立的ODBC數(shù)據(jù)源名“cjgl”。圖8-11ADOData控件的[屬性頁(yè)]對(duì)話框25單擊[身份驗(yàn)證]選項(xiàng)卡(如圖8-12),輸入用戶名(例如sa)和密碼(例如sa)。單擊[記錄源]選項(xiàng)卡(如圖8-13),在該選項(xiàng)卡中,可以設(shè)置ADOData控件的返回記錄的記錄源。記錄源是從命令對(duì)象獲取的,可以在[命令類型]下拉列表中選擇用于記錄源的命令類型。各種命令類型的含義如表所示。命令類型含義8-adCmdUnknow未知類型,用戶需在[命令文本(SQL)]框中輸入SQL語(yǔ)句建立命令對(duì)象1-adCmdText文本類型,用戶需在[命令文本(SQL)]框中輸入SQL語(yǔ)句建立命令對(duì)象2-adCmdTable表類型,用戶需在[表或存儲(chǔ)過(guò)程名稱]下拉列表中選擇一個(gè)數(shù)據(jù)表來(lái)建立命令對(duì)象(相當(dāng)于輸入:Select*FromTable)4-adCmdStoredProc存儲(chǔ)過(guò)程,用戶需在[表或存儲(chǔ)過(guò)程名稱]下拉列表中選擇一個(gè)查詢的名稱來(lái)建立命令對(duì)象26圖8-12身份驗(yàn)證的設(shè)置圖8-13記錄源的設(shè)置27例如要訪問(wèn)學(xué)生信息表,選擇命令類型為:2-adCmdTable然后在[表或存儲(chǔ)過(guò)程名稱]下拉列表框中選擇“學(xué)生信息表”(如圖8-13所示)。設(shè)置完成后,單擊[確定]按鈕。也可以選擇命令類型為1-adCmdText,然后在[命令文本(SQL)]框中輸入如下SQL語(yǔ)句:

Select*From學(xué)生信息表設(shè)置完成后,單擊[確定]按鈕。28(4)向窗體中添加其他數(shù)據(jù)綁定控件,并綁定到Adodc1上在窗體Form1上,添加5個(gè)文本框用于顯示字段中的數(shù)據(jù),5個(gè)標(biāo)簽用于說(shuō)明對(duì)應(yīng)的字段名(見(jiàn)圖8-14)。圖8-14數(shù)據(jù)瀏覽窗體設(shè)計(jì)界面29將控件(如Text)綁定到Adodc1上的方法如下:設(shè)置綁定控件的DataSource屬性為數(shù)據(jù)控件名:Adodc1設(shè)置綁定控件的DataField屬性為要顯示的字段名各個(gè)文本框的屬性設(shè)置如表8-2所示.考慮到瀏覽數(shù)據(jù)的窗體,不應(yīng)允許修改數(shù)據(jù),所以將文本框的Locked屬性設(shè)為True,使之只能顯示數(shù)據(jù)而不能修改或輸入數(shù)據(jù)。30當(dāng)所有文本框都通過(guò)表8-2所示的屬性設(shè)置后,即完成了綁定到Adodc1所連接的數(shù)據(jù)源。這時(shí)可運(yùn)行程序,結(jié)果如圖9-15所示,可見(jiàn)文本框中顯示了學(xué)生信息表的第一條記錄信息,若單擊Adodc1上的按鈕,可顯示其他記錄。控件名屬性名屬性值控件名屬性名屬性值Text1DataSourceAdodc1Text3DataSourceAdodc1DataField學(xué)號(hào)DataField性別LockedTrueLockedTrueText2DataSourceAdodc1Text4DataSourceAdodc1DataField姓名DataField生日LockedTrueLockedTrueText2DataSourceAdodc1Text2LockedTrueDataField專業(yè)圖8-15數(shù)據(jù)瀏覽窗體運(yùn)行界面318.2.3ADOData控件的常用屬性及方法1.ADOData控件的常用屬性介紹如下:Name:名稱。默認(rèn)名稱:Adodc1,Adodc2等。Caption:設(shè)置顯示在控件上的標(biāo)題。ConnectionString:設(shè)置到數(shù)據(jù)源的連接信息。CommandType:設(shè)置返回記錄集的類型。CommandType

的值用于指明RecordSource

的類型。CommandType的取值及含義如下:1-adCmdText:文本類型,可在"命令文本框"中輸入SQL語(yǔ)句。表示返回的記錄集是執(zhí)行SQL語(yǔ)句的結(jié)果。2-adCmdTable:表類型??稍?表或存儲(chǔ)過(guò)程名"框中選擇一個(gè)表名稱(相當(dāng)于選擇表的所有字段)。表示返回的記錄集類型是一個(gè)數(shù)據(jù)表。4-adCmdStoredProc:存儲(chǔ)過(guò)程類型。32ReocordSurce:記錄源。返回或設(shè)置Recordset的生成方式。可以是SQL語(yǔ)句,表名,查詢名等。Recordset:記錄集對(duì)象。2.ADOData控件的Refresh方法功能:重新讀數(shù)據(jù)庫(kù),刷新記錄集。使用格式:Adodc1.RefreshRefresh方法可用于ADOData控件的數(shù)據(jù)源連接發(fā)生變化時(shí),使ADOData控件重新連接數(shù)據(jù)庫(kù)。也可在執(zhí)行AddNew方法后,新數(shù)據(jù)尚未寫(xiě)入數(shù)據(jù)庫(kù)時(shí),調(diào)用Refresh方法,清除用戶所做的添加和修改。338.2.4RecordSet對(duì)象的常用屬性及方法1.RecordSet

對(duì)象的常用屬性ADOData控件將數(shù)據(jù)庫(kù)中的指定數(shù)據(jù)提取出來(lái),并放在一個(gè)記錄集中,RecordSet即記錄集對(duì)象,指當(dāng)前數(shù)據(jù)庫(kù)中的一系列記錄。其主要屬性如下:(1)EOF和BOF屬性這兩個(gè)屬性是反映記錄指針是否到記錄頭和記錄尾的標(biāo)志。如果記錄指針位于第一條記錄之前,則BOF=True否則BOF=False。如果記錄指針位于最后一條記錄之后,則EOF=True否則EOF=False。

EOF和BOF屬性具有以下特點(diǎn):如果記錄集是空的,則EOF和BOF的值都是True如果EOF和BOF的值成為True之后,只有當(dāng)記錄指針移到實(shí)際存在的記錄上,二者的值才會(huì)變?yōu)镕alse。34(2)RecordCount屬性反映記錄集中的記錄總數(shù)。例如要在Adodc1控件上顯示記錄總數(shù),可用如下語(yǔ)句:Adodc1.Caption=Adodc1.Recordset.RecordCount(3)AbsolutePosition

屬性

反映當(dāng)前記錄的位置。若當(dāng)前顯示的是第一條記錄,則AbsolutePosition=1例如要在Adodc1控件上顯示當(dāng)前記錄的位置,可用如下語(yǔ)句:Adodc1.Caption=

Adodc1.Recordset.AbsolutePosition例如要在Adodc1控件上顯示當(dāng)前記錄的位置及記錄總數(shù),可用如下語(yǔ)句:Adodc1.Caption=Adodc1.Recordset.AbsolutePosition&"/"&Adodc1.Recordset.RecordCount352.RecordSet

對(duì)象的常用方法(1)Move方法利用ADOData控件,通過(guò)編程的方法進(jìn)行數(shù)據(jù)庫(kù)瀏覽時(shí),需要用到ADOData控件的RecordSet對(duì)象的Move方法在記錄集之間移動(dòng)記錄指針。主要有以下幾種方法:MoveNext

方法:記錄指針移到下一條記錄MovePrevious

方法:記錄指針移到上一條記錄MoveFirst

方法:記錄指針移到第一條記錄MoveLast

方法:記錄指針移到最后一條記錄Move[n]

方法:使記錄指針前移或后移n條記錄。n為正數(shù),表示向后移動(dòng);n為負(fù)數(shù),表示向前移動(dòng).36例8-2設(shè)計(jì)數(shù)據(jù)瀏覽窗體,利用Move方法實(shí)現(xiàn)數(shù)據(jù)庫(kù)的瀏覽。在例8-1的基礎(chǔ)上,添加按鈕如圖8-16,運(yùn)行時(shí)不顯示Adodc1(設(shè)其Visible屬性為False),通過(guò)按鈕實(shí)現(xiàn)記錄指針的移動(dòng)。圖8-16例8-2運(yùn)行界面37設(shè)置新增控件的屬性如表??丶麑傩悦麑傩灾底饔肅mdFirstCaption首記錄將記錄指針移到第1條記錄CmdPreCaption前移記錄指針向前移動(dòng)一條記錄CmdNextCaption后移記錄指針向后移動(dòng)一條記錄CmdLastCaption末記錄將記錄指針移到末條記錄CmdNCaption移動(dòng)記錄數(shù)一次移動(dòng)n條記錄Text6Text空輸入要移動(dòng)的記錄數(shù)量Label6caption空顯示當(dāng)前記錄數(shù)及記錄總數(shù)38編程如下:PrivateSubForm_Load()

‘設(shè)置按鈕的初始狀態(tài)CmdFirst.Enabled=False‘[首記錄](méi)按鈕無(wú)效CmdPre.Enabled=False‘[前移]按鈕無(wú)效CmdNext.Enabled=True‘后移]按鈕有效CmdLast.Enabled=True‘[末記錄](méi)按鈕有效Label6.Caption="記錄:"&Adodc1.Recordset.AbsolutePosition&"/"&Adodc1.Recordset.RecordCountEndSub39PrivateSubCmdFirst_Click()Adodc1.Recordset.MoveFirst

'記錄指針移到首記錄(顯示首記錄)CmdFirst.Enabled=False'讓[首記錄](méi)按鈕無(wú)效CmdPre.Enabled=False'讓[前移]按鈕無(wú)效CmdNext.Enabled=True'讓[后移]按鈕有效CmdLast.Enabled=True'讓[末記錄](méi)按鈕有效‘在Label6上顯示當(dāng)前記錄號(hào)/記錄總數(shù):Label6.Caption="記錄:"&Adodc1.Recordset.AbsolutePosition&"/"&Adodc1.Recordset.RecordCountEndSub40PrivateSubCmdPre_Click()Adodc1.Recordset.MovePrevious

'記錄指針移到前一條記錄CmdNext.Enabled=TrueCmdLast.Enabled=TrueIfAdodc1.Recordset.BOFThen'如果記錄指針移到首記錄之前,Adodc1.Recordset.MoveFirst'則記錄指針移到首記錄上

CmdFirst.Enabled=False

CmdPre.Enabled=FalseEndIfLabel6.Caption="記錄:"&Adodc1.Recordset.AbsolutePosition&"/"&Adodc1.Recordset.RecordCountEndSub41PrivateSubCmdNext_Click()Adodc1.Recordset.MoveNext'記錄指針移到下一條記錄CmdFirst.Enabled=TrueCmdPre.Enabled=TrueIfAdodc1.Recordset.EOFThen'如果記錄指針移到了末記錄之后

Adodc1.Recordset.MoveLast'則記錄指針移到末記錄上

CmdNext.Enabled=False

CmdLast.Enabled=FalseEndIfLabel6.Caption="記錄:"&Adodc1.Recordset.AbsolutePosition&"/"&Adodc1.Recordset.RecordCountEndSub42PrivateSubCmdLast_Click()Adodc1.Recordset.MoveLast

'移到末記錄

CmdFirst.Enabled=True

CmdPre.Enabled=True

CmdNext.Enabled=False

CmdLast.Enabled=FalseLabel6.Caption="記錄:"&Adodc1.Recordset.AbsolutePosition&"/"&Adodc1.Recordset.RecordCountEndSub43PrivateSubCmdN_Click()DimnAsIntegern=Text6.TextAdodc1.Recordset.MovenLabel6.Caption="記錄:"&Adodc1.Recordset.AbsolutePosition&"/"&Adodc1.Recordset.RecordCountEndSub44(2)AddNew

方法功能:用于向數(shù)據(jù)表中增加空記錄。(3)Uptate方法功能:用來(lái)把添加的新記錄或修改的記錄保存到數(shù)據(jù)表中,該方法只能在AddNew方法被執(zhí)行之后才能執(zhí)行。45增加記錄的操作可分為以下3步:調(diào)用RecordSet

對(duì)象的AddNew

方法,增加一個(gè)空記錄,語(yǔ)句格式如下:

Adodc1.RecordSet.AddNew在數(shù)據(jù)綁定控件中輸入記錄值,或用代碼給字段賦值,格式如下:

Adodc1.RecordSet.Fields(“字段名”)=值調(diào)用Update方法,將輸入的新記錄值保存到數(shù)據(jù)表中,語(yǔ)句格式如下:

Adodc1.RecordSet.Update(4)Delete方法功能:刪除當(dāng)前記錄。使用格式:Adodc1.RecordSet.Delete46例8-3設(shè)計(jì)數(shù)據(jù)編輯窗體。該窗體具有新增記錄、刪除記錄、修改記錄、取消修改等功能。當(dāng)新增記錄或修改記錄時(shí),只要沒(méi)有單擊[確定]按鈕,單擊[取消]按鈕,可以取消上述操作。在例8-2的基礎(chǔ)上,增加以下功能按鈕:添加(CmdAdd):執(zhí)行記錄集的AddNew方法刪除(CmdDel):執(zhí)行記錄集的Delete方法確定(CmdOk):執(zhí)行記錄集的Update方法取消(CmdEsc):執(zhí)行數(shù)據(jù)控件的Refresh方法圖8-17例9-3運(yùn)行界面47編寫(xiě)代碼PrivateSubForm_Load()CmdFirst.Enabled=False'[首記錄](méi)按鈕無(wú)效CmdPre.Enabled=False'[前移]按鈕無(wú)效CmdNext.Enabled=True'[后移]按鈕有效CmdLast.Enabled=True'[末記錄](méi)按鈕有效CmdAdd.Enabled=True

‘[添加]按鈕有效CmdDel.Enabled=True

‘[刪除]按鈕有效CmdOk.Enabled=False

‘[確定]按鈕無(wú)效CmdEsc.Enabled=False

'[取消]按鈕無(wú)效Label6.Caption="記錄:"&Adodc1.Recordset.AbsolutePosition&"/"&Adodc1.Recordset.RecordCountEndSub48PrivateSubCmdAdd_Click()‘[添加]按鈕的單擊事件Adodc1.Recordset.AddNewCmdAdd.Enabled=FalseCmdDel.Enabled=FalseCmdOk.Enabled=TrueCmdEsc.Enabled=TrueEndSubPrivateSubCmdOk_Click()'單擊[確認(rèn)]按鈕Adodc1.Recordset.UpdateCmdAdd.Enabled=TrueCmdDel.Enabled=TrueCmdOk.Enabled=FalseCmdEsc.Enabled=FalseEndSub49PrivateSubCmdDel_Click()'單擊[刪除]按鈕x=MsgBox("確實(shí)要?jiǎng)h除當(dāng)前記錄嗎?",vbYesNo+vbQuestion,"確認(rèn)")Ifx=vbYesThen

Adodc1.Recordset.DeleteAdodc1.Recordset.MoveNextIfAdodc1.Recordset.EOFThenAdodc1.Recordset.MoveLastEndIfElseAdodc1.RefreshEndIfEndSub50PrivateSubCmdEsc_Click()'取消按鈕Adodc1.RefreshCmdAdd.Enabled=TrueCmdDel.Enabled=TrueCmdOk.Enabled=FalseCmdEsc.Enabled=FalseEndSub518.3數(shù)據(jù)綁定控件的應(yīng)用8.3.1數(shù)據(jù)綁定控件的概念數(shù)據(jù)綁定控件是數(shù)據(jù)顯示控件,只要將數(shù)據(jù)綁定控件綁定到ADOData控件的Recordset對(duì)象中的某個(gè)字段上,就可以顯示當(dāng)前記錄的該字段的值,并且可以接受用戶對(duì)數(shù)據(jù)的修改。使用綁定控件的方法和步驟為:將綁定控件添加到窗體上,并調(diào)整大小和布局。設(shè)置控件的一般屬性。設(shè)置控件的DataSource屬性,即綁定到ADOData控件。設(shè)置控件的DataField屬性,即綁定到ADOData控件的記錄集對(duì)象(Recordset)的某個(gè)字段上。注意:數(shù)據(jù)綁定控件的DataSource屬性在運(yùn)行時(shí)是不可改的,所以不能在運(yùn)行程序時(shí)通過(guò)代碼設(shè)置該屬性。52【例8.4】設(shè)計(jì)含有學(xué)生照片字段的學(xué)生信息編輯窗體。在以前建立的學(xué)生信息表中增加“照片”字段。每個(gè)學(xué)生的照片以圖片文件形式存放在磁盤(pán)中,圖片文件名及其所在的路徑(位置)存放在學(xué)生信息表中的照片字段中,所以該字段的類型設(shè)為varchar型。本題采用Image顯示照片,因?yàn)閷mage控件的Stretch屬性設(shè)為True,可以自動(dòng)調(diào)整圖片的大小以適應(yīng)Image控件邊框的大小。用Image或Picture控件顯示圖片的方法:Image1.Picture=LoadPicture(圖片文件名)Picture1.Picture=LoadPicture(圖片文件名)53將該圖片加載到Image1上,可執(zhí)行如下語(yǔ)句:Image1.Picture=LoadPicture("d:\lzw\phot\face01.jpg")若要清空?qǐng)D象框,即Image1中不顯示圖片,可執(zhí)行如下語(yǔ)句:Image1.Picture=LoadPicture()如果要將存放在數(shù)據(jù)表中“照片”字段的圖片文件裝載到Picture1上顯示出來(lái),可執(zhí)行如下語(yǔ)句:Picture1.Picture=LoadPicture(Adodc1.RecordSet.Fields("照片"))54設(shè)計(jì)過(guò)程如下:(1)設(shè)計(jì)界面如圖8.18所示。圖8.18例8.4的設(shè)計(jì)界面增加了一個(gè)Image1,用于顯示照片;增加“瀏覽…”按鈕,用于在錄入照片時(shí),顯示“打開(kāi)文件”對(duì)話框,以便用戶選擇圖片文件;增加CommanDialog控件,用于提供“打開(kāi)文件”對(duì)話框。55(2)設(shè)置新增控件的屬性如表所示。控件名屬性名屬性值按鈕CmdFindCaption瀏覽…圖像框Image1stretchTrueBorderStyle1-FixedSingle(單邊框)通用對(duì)話框Cdialog1Caption打開(kāi)文件56(3)編寫(xiě)代碼如下:PrivateSubForm_Load()CmdFirst.Enabled=FalseCmdPre.Enabled=FalseCmdNext.Enabled=TrueCmdLast.Enabled=TrueAdodc1.Recordset.MoveFirstCmdAdd.Enabled=TrueCmdDel.Enabled=TrueCmdOk.Enabled=FalseCmdEsc.Enabled=FalseLabel6.Caption="記錄:"&Adodc1.Recordset.AbsolutePosition&"/"_&Adodc1.Recordset.RecordCountImage1.Picture=LoadPicture(Adodc1.Recordset.Fields("照片"))'顯示照片CmdFind.Visible=False'[瀏覽…]按鈕不可見(jiàn)EndSub57'單擊“添加”按鈕的代碼PrivateSubCmdAdd_Click()Adodc1.Recordset.AddNewCmdAdd.Enabled=FalseCmdDel.Enabled=FalseCmdOk.Enabled=TrueCmdEsc.Enabled=TrueImage1.Picture=LoadPicture()'清空?qǐng)D像框CmdFind.Visible=True'[瀏覽…]按鈕可見(jiàn)EndSub58‘單擊[瀏覽…]按鈕的代碼:PrivateSubCmdFind_Click()CDialog1.ShowOpen'顯示“打開(kāi)文件”對(duì)話框Adodc1.Recordset.Fields("照片")=CDialog1.FileName'選中的文件名送數(shù)據(jù)表中Image1.Picture=LoadPicture(Adodc1.Recordset.Fields("照片"))'顯示照片EndSub59PrivateSubCmdOk_Click()'單擊“確認(rèn)”按鈕的代碼Adodc1.Recordset.UpdateCmdAdd.Enabled=TrueCmdDel.Enabled=TrueCmdOk.Enabled=FalseCmdEsc.Enabled=FalseCmdFind.Visible=FalseLabel6.Caption="記錄:"&Adodc1.Recordset.AbsolutePosition&"/"&_Adodc1.Recordset.RecordCountEndSub60PrivateSubCmdFirst_Click()'單擊“首記錄”按鈕的代碼Adodc1.Recordset.MoveFirstCmdFirst.Enabled=FalseCmdPre.Enabled=FalseCmdNext.Enabled=TrueCmdLast.Enabled=TrueImage1.Picture=LoadPicture(Adodc1.Recordset.Fields("照片"))Label6.Caption="記錄:"&Adodc1.Recordset.AbsolutePosition&"/"&Adodc1.Recordset.RecordCountEndSub61“刪除”、“取消”按鈕的單擊事件過(guò)程代碼與例8.3相同。其余移動(dòng)記錄指針的按鈕單擊事件過(guò)程代碼與例8.3相比,都增加了顯示照片的語(yǔ)句:Image1.Picture=LoadPicture(Adodc1.Recordset.Fields("照片"))運(yùn)行程序,當(dāng)單擊各移動(dòng)按鈕時(shí),學(xué)生記錄改變,照片也隨之改變。當(dāng)單擊“添加”按鈕時(shí),所有文本框及圖像框清空,表示空記錄,供用戶輸入新記錄數(shù)據(jù),此時(shí)“瀏覽…”按鈕可見(jiàn),單擊“瀏覽…”按鈕,出現(xiàn)“打開(kāi)文件”對(duì)話框,用戶可在其中選擇圖片文件,加載到圖像框中,單擊“確定”按鈕,則新錄入的數(shù)據(jù)及圖片文件名保存到數(shù)據(jù)表中。628.3.2List控件和Combo控件的應(yīng)用在設(shè)計(jì)數(shù)據(jù)錄入窗體時(shí),有的字段數(shù)據(jù)取值范圍很小,為了錄入方便并且保證該字段數(shù)據(jù)的標(biāo)準(zhǔn)性,可以使用列表框或組合下拉列表框?yàn)橛脩籼峁┛蛇x的輸入項(xiàng)。例如,將例8-3中的錄入性別字段的文本框Text3刪除,改用Combo控件,控件的名稱用默認(rèn)名Combo1,并綁定到Adodc1(已連接到學(xué)生信息表)的性別字段,即設(shè)置Combo1的屬性DataSource為:Adodc1DataField為:性別。63在窗體的Form_Load()事件中,用Combo1的AddItem方法,將“男”、“女”兩項(xiàng)添加到Combo1中,代碼如下:PrivateSubForm_Load()Combo1.AddItem"男"Combo1.AddItem"女"EndSub運(yùn)行界面如圖所示。圖8-18用Combo控件顯示或輸入性別字段648.3.3DataList控件和DataCombo控件的應(yīng)用該兩個(gè)控件屬于ActiveX控件,不在標(biāo)準(zhǔn)工具箱中,需要添加到工具箱中。添加控件到工具箱中的方法如下:執(zhí)行菜單[工程]\[部件]命令,選中“MicrosoftDataListControls6.0”,即可見(jiàn)DataList和DataCombo兩個(gè)控件的圖標(biāo)出現(xiàn)在工具箱中。DataList和DataCombo控件的作用是在錄入數(shù)據(jù)時(shí),給用戶提供輸入選項(xiàng)列表。與List和Combo不同的是,DataList和DataCombo這兩個(gè)控件中的選項(xiàng)字符串是通過(guò)其所綁定的數(shù)據(jù)表字段的內(nèi)容自動(dòng)添加的。65主要屬性有:DataSource:實(shí)際要錄入的記錄源的ADOData控件名。DataField:實(shí)際要錄入數(shù)據(jù)的字段名。RowSource:用于生成控件列表信息的ADOData控件名稱。ListField:用于填充列表框的由RowSource指定的記錄集中的字段名。BoundColumn:由RowSource指定記錄集的實(shí)際要錄入的字段名,該字段名是與DataSource相關(guān)聯(lián)的字段(一般與DataField的相同)??丶淖饔茫航柚赗owSource的ListField字段,為DataSource的DataField字段輸入數(shù)據(jù)。66例8-5設(shè)計(jì)課程信息表的編輯窗體,實(shí)現(xiàn)對(duì)課程信息表錄入數(shù)據(jù)。要求:對(duì)課程信息表進(jìn)行錄入時(shí),輸入“教師編號(hào)”時(shí),借助“教師信息表”中的“姓名”字段進(jìn)行輸入。即“教師編號(hào)”字段的輸入控件采用DataCombo,其中列出的是現(xiàn)有教師的姓名,供用戶選擇錄入,雖然表面看錄入的是姓名,而實(shí)際錄入課程信息表的是該教師的教師編號(hào)。67課程編號(hào)課程名稱學(xué)時(shí)學(xué)分教師編號(hào)1001C語(yǔ)言505010011002數(shù)據(jù)結(jié)構(gòu)606030021003數(shù)據(jù)庫(kù)404030021004操作系統(tǒng)505030041005機(jī)械設(shè)計(jì)707100021006機(jī)械原理40410001教師編號(hào)姓名性別職稱單位01001鄭虹女副教授機(jī)械學(xué)院01002孫燕女講師機(jī)械學(xué)院03001趙博男教授信息學(xué)院03002王偉男教授信息學(xué)院03003王剛男副教授信息學(xué)院03004孫麗女講師信息學(xué)院表8-5教師信息表表8-6課程信息表DataSourceDataFieldRowSourceListFieldBoundColumn68(1)設(shè)計(jì)界面如圖8-19所示(2)利用Adodc1的屬性頁(yè),將Adodc1連接到數(shù)據(jù)源cjgl的課程信息表上;將Adodc2連接到數(shù)據(jù)源cjgl的教師信息表上。圖8-19設(shè)計(jì)界面69連接完數(shù)據(jù)源的Adodc1和Adodc2的屬性值結(jié)果如下表所示??丶麑傩悦麑傩灾?/p>

Adodc1ConnectionStringDSN=cjglPasswordsaCommandType2-adCmdTableRecordSource課程信息表UserNamesaVisibleFalseAdodc2ConnectionStringDSN=cjglCommandType2-adCmdTableRecordSource教師信息表PasswordsaUserNamesaVisibleFalse70設(shè)置DataCombo1控件的屬性如下:

DataSourceAdodc1

DataField

教師編號(hào)

RowSourceAdodc2

ListField

姓名

BoundColumn

教師編號(hào)如此設(shè)置DataCombo1的屬性之后,運(yùn)行界面如圖8-20,可見(jiàn)DataCombo1控件中填充的各項(xiàng)是教師信息表的姓名字段的數(shù)據(jù)。但實(shí)際要錄入到課程信息表的是教師編號(hào)字段。圖8-20運(yùn)行界面71(3)對(duì)各按鈕編程如下:PrivateSubCmdAdd_Click()‘[增加]按鈕單擊事件Adodc1.Recordset.AddNewCmdAdd.Enabled=FalseCmdDel.Enabled=FalseCmdOK.Enabled=TrueCmdCancel.Enabled=TrueEndSubPrivateSubCmdOK_Click()‘[確定]按鈕單擊事件Adodc1.Recordset.UpdateCmdAdd.Enabled=TrueCmdDel.Enabled=TrueCmdOK.Enabled=FalseCmdCancel.Enabled=FalseEndSub72‘[取消]按鈕單擊事件PrivateSubCmdCancel_Click()Adodc1.RefreshCmdAdd.Enabled=TrueCmdDel.Enabled=TrueCmdOK.Enabled=FalseCmdCancel.Enabled=FalseEndSub73PrivateSubCmdDel_Click()'單擊[刪除]按鈕x=MsgBox("確實(shí)要?jiǎng)h除當(dāng)前記錄嗎?",vbYesNo+vbQuestion,"確認(rèn)")Ifx=vbYesThenAdodc1.Recordset.DeleteAdodc1.Recordset.MoveNextIfAdodc1.Recordset.EOFThenAdodc1.Recordset.MoveLastEndIfElseAdodc1.RefreshEndIfEndSub748.3.4DataGrid控件的應(yīng)用DataGrid控件可以用表格形式顯示記錄集數(shù)據(jù)。只要將DataGrid控件綁定到ADOData控件上,就可以將ADOData控件所連接的記錄源中的數(shù)據(jù)自動(dòng)顯示到DataGrid表格中。將DataGrid控件加載到VB工具箱中的方法如下:執(zhí)行[工程]\[部件]命令,打開(kāi)[部件]對(duì)話框;在[控件]選項(xiàng)卡中,選中“MicrosoftDataGridControl6.0”;單擊[確定]按鈕,即可將控件加到了工具箱中。75DataGrid的主要屬性如下:Caption:設(shè)置表格的標(biāo)題文字。HeadFont:設(shè)置標(biāo)題的字體。Font:設(shè)置表格顯示的字體。DataSource:數(shù)據(jù)源屬性。指定需要綁定的ADOData控件的名稱。Col:表示當(dāng)前列號(hào)(從0開(kāi)始)Row:表示當(dāng)前行號(hào)(即當(dāng)前記錄號(hào),從0開(kāi)始)Text:存放選中單元格的文本AllowAddNew:指出是否允許向DataGrid控件所連接的記錄集中增加新記錄。True:允許。AllowDelete:指出是否允許在DataGrid控件所連接的記錄集中刪除記錄。True:允許。AllowUpdate:指出是否允許在DataGrid控件所連接的記錄集中修改記錄。True:允許。76例8-6DataGrid控件與Adodc1綁定,顯示教師信息表的所有記錄。要求:運(yùn)行時(shí),顯示課程信息編輯窗體(如圖9-21所示),當(dāng)錄入教師姓名時(shí),若要了解教師的詳細(xì)信息,可單擊[教師信息]按鈕,打開(kāi)Form2(如圖9-22所示),在Form2中用表格形式瀏覽所有教師的基本信息,在瀏覽完教師基本信息后,單擊[返回]按鈕,則關(guān)閉瀏覽窗體,顯示編輯窗體。設(shè)計(jì)過(guò)程如下:(1)設(shè)計(jì)界面在例8-4的工程中,新添加一個(gè)窗體Form2,用來(lái)以表格形式顯示教師表的所有記錄。在窗體Form2中添加DataGrid1和Adodc1控件,添加一個(gè)按鈕,名稱為CmdBack,標(biāo)題為:返回(如圖8-22)。在Form1中添加一個(gè)按鈕,名稱為Cmd1,標(biāo)題為:教師信息(見(jiàn)圖8-21)。77圖8-21在Form1中添加[教師信息]按鈕圖8-22用DataGrid顯示教師信息表運(yùn)行界面78(2)設(shè)置控件的屬性設(shè)置Form2中的Adodc1控件的屬性如下:鼠標(biāo)右擊Adodc1控件,打開(kāi)屬性頁(yè),在[通用]選項(xiàng)卡中選擇ODBC數(shù)據(jù)資源名稱為cjgl;在[身份驗(yàn)證]選項(xiàng)卡中,輸入用戶名:sa、密碼:sa;在[記錄源]選項(xiàng)卡中,選擇命令類型:2-adCmdTable、在[表或存儲(chǔ)過(guò)程名]中選擇“教師信息表”,然后單擊[應(yīng)用]按鈕,再單擊[確定]按鈕,關(guān)閉該屬性對(duì)話框。Visible:False(運(yùn)行時(shí)不可見(jiàn))。設(shè)置Form2中的DataGrid1的屬性如下:數(shù)據(jù)源DataSource:Adodc1總標(biāo)題Caption:教師信息標(biāo)題的字體HeadFont:宋體、五號(hào)、加粗79(3)編寫(xiě)代碼在Form1中單擊[教師信息]按鈕時(shí),顯示Form2,編寫(xiě)代碼如下:

PrivateSubCmd1_Click()Form2.ShowEndSub在Form2中單擊[返回]按鈕時(shí),關(guān)閉Form2,編寫(xiě)代碼如下:PrivateSubCmdBack_Click()Form1.ShowUnloadMeEndSub80例8-7設(shè)計(jì)可以顯示教師信息,并且當(dāng)單擊DataGrid1選中教師表的某行記錄時(shí),在DataGrid2控件中顯示該教師所教的課程信息。(1)設(shè)計(jì)界面添加控件到窗體上,如圖8-23。圖8-23例8-6界面設(shè)計(jì)圖8-24例8-6運(yùn)行界面81(2)設(shè)置控件的屬性設(shè)置Adodc1控件的屬性如下:Visible:False(運(yùn)行時(shí)不可見(jiàn))。連接到教師信息表上設(shè)置Adodc2控件的屬性如下:與Adodc1控件的屬性設(shè)置基本相同,所不同的是[記錄源]的設(shè)置:在[記錄源]選項(xiàng)卡中,選則命令類型:1-adCmdText,在[命令文本(SQL)]框中輸入SQL語(yǔ)句:

Select*From課程信息表

82DataGrid1與Adodc1綁定,顯示教師表記錄,設(shè)置屬性如下:

DataSource:Adodc1Caption:教師信息HeadFont:宋體、五號(hào)、加粗DataGrid2與Adodc2綁定,顯示課程表信息,設(shè)置屬性如下:DataSource:Adodc2Caption:課程信息HeadFont:宋體、五號(hào)、加粗83(3)編寫(xiě)程序PrivateSubDataGrid1_Click()DimSQLStrAsStringSQLStr="Select*From課程信息表Where教師編號(hào)='"&Adodc1.Recordset.Fields("教師編號(hào)")&"'"Adodc2.RecordSource=SQLStr

'設(shè)置Adodc2連接的記錄源Adodc2.RefreshEndSub運(yùn)行程序,在DataGrid1中,單擊選擇某行記錄,則可在下邊的DataGrid2中顯示對(duì)應(yīng)教師的講課情況(結(jié)果見(jiàn)圖8-24)。84例8-8編寫(xiě)一個(gè)可瀏覽教師表數(shù)據(jù),并可修改教師表數(shù)據(jù)的程序。要求:在Form1中(如圖8-25),顯示教師信息表格;當(dāng)選中某行記錄并單擊[修改數(shù)據(jù)]按鈕時(shí),將打開(kāi)Form2(如圖8-26所示),顯示該行記錄的信息,并可以修改數(shù)據(jù)。圖8-25教師信息表界面圖8-26信息修改界面85(1)設(shè)計(jì)界面及設(shè)置屬性在Form1中,添加一個(gè)DataGrid1和Adodc1。設(shè)置屬性如下:將Adodc1連接到cjgl數(shù)據(jù)源的“教師信息表”,Visible:False(運(yùn)行時(shí)Adodc1不可見(jiàn));將DataGrid1的DataSource設(shè)為Adodc1,即綁定到Adodc1上,并在DataGrid1的屬性頁(yè)中的[通用]選項(xiàng)卡中,將[允許更新]、[允許刪除]復(fù)選框設(shè)為不選中狀態(tài)(即不允許在DataGrid1中修改數(shù)據(jù))。在Form1中,添加1個(gè)按鈕,名稱為CmdEdit,Caption設(shè)為“修改數(shù)據(jù)”。86Form2中,添加5個(gè)標(biāo)簽,用于顯示教師信息表的字段名,2個(gè)文本框Text1、Text2用于顯示在Form1中選中的記錄的教師編號(hào)和姓名。性別、職稱和單位分別用組合列表框Combo1、Combo2、Combo3顯示,這三個(gè)組合列表框也提供輸入值的選項(xiàng)列表。Form2中控件的屬性設(shè)置如表??丶麑傩悦麑傩灾悼丶麑傩悦麑傩灾礣ext1Text空CmdUpdateCaption更新Text2Text空CmdBackCaption返回Combo1List男女Combo2List教授副教授講師Combo3List信息學(xué)院機(jī)械學(xué)院經(jīng)貿(mào)學(xué)院外語(yǔ)學(xué)院87(2)程序設(shè)計(jì)如下Form1中的代碼:PrivateSubCmdEdit_Click()‘[修改數(shù)據(jù)]按鈕的單擊事件'判斷是否選中了表中的一行:IfAdodc1.Recordset.EOFOrAdodc1.Recordset.BOFThen

MsgBox"請(qǐng)選擇要修改的行"ExitSubEndIfForm2.Show'顯示Form2Form1.Hide'隱藏Form1EndSub88Form2中的代碼如下:PrivateSubForm_Load()’顯示在Form1中選擇的當(dāng)前記錄值Text1.Text=Form1.Adodc1.Recordset.Fields("教師編號(hào)")Text2.Text=Form1.Adodc1.Recordset.Fields("姓名")Combo1.Text=Form1.Adodc1.Recordset.Fields("性別")Combo2.Text=Form1.Adodc1.Recordset.Fields("職稱")Combo3.Text=Form1.Adodc1.Recordset.Fields("單位")EndSub89PrivateSubCmdUpdate_Click()’Form2中[更新]按鈕的單擊事件Form1.Adodc1.Recordset.Fields("教師編號(hào)")=Text1.TextForm1.Adodc1.Recordset.Fields("姓名")=Text2.TextForm1.Adodc1.Recordset.Fields("性別")=Combo1.TextForm1.Adodc1.Recordset.Fields("職稱")=Combo2.TextForm1.Adodc1.Recordset.Fields("單位")=Combo3.TextForm1.Adodc1.Recordset.UpdateForm1.Adodc1.RefreshEndSub90PrivateSubCmdBack_Click()‘Form2中[返回]按鈕的單擊事件UnloadForm2‘卸載Form2Form1.Show‘顯示Form1EndSub918.4在ADOData控件中使用SQL語(yǔ)句進(jìn)行查詢?cè)跀?shù)據(jù)庫(kù)應(yīng)用程序設(shè)計(jì)中,經(jīng)常需要查找滿足一定條件的記錄集,這就是查詢操作。利用SQL語(yǔ)言中的SELECT語(yǔ)句,可以實(shí)現(xiàn)查詢。在ADOData控件中使用Select語(yǔ)句查詢的步驟如下(1)給出Select語(yǔ)句字符串(2)將Select語(yǔ)句字符串賦給ADOData控件的RecordSource屬性(3)執(zhí)行ADOData控件的Refresh方法。例如在文本框中輸入要查詢的學(xué)生姓名,查詢?cè)撋幕拘畔⒌腟QL語(yǔ)句應(yīng)為:Str="Select*From學(xué)生信息表Where姓名='"&Text1&"'"Adodc1.RecordSource=StrAdodc1.Refresh92例8-9根據(jù)輸入的姓名,查詢教師講課信息。設(shè)計(jì)窗體如圖8-27。要求:在Text1中輸入姓名,單擊[查詢]按鈕,顯示該教師的講課情況如圖8-28。注意表中除了顯示課程信息表的所有字段,還顯示教師的“姓名”字段(該字段屬于教師信息表),所以要用到兩表查詢語(yǔ)句。圖8-27查詢界面的設(shè)計(jì)圖8-28查詢程序的運(yùn)行結(jié)果93添加控件,并設(shè)置屬性如下:設(shè)置Adodc1控件的屬性Visible:False鼠標(biāo)右擊Adodc1控件,打開(kāi)屬性頁(yè),在[通用]選項(xiàng)卡中選擇ODBC數(shù)據(jù)資源名稱為cjgl;在[記錄源]選項(xiàng)卡中,選則命令類型:

1-adCmdText,在[命令文本(SQL)]中輸入SQL語(yǔ)句:

Select*From教師信息表DataGrid1與Adodc1綁定,設(shè)置屬性如下:

DataSource:Adodc1Caption:教師信息表94文本框的屬性如下:名稱:Text1Text:清空標(biāo)簽的屬性:名稱:Label1Caption:輸入姓名按鈕的屬性如下:名稱:Cmd1Caption:查詢95編寫(xiě)代碼:'[查詢]按鈕的單擊事件:PrivateSubCmd1_Click()DimstrAsStringstr="Select教師信息表.姓名,課程信息表.*From課程信息表Join教師信息表

"str=str&"On教師信息表.教師編號(hào)=課程信息表.教師編號(hào)

"str=str&"Where教師信息表.姓名='"&Text1&"'"Adodc1.RecordSource=strAdodc1.RefreshEndSub96此題若改為“模糊查詢”,只需將代碼中的查詢語(yǔ)句的條件改為:"Where教師信息表.姓名Like'"&Text1&"%'"這時(shí)運(yùn)行程序,在文本框中只要輸入姓(例如:王),就可以在表格中顯示所有姓王的教師的講課信息。97例8-10設(shè)計(jì)能夠選擇多種條件的查詢窗體。要求:在例8-9的基礎(chǔ)上做進(jìn)一步的改進(jìn),可以選擇按教師姓名、教師編號(hào)、課程名稱、課程編號(hào)、學(xué)時(shí)等條件,查詢課程信息。查詢結(jié)果中包含:課程信息表的所有字段、教師信息表的“姓名”字段。(1)設(shè)計(jì)界面如圖8-29所示。其中組合列表框Combo1中添加查詢條件的字段名,供用戶選擇。圖8-29查詢界面的設(shè)計(jì)圖8-30查詢程序的運(yùn)行結(jié)果98(2)設(shè)計(jì)代碼PrivateSubForm_Load()Combo1.AddItem"姓名"'為組合列表框添加各選項(xiàng)Combo1.AddItem"教師編號(hào)"Combo1.AddItem"課程名稱"Combo1.AddItem"課程編號(hào)"Combo1.AddItem"學(xué)時(shí)"Combo1.Text="姓名"'讓組合框初始選中"姓名"項(xiàng)Text1.Text=""'清空文本框EndSub99PrivateSubCmd1_Click()DimstrAsStringstr="Select教師信息表.姓名,課程信息表.*From課程信息表

Join教師信息表

"

str=str&"On教師信息表.教師編號(hào)=課程信息表.教師編號(hào)

"

str=str&"Where課程信息表."&Combo1.Text&"Like'"&Text1&"%'"Adodc1.RecordSource=strAdodc1.RefreshEndSub本例實(shí)現(xiàn)模糊查詢,運(yùn)行程序時(shí),選擇按“課程名稱”查詢,輸入查詢信息:機(jī)械,結(jié)果搜索到課程名稱以“機(jī)械”開(kāi)頭的課程信息,如圖8-30。100例8-11設(shè)計(jì)登錄窗體。要求:將該登錄界面設(shè)為啟動(dòng)窗體,當(dāng)密碼輸入正確時(shí),才顯示查詢窗體。在Text1中輸入用戶名,在Text2中輸入密碼,若正確,則打開(kāi)Form1,否則提示密碼錯(cuò)誤。允許輸入3次。(1)設(shè)計(jì)界面在例8-8的基礎(chǔ)上,添加一個(gè)窗體Form2,設(shè)計(jì)登錄界面如圖8-31所示。圖8-31登錄窗體101添加窗體的方法:執(zhí)行菜單:[工程]\[添加窗體]命令,在[新建]選項(xiàng)卡中,選中“窗體”并單擊[打開(kāi)]按鈕,即可在本工程中添加Form2。設(shè)啟動(dòng)窗體的方法:執(zhí)行菜單[工程]\[工程屬性],在打開(kāi)的對(duì)話框中,將啟動(dòng)對(duì)象設(shè)為Form2。(2)設(shè)計(jì)密碼表在“成績(jī)管理”數(shù)據(jù)庫(kù)中添加一個(gè)密碼表,表結(jié)構(gòu)如表8-9,在表中存放一組用戶名和密碼如表8-10。字段名數(shù)據(jù)類型長(zhǎng)度用戶名char10密碼char6用戶名密碼lzw111111表8-9密碼表的表結(jié)構(gòu)表8-10密碼表102(3)設(shè)置各控件的屬性Adodc1連接到密碼表,方法同前;注意在[記錄源]選項(xiàng)卡中,選則命令類型:1-adCmdText,在[命令文本(SQL)]中輸入SQL語(yǔ)句:select*from密碼表Vsible:False(運(yùn)行時(shí)不可見(jiàn))。文本框Text1的屬性:Text:清空。文本框Text2的屬性:Text:清空,PasswordChar:*注意:Text1和Text2不要綁定到Adodc1上,以免剛啟動(dòng)登錄窗體時(shí),就顯示密碼表的內(nèi)容。[登錄](méi)按鈕的屬性:名稱:CmdLand,Caption:登錄[取消]按鈕的屬性:名稱:CmdCancel,Caption:取消103(4)編寫(xiě)程序[登錄](méi)按鈕單擊事件的代碼如下:DimmiCountAsInteger‘用于記錄輸入密碼次數(shù)PrivateSubCmdLand_Click()DimsqlstrAsStringsqlstr="Select*From密碼表Where用戶名='"&Text1&"'"Adodc1.RecordSource=

溫馨提示

  • 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ù)網(wǎng)僅提供信息存儲(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)論