版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第六章 vb數(shù)據(jù)庫訪問技術(shù) n教學(xué)目的:教學(xué)目的:n掌握vb數(shù)據(jù)庫訪問技術(shù)。n理解vb語言、sql語句。將將sql語句語句“嵌入嵌入”到到vb語言中,采用語言中,采用ado數(shù)據(jù)模型開發(fā)數(shù)據(jù)模型開發(fā)數(shù)據(jù)庫應(yīng)用程序。數(shù)據(jù)庫應(yīng)用程序。n教學(xué)內(nèi)容:教學(xué)內(nèi)容: nvb數(shù)據(jù)庫訪問技術(shù)概論 nado數(shù)據(jù)對(duì)象( activex data objects )n上機(jī)及作業(yè)vb數(shù)據(jù)庫訪問技術(shù)的概論nvbvb數(shù)據(jù)對(duì)象及數(shù)據(jù)庫訪問機(jī)制數(shù)據(jù)對(duì)象及數(shù)據(jù)庫訪問機(jī)制數(shù)據(jù)引擎數(shù)據(jù)引擎nvb中數(shù)據(jù)庫類型中數(shù)據(jù)庫類型n在在vb中常用的數(shù)據(jù)庫引擎中常用的數(shù)據(jù)庫引擎n數(shù)據(jù)庫訪問方式數(shù)據(jù)庫訪問方式數(shù)據(jù)對(duì)象數(shù)據(jù)對(duì)象n補(bǔ)充內(nèi)容:補(bǔ)充內(nèi)容:n數(shù)
2、據(jù)庫基本概念數(shù)據(jù)庫基本概念n創(chuàng)建數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)庫數(shù)據(jù)管理器數(shù)據(jù)管理器n利用利用“數(shù)據(jù)窗體向?qū)?shù)據(jù)窗體向?qū)А笨焖俳?shù)據(jù)訪問界面快速建立數(shù)據(jù)訪問界面訪問內(nèi)容:訪問內(nèi)容:對(duì)數(shù)據(jù)庫進(jìn)行對(duì)數(shù)據(jù)庫進(jìn)行“增刪改查增刪改查”操作操作vb數(shù)據(jù)對(duì)象及數(shù)據(jù)庫訪問機(jī)制數(shù)據(jù)引擎:n數(shù)據(jù)庫應(yīng)用程序?qū)儆谝环N非常典型的前后臺(tái)軟件結(jié)構(gòu)n前臺(tái)就是我們用開的vb程序n后臺(tái)則是數(shù)據(jù)庫管理系統(tǒng)(如sql server)或數(shù)據(jù)文件(如access數(shù)據(jù)文件)n而前后臺(tái)之間進(jìn)行通信的主要機(jī)制稱為數(shù)據(jù)庫引擎 數(shù)據(jù)庫應(yīng)用程序數(shù)據(jù)庫引擎(1)本地?cái)?shù)據(jù)庫:主要指microsoft access數(shù)據(jù)庫。(2 )外部數(shù)據(jù)庫:是指采用isam(inde
3、xed sequential access method,索引順序訪問方法)的數(shù)據(jù)庫,比發(fā)dbase、foxpro、paradox和execle等。(3)遠(yuǎn)程數(shù)據(jù)庫:指sql server、oracle、db2等大型數(shù)據(jù)庫,當(dāng)前的大型數(shù)據(jù)庫應(yīng)用程序基本上都是以這類數(shù)據(jù)庫為后臺(tái)。 在在vb中常用的數(shù)據(jù)庫引擎有三種中常用的數(shù)據(jù)庫引擎有三種 n1jet引擎:n聯(lián)合數(shù)據(jù)庫引擎,是microsoft公司開的用于本地?cái)?shù)據(jù)庫(比如access)、外部數(shù)據(jù)庫(比如dbase、excel、paradox)的數(shù)據(jù)庫引擎。n它也可以訪問遠(yuǎn)程數(shù)據(jù)庫(比如sql server、oracle),但必須通過odbc來轉(zhuǎn)接。
4、 2odbc:n開放式數(shù)據(jù)庫連接,是一種建立數(shù)據(jù)庫驅(qū)動(dòng)程序的標(biāo)準(zhǔn),當(dāng)前幾乎所有的dbms都支持這種數(shù)據(jù)庫引擎。nodbc是在數(shù)據(jù)庫和應(yīng)用程序之間提供的一個(gè)抽象層,即通過驅(qū)動(dòng)程序和游標(biāo)庫來和數(shù)據(jù)庫進(jìn)行通信。這樣,通過odbc就可以使用本地化的協(xié)議來訪問所有支持odbc的數(shù)據(jù)庫了。 3ole db:nmicrosoft公司于1996年提出了一種新的數(shù)據(jù)庫訪問策略u(píng)da(universal data access),它的核心是一系列組件對(duì)象模型(com)接口,被命名為ole db。n這些接口允許開發(fā)人員創(chuàng)建數(shù)據(jù)庫提供者(data providers)。數(shù)據(jù)提供者能夠很靈活地表達(dá)各種格式存儲(chǔ)的數(shù)據(jù),通
5、用性比odbc更好、更靈活。 數(shù)據(jù)庫訪問方式數(shù)據(jù)對(duì)象 (1)dao對(duì)象(data access objects,數(shù)據(jù)訪問對(duì)象) :可以使用jet引擎和odbc兩種方式訪問數(shù)據(jù)庫。(2) rdo對(duì)象(remote data objects,遠(yuǎn)程數(shù)據(jù)對(duì)象):一般采用odbc來訪問數(shù)據(jù)庫。(3) ado對(duì)象(activex data objects, activex數(shù)據(jù)對(duì)象):主要采用ole db訪問數(shù)據(jù)庫,也支持odbc訪問,但需要經(jīng)過ole db轉(zhuǎn)接。ado對(duì)象模型 nado是microsoft公司提出的第三種數(shù)據(jù)庫訪問對(duì)象,是microsoft數(shù)據(jù)庫訪問技術(shù)的一個(gè)主要發(fā)展方向,它把ole db
6、封裝在一個(gè)數(shù)據(jù)對(duì)象中,使得vb程序可以方便地實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的訪問。 nado與其他兩種對(duì)象模型的主要區(qū)別在于它的簡單和非層次結(jié)構(gòu)。這種對(duì)象模型共包含7個(gè)對(duì)象,即connection、command、recordset、parameter、property、field和error。n其中最常用的是connection、command、recordset和field四個(gè)對(duì)象。 圖5-2ado對(duì)象模型connectionerrorsrecordsetfieldscommanderrorfield數(shù)據(jù)庫原理示意數(shù)據(jù)庫表字段數(shù)據(jù)庫基本概念數(shù)據(jù)庫基本概念1n數(shù)據(jù)庫(database)、關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(
7、r-dbms)n表結(jié)構(gòu)n一個(gè)數(shù)據(jù)庫文件可以包含一個(gè)或多個(gè)表n每個(gè)表均有一個(gè)表名n各表之間可以存在某種關(guān)系n比如:學(xué)生.mdb 個(gè)人信息(學(xué)號(hào),姓名,班級(jí),年齡,-) 成績(學(xué)號(hào),科目代號(hào),成績) 科目(科目代號(hào),科目名稱)n記錄和字段n列-字段(field)n行-記錄(record)db表1表n字段字段1字段字段2字段字段m記錄記錄1記錄記錄n數(shù)據(jù)庫基本概念數(shù)據(jù)庫基本概念2n關(guān)鍵字(key)n能夠唯一識(shí)另一條記錄的最小屬性集n具有唯一值,不能為空n侯選關(guān)鍵字、主關(guān)鍵字、外關(guān)鍵字n表與表之間的關(guān)聯(lián)是通過關(guān)鍵字完成的n表間的關(guān)聯(lián)n表之間的關(guān)系是按照某一關(guān)鍵字建立的一個(gè)表中的記錄同另一個(gè)表中記錄之間
8、的關(guān)系n根據(jù)數(shù)量對(duì)應(yīng)關(guān)系,分為一對(duì)一、一對(duì)多、多對(duì)多n索引(index)n一個(gè)表可以按照某種特定的順序進(jìn)行保存或排列n主索引、唯一索引結(jié)構(gòu)化查詢語言(sql)nselect語句的基本形式如下:select from where group by having order by asc|desc數(shù)據(jù)管理器1 n數(shù)據(jù)庫的創(chuàng)建/打開 n表結(jié)構(gòu)的創(chuàng)建 圖5-5 可視化數(shù)據(jù)管理器圖5-6 “數(shù)據(jù)庫管理”界面數(shù)據(jù)管理器2n“表結(jié)構(gòu)”設(shè)置 n使用de環(huán)境訪問數(shù)據(jù)庫方式n使用data控件,綁定約束控件訪問數(shù)據(jù)庫方式n通過sql字符串,訪問數(shù)據(jù)庫ado對(duì)象(對(duì)象( activex data objects )使
9、用使用data控件訪問數(shù)據(jù)庫控件訪問數(shù)據(jù)庫1定義:用運(yùn)用data控件訪問db是一種編程很少,但卻能快速訪問db表的手段,為此vb提供了兩種工具: 其一為data控件,用于定義數(shù)據(jù)源; 其二為bound約束控件,用于定義數(shù)據(jù)源的輸 入輸出界面。n這種方式具有編程簡單,易學(xué)易用的優(yōu)點(diǎn),適合開發(fā)原型及小型數(shù)據(jù)庫系統(tǒng)的應(yīng)用。 如圖2data控件 3data控件的約束數(shù)據(jù)(bound控件) 作業(yè)作業(yè)db如圖 人號(hào):_ 人名:_ 年齡:_ 人員紀(jì)錄 data控件1)名字:data (n)2)功能:(定義數(shù)據(jù)源)n通過data控件無須編程,直接訪問由其屬性定義的數(shù)據(jù)源;ndata控件有四個(gè)導(dǎo)航器,用于顯示域
10、上移動(dòng)被顯示的內(nèi)容,相當(dāng)于順序查找;n被顯示內(nèi)容可在屏幕上直接修改,當(dāng)導(dǎo)航器從當(dāng)前記錄移動(dòng)后,被修改既被接受。首記錄上條記錄尾記錄下條記錄說明信息3)后臺(tái)位置動(dòng)作: 把data控件關(guān)聯(lián)的數(shù)表全部調(diào)入內(nèi)存。如下圖所示: 約束控件 (recordset)內(nèi)存 data data控件 data1 db4)用ado方式建立db應(yīng)用程序的步驟n那么如何設(shè)置data控件屬性,及約束控件與data的某字段的關(guān)聯(lián)?建立form,把data控件放入form中設(shè)置data控件屬性,建立對(duì)數(shù)據(jù)庫的連接向form上添加約束控件,使其與data控件記錄集的某個(gè)字段關(guān)聯(lián)放入其他需要的控件,并編寫有關(guān)事件過程ado數(shù)據(jù)控件
11、使用方法及步驟:數(shù)據(jù)控件使用方法及步驟: (1)建立邏輯數(shù)據(jù)庫(odbc數(shù)據(jù)源)(2)“部件”中加入“ado data control6.0”(3)窗體上放置一個(gè) ado data 控件(adodcuser),建立與數(shù)據(jù)庫及表的連接。i. 在“屬性”窗口中,單擊“connectionstring”打開“connectionstring”對(duì)話框,設(shè)置odbc 數(shù)據(jù)源名。ii. 在“屬性”窗口中,將“recordsource”屬性設(shè)置為一個(gè)表名或sql語句。例如:select * from tbl_user;(4)建立ado data控件與用戶界面控件的綁定。ni. 在窗體上放置一個(gè)text控件n
12、ii. datasource屬性設(shè)為adodcuser, 將該文本框與ado data控件綁定niii. datafield屬性設(shè)置為該文本框要顯示字段的名稱,如name 。niv. dataformat屬性設(shè)置該文本框顯示數(shù)據(jù)的格式(類型)n添加其他數(shù)據(jù)綁定控件combo, grid等(方法同上)。下拉列表框中項(xiàng)目添加仍需用additem方法。注:de環(huán)境同樣可做此綁定設(shè)置。示例示例5.15.1數(shù)據(jù)數(shù)據(jù)綁定窗體綁定窗體5)data控件的子對(duì)象 data對(duì)象 庫的表、視圖、查詢 record set 記錄集 field 表項(xiàng)、字段6)data控件的及其子對(duì)象的屬性控件的及其子對(duì)象的屬性ncon
13、ect:database name: recordsource :nrecordset: recordtype:eof/bof nrecordcount:bookmark:fields: 7) 方法(方法(data的子對(duì)象的子對(duì)象recordset對(duì)象的方法對(duì)象的方法 、data控件的方法控件的方法 )調(diào)用: .nconect:定義關(guān)聯(lián)的dbms的名字,其缺省值為access。ndatabase name:定義所關(guān)聯(lián)用戶數(shù)據(jù)庫名字,包括所有的路徑名。如人事庫、學(xué)生庫等。nrecordsource :定義關(guān)聯(lián)的表名字、視圖的名字或查詢表名字,也可直接寫select語句,從表中抽出數(shù)據(jù)集合。nre
14、cordset:記錄對(duì)象,也可看為屬性,通過屬性可直接訪問由data控件調(diào)入內(nèi)存的所有數(shù)據(jù)。n命令格式為:.。n因此recordset是一種瀏覽數(shù)據(jù)庫的工具,也視為內(nèi)存中對(duì)表的查尋結(jié)果。data控件的屬:nrecordtype:確定記錄集類型,描述數(shù)據(jù)集合的特征。nrecordtype =0-tables,定義數(shù)據(jù)源可以修改,支持索引。 1-dynasets,數(shù)據(jù)源可以修改,用于表的查尋。 2-snapshots,數(shù)據(jù)只讀屬性,使用成本低。neof=ture- recordset記錄集中當(dāng)前記錄在文件尾; false- recordset記錄集中當(dāng)前記錄不在文件尾nbof=ture- reco
15、rdset記錄集中當(dāng)前記錄在文件頭; false- recordset記錄集中當(dāng)前記錄不在文件頭。n注意:如圖所示:頭、尾記錄為空白記錄,限制導(dǎo)航器的 移動(dòng)。n調(diào)用格式:data1.recordset.eof/bof data控件的子對(duì)象屬:nrecordcount:recordset記錄集中的記錄個(gè)數(shù)。nbookmark:系統(tǒng)給予recordset 每一行的唯一標(biāo)簽。其標(biāo)志與記錄集的順序無關(guān)。 n屬性調(diào)用格式:n. nfields (n) :表示調(diào)用recordset的某個(gè)字段 n屬性調(diào)用格式:n .fields(n)recordset.fields(n) data控件的子對(duì)象屬:data的
16、子對(duì)象的子對(duì)象recordset對(duì)象的方法對(duì)象的方法:n無條件順序移動(dòng)move方法 n有條件的查找find方法 n數(shù)據(jù)庫記錄的編輯方法 n索引查找 無條件順序移動(dòng)move方法n格式: n功能:按記錄的物理順序進(jìn)行順序移動(dòng)其中nmovefirst將記錄定位到第一條記錄;nmovelast將記錄移到最后一條記錄;nmoveprevious將記錄移到當(dāng)前記錄的前一條記錄; nmovenext將記錄移到當(dāng)前記錄的下一條記錄。n調(diào)用: .recordset. 有條件的查找find方法n格式: 其中條件為邏輯表達(dá)式。n功能:findfirst在recordset中將記錄定位到滿足條件的第一個(gè)記錄;find
17、last在recordset中將記錄定位到滿足條件的最后一個(gè)記錄;findprevious在recordset中將定位到滿足條件的記錄的前一個(gè)記錄findnext在recordset中將定位到滿足條件的記錄的后一個(gè)記錄;n調(diào)用:.recordset.find. n如果找不到,需要做容錯(cuò)處理,使用nomatch方法表示find查找失敗。 數(shù)據(jù)庫記錄的編輯方法naddnew:增加一個(gè)空白記錄到文件尾部;ndelete:刪除recordset中當(dāng)前記錄;nedit:使當(dāng)前記錄處于可以修改的狀態(tài);nupdate:將當(dāng)前記錄寫入數(shù)據(jù)庫中;nrefresh:同上。n使用格式:. 索引查找n格式:seek
18、“運(yùn)算符”,變量值。n如seek “=”,“004”。n使用條件:在使用seek前相應(yīng)的索引文件必須打開。n打開索引文件的格式為:n.recordset.index=”索引文件的關(guān)鍵字段名”n例如, .recordset.index=”primarykey” .recordset.index=”職稱”nseek文件建立的策略:在經(jīng)常性查找和使用的時(shí)候需要建立seek文件,因?yàn)橄到y(tǒng)的開銷大。而只找一條記錄時(shí)使用find。 data控件的方法控件的方法nrefresh方法:n功能:刷新多用戶環(huán)境下內(nèi)存recordset中的內(nèi)容,重新抽取一次內(nèi)容。nupdaterecord方法:n功能:把data控
19、件內(nèi)容保存到數(shù)據(jù)庫中。經(jīng)常用于save按鈕的使用。n不能觸發(fā)error事件,但update能觸發(fā)error事件。n能觸發(fā)validata事件。nupdatecontrols方法:n清除對(duì)當(dāng)前記錄的當(dāng)前修改。 data控件的約束數(shù)據(jù)(bound控件)n定義:用于把data控件記錄集中當(dāng)前記錄顯示/編輯的區(qū)域,即輸入/輸出區(qū)域。n常用約束控件:nlabel,text,checkbox,optionbutton,listbox,combobox,msflexgrid等控件可以作為約束控件。n屬性(反應(yīng)約束控件與data的某字段的關(guān)聯(lián)):ndatasource:反映約束控件對(duì)應(yīng)的實(shí)際數(shù)據(jù)源。 如表、視
20、圖等。ndatafield:表示所綁定的數(shù)據(jù)源recordset的某個(gè)字段。n注意幾點(diǎn)注意幾點(diǎn): 注意幾點(diǎn)注意幾點(diǎn): n利用msflexgrid為約束控件只需定義datasource屬性既可以。n利用listbox、combobox作約束控件,其datasource、datafield屬性都不用定義,必須寫一段程序完成數(shù)據(jù)的裝入,程序如下: data1.refresh data1.recordset.movelast data1.recordset.movefirst for i=1 to data1.recordset.recordcount list1.additem data1.reco
21、rdset.field(“名”) data1.recordset.movenext next 約束控件的使用方法及其步驟 :n創(chuàng)建窗體form并放入約束控件及data控件;n修改約束控件的某些屬性,特別是定義datasource和datafield屬性,來創(chuàng)建約束對(duì)象與recordset的字段關(guān)聯(lián);ndata1. connect/databasename/recordsouce/recordsettype n約束控件.datasource=data1 ,約束控件.datafield=au_id n放入其他控件并編寫事件過程。 data控件觸發(fā)事件error、validate: n 功能:該事件
22、的處理過程中常用于數(shù)據(jù)有效性和完整性控制。n觸發(fā)時(shí)機(jī):n使用data控件導(dǎo)航器移動(dòng)記錄值n使用move 方法使另一條記錄成為當(dāng)前記錄之前n使用update更新數(shù)據(jù)時(shí),當(dāng)把物理數(shù)據(jù)庫真正更改之前被觸發(fā)n使用delete,close,unload(關(guān)閉窗口) 操作之前被觸發(fā)n按updaterecord事件不觸發(fā)validate,將觸發(fā)dberro事件n該方法用于保存記錄的按鈕的事件程序中 例子例:檢查某文本框text,(其值將修改某個(gè)表)的值發(fā)生變化后詢問用戶是否要保留修改。 private sub data1-validate(action as integer, save as boolean
23、) dim ans as integcr if text1data changed then ans=msgmox(“文本內(nèi)容已修改,是否保留?” vbyesno) if ans=vbyes then save = true (保留修改) else text1datachanged=f(不保留修改) endif endifend sub 例題1 建立data控件與bible下authors表關(guān)聯(lián),做三個(gè)約束控件與authors三個(gè)變量關(guān)聯(lián),運(yùn)行并利用data控件導(dǎo)航器瀏覽內(nèi)容補(bǔ)充資料:vb帶的兩個(gè)數(shù)據(jù)庫:1bible (title, author, title author, publishe
24、r, all titles) author (au_id, authour, year born) publisher (pub_id, name, company, address, city, state, zip, telephone, fax, commend) title (title, year publish, isbn, pubid, descriptic, notes, subject, comments) title author (isbn, au_id) all titles (title, isbn, author, year pub, company)2nwind數(shù)
25、據(jù)庫結(jié)構(gòu)請(qǐng)同學(xué)自己整理出來。 建立如圖所示的界面,其中:有3個(gè)label控件,3個(gè)text控件,1個(gè)data控件。 data1控件屬性設(shè)置如下: data1.connect=access data1.databasename= ”c:vb98bible.mdb” data1.recordsouce=authors data1.recordsettype=tablelabel控件屬性設(shè)置如下: label1.caption=au_id; label2.caption=author;label3.caption=year born。text控件屬性設(shè)置如下: text1.datasource=da
26、ta1, text1.datafield=au_id; text2.datasource=data1, text2.datafield=author; text3.datasource=data1,text3.datafield=year born。 設(shè)置完成上述控件屬性后,運(yùn)行。 利用data控件的導(dǎo)航器觀察數(shù)據(jù)庫記錄的內(nèi)容。 上機(jī)練習(xí)內(nèi)容: 1利用move方法。要求程序運(yùn)行時(shí)將data控件隱藏,對(duì)c2及c3做容錯(cuò)處理。利用導(dǎo)航器實(shí)現(xiàn)對(duì)”year born”的賦值。(year born=1000+ 2利用導(dǎo)航器及關(guān)鍵字段實(shí)現(xiàn)對(duì)authors 的增、刪、改操作。 3find 及seek的使用。
27、在authors中查找某一個(gè)指定的記錄值,其關(guān)鍵字為au_id。要求:按find時(shí),支持seek的控件隱藏;按seek時(shí),支持find的控件隱藏。找不到記錄時(shí)使用nomatch做容錯(cuò)處理。使用inputbox動(dòng)態(tài)輸入指定的查找值au_id。 用adode 環(huán)境訪問數(shù)據(jù)庫n數(shù)據(jù)環(huán)境設(shè)計(jì)器為創(chuàng)建編程的運(yùn)行時(shí)數(shù)據(jù)環(huán)境設(shè)計(jì)器為創(chuàng)建編程的運(yùn)行時(shí)數(shù)據(jù)訪問提供了一個(gè)交互的、設(shè)計(jì)時(shí)數(shù)據(jù)訪問提供了一個(gè)交互的、設(shè)計(jì)時(shí)環(huán)境。環(huán)境。n提供在提供在vb應(yīng)用程序中訪問數(shù)據(jù)庫的接應(yīng)用程序中訪問數(shù)據(jù)庫的接口??凇鏈接數(shù)據(jù)庫的操作步驟鏈接數(shù)據(jù)庫的操作步驟n訪問數(shù)據(jù)庫訪問數(shù)據(jù)庫(recordset)屬性和方法屬性和方法總結(jié)總結(jié)
28、用adode 環(huán)境訪問數(shù)據(jù)庫1n要引用數(shù)據(jù)環(huán)境設(shè)計(jì)器,請(qǐng)按照以下步驟執(zhí)行: n“工程”-“引用.”-“data environment 1.0”n創(chuàng)建一個(gè) connection 對(duì)象,建立一個(gè)和遠(yuǎn)程數(shù)據(jù)庫的連接(該數(shù)據(jù)庫為邏輯數(shù)據(jù)庫)。ncommand 對(duì)象定義了從一個(gè)數(shù)據(jù)庫連接中獲取何種數(shù)據(jù)的詳細(xì)信息。ncommand 對(duì)象既可以基于一個(gè)數(shù)據(jù)庫對(duì)象(例如:一個(gè)表、視圖、存儲(chǔ)過程或同義詞),也可以基于一個(gè)結(jié)構(gòu)化查詢語言(sql)查詢。ncommand對(duì)象建立的同時(shí),建立一個(gè)recordset對(duì)象,實(shí)現(xiàn)對(duì)記錄的進(jìn)行訪問。n例如,當(dāng)數(shù)據(jù)環(huán)境設(shè)計(jì)器創(chuàng)建cmduser命令時(shí),它同時(shí)創(chuàng)建一個(gè)稱為rscm
29、duser的recordset對(duì)象??偨Y(jié)操作步驟總結(jié)操作步驟詳細(xì)操作步驟詳細(xì)操作步驟nvb中對(duì)數(shù)據(jù)庫訪問的實(shí)現(xiàn)步驟:n(1)建立物理數(shù)據(jù)庫。n方法:i.“外接程序”-“可視化數(shù)據(jù)管理器” ii. 外部數(shù)據(jù)庫管理系統(tǒng),如:accessn(2)為物理數(shù)據(jù)庫建立邏輯數(shù)據(jù)庫。n方法:利用windows工具建立odbc數(shù)據(jù)源n(3)設(shè)置ado中間件,以實(shí)現(xiàn)和邏輯db的連接。n方法:添加一個(gè)數(shù)據(jù)環(huán)境設(shè)計(jì)器對(duì)象:n“工程”-“引用.”-“data environment 1.0”n“工程”-“添加 data environment”。 n(4)建立與邏輯數(shù)據(jù)庫的連接。n方法:i. 添加 connection
30、 對(duì)象 ii. “數(shù)據(jù)鏈接屬性”對(duì)話框中,在“提供方”和“連接”選項(xiàng)卡中指定連接數(shù)據(jù)庫信息。n(5)建立與數(shù)據(jù)庫中某個(gè)表的連接。n方法:i. 在connection對(duì)象下添加command對(duì)象 ii. 設(shè)置command屬性:n database object下拉列表中選擇數(shù)據(jù)庫對(duì)象的類型,可以是一個(gè)存儲(chǔ)過程、同義詞、表或視圖。n object下拉列表中選擇一個(gè)對(duì)象的名字。(6)vb應(yīng)用程序代碼中引用該數(shù)據(jù)環(huán)境。n方法:用dim語句創(chuàng)建數(shù)據(jù)環(huán)境實(shí)例變量后,才能引用。n格式:ndim myde as new dework(7)對(duì)數(shù)據(jù)表記錄進(jìn)行讀、寫等操作。方法:方法:在代碼中將command對(duì)象
31、作為數(shù)據(jù)環(huán)境的一種方法來引用,并將其recordset作為數(shù)據(jù)環(huán)境的一種屬性來引用。通過(6)所建的實(shí)例變量引用。例如,例如,如果在名為dework的數(shù)據(jù)環(huán)境中創(chuàng)建了cmduser命令,就可以在代碼中用myde.rscmduser引用command對(duì)象中的記錄集。與ado recordset關(guān)聯(lián)的方法都可以應(yīng)用于myde.rscmduser。例如,例如,用于添加、更新、刪除和遍歷記錄的方法。例: myde.rscmduser.fields(1).value = “cxd” 總結(jié)訪問數(shù)據(jù)庫的步驟:(1)建立物理數(shù)據(jù)庫(2)為物理數(shù)據(jù)庫建立邏輯數(shù)據(jù)庫odbc(3)設(shè)置ado中間件以實(shí)現(xiàn)和邏輯db的
32、連接。de環(huán)境如: dework(4)建立與邏輯數(shù)據(jù)庫的連接connection(5)建立與數(shù)據(jù)庫中某個(gè)表的連接command(6)vb應(yīng)用程序代碼中引用該數(shù)據(jù)環(huán)境dim myde as new dework(7)對(duì)數(shù)據(jù)表記錄進(jìn)行讀、寫等操作myde.rscmduser.fields(1).value = “cxd”command連接連接的表對(duì)象明的表對(duì)象明對(duì)數(shù)據(jù)庫的記錄的顯示操作 n一般可通過下面幾種方法顯示記錄集中的數(shù)據(jù): n1)在textbox控件中顯示ntext1.text = myde.rscmduser.fields(學(xué)號(hào)學(xué)號(hào))n2)讀取到變量中ndim strno as stri
33、ngnstrno = myde.rscmduser.fields(學(xué)號(hào)學(xué)號(hào))ntext1.text = strnon3)在grid控件中以二維表的形式顯示n一般可以采用msflexgird控件進(jìn)行顯示,這個(gè)控件的用法比較簡單,請(qǐng)同學(xué)們參照教材中的演示代碼。n注意:注意:n顯示前需要清空原控件中的顯示內(nèi)容n需要先打開數(shù)據(jù)庫,做完后還需要關(guān)閉數(shù)據(jù)庫n下次實(shí)驗(yàn)課練習(xí)n根據(jù)綜合作業(yè)的需要,自己建立一“學(xué)生信息”數(shù)據(jù)庫,其中至少包括四個(gè)表“學(xué)生基本信息”,“學(xué)生選課”,“民族”和“學(xué)院信息”;n在作業(yè)中,建立一數(shù)據(jù)環(huán)境、連接及命令,實(shí)現(xiàn)與表“學(xué)生基本信息”、“民族”的連接。n要求要反復(fù)練習(xí),明確掌握數(shù)據(jù)
34、環(huán)境、連接、命令及recordset的概念及其對(duì)應(yīng)于物理數(shù)據(jù)庫、表中的對(duì)象,在vb應(yīng)用系統(tǒng)中如何使用??偨Y(jié)步驟:(1)建庫建庫:建立物理數(shù)據(jù)庫及其邏輯數(shù)據(jù)庫odbc(2)環(huán)境環(huán)境:設(shè)置ado中間件以實(shí)現(xiàn)和邏輯db的連接。de環(huán)境如: stmisde(3)連接連接:connection建立與邏輯數(shù)據(jù)庫的連接;command建立與數(shù)據(jù)庫中某個(gè)表的連接。(4)引用引用:vb應(yīng)用程序代碼中引用該數(shù)據(jù)環(huán)境dim misde as new stmisde(5)讀寫讀寫:對(duì)數(shù)據(jù)表記錄進(jìn)行讀、寫等操作 關(guān)于(5)對(duì)數(shù)據(jù)庫的讀寫:n打開表: dim strsql as string strsql = selec
35、t distinct s_department from tbl_dep misde.rscmdquery.open strsql n可做:清空、賦值、顯示、上/下一個(gè)等操作控件對(duì)象名控件對(duì)象名. clear 初始化時(shí)首先將顯示區(qū)清空n關(guān)閉:misde.rscmdquery.close初始化時(shí)需要剔除重復(fù)項(xiàng)初始化時(shí)需要剔除重復(fù)項(xiàng) 屬性與方法n屬性屬性:nbof、eofnfields、recordcount、 absolutepositionn方法:方法:naddnew、delete、update、move n、 movefirst、movenext、 moveprevious、 movelas
36、tnopen、 close、 find 增刪改操作修改n打開: strsql = select * from tbl_student misde.rscmdquery.open strsql ;n查找“學(xué)號(hào)”為某值的記錄修改 strmes = s_stno= & txtstid.text & misde.rscmdquery.find strmesn賦值:misde.rscmdquery.fields(“s_stno”) = txtstid.text 等等n保存并關(guān)閉 misde.rscmdquery.update misde.rscmdquery.closes_stno=09
37、243001新增: if misde.rscmdquery.eof then 未找到,指針到底了 misde.rscmdquery.addnew endif刪除: if not misde.rscmdquery.eof then misde.rscmdquery.delete endif新增刪除記錄游標(biāo)(recordset)1n屬性:nbof, eof:文件頭、文件尾標(biāo)志;n應(yīng)用:檢測(cè)記錄是否讀取完畢、是否查找到指定記錄;表中或查詢中是否有記錄 n例:if myde.rscmduser.eof then exit donfields:字段集;n應(yīng)用:讀取及設(shè)置記錄各字段值n例:賦值:myde.
38、rscmduser.fields(“name”) = txtname.text顯示:txtname.text = myde.rscmduser.fields(“name”) 記錄游標(biāo)(recordset)n屬性:nrecordcount:記錄數(shù)。n應(yīng)用:統(tǒng)計(jì)表、查詢中的記錄數(shù)n例:for ii = 1 to myde.rscmduser.recordcountnabsoluteposition:當(dāng)前記錄指針的絕對(duì)位置n應(yīng)用:與recordcount一起顯示記錄的總數(shù)及當(dāng)前記錄號(hào)n例:lblnum.caption = 第 & myde.rsinsuser.absoluteposition
39、 & ”條記錄/總” _ & myde.rsinsuser.recoudcount & ”條記錄”第條記錄/總recoudcount條記錄記錄游標(biāo)(recordset)n方法:naddnew:增加一條空白記錄;ndelete:刪除當(dāng)前記錄;nupdate:將內(nèi)存中的記錄修改,寫入數(shù)據(jù)表保存;nmove n, movefirst, movenext, moveprevious, movelast:移動(dòng)指針n例如:myde.rscmduser. update記錄游標(biāo)(recordset)n方法:nopen, close:打開、關(guān)閉一個(gè)記錄游標(biāo)n格式:myde.rscmdus
40、er.open source,activeconnection,currsortype,locktypen格式:myde.rscmduser.closenfind :查找滿足條件的記錄;n例: myde.rscmduser.find “name = cxd and age = 20 ”通過sql字符串,訪問數(shù)據(jù)庫(1)connection對(duì)象的使用方法(2)recordset和field對(duì)象使用方法(3)將記錄在窗體上顯示(4)報(bào)表輸出(自學(xué))(5)小結(jié)(6)練習(xí)題( 1)connection對(duì)象的使用方法n在vb應(yīng)用程序中主要用這個(gè)對(duì)象建立與數(shù)據(jù)庫的連接,一般的方法是:n1)聲明并創(chuàng)建對(duì)象)
41、聲明并創(chuàng)建對(duì)象ndim adocn as connection 聲明對(duì)象nset adocn = new connection 創(chuàng)建新對(duì)象n或?qū)⑸鲜鰞蓷l語句直接寫成ndim adocn as new connectionn2)建立數(shù)據(jù)庫連接)建立數(shù)據(jù)庫連接n一般通過下列語句完成與數(shù)據(jù)庫(源)的連接:nadocn.open 連接字符串連接字符串自動(dòng)生成“連接字符串”的方法n首先選擇“工程添加data environment”菜單項(xiàng) 鏈接sql數(shù)據(jù)庫n在connection1之上點(diǎn)擊鼠標(biāo)右鍵,并選擇“屬性”菜單項(xiàng) 鏈接access數(shù)據(jù)庫鏈接access數(shù)據(jù)庫鏈接鏈接sql數(shù)據(jù)庫數(shù)據(jù)庫鏈接鏈接sql
42、數(shù)據(jù)庫數(shù)據(jù)庫鏈接鏈接access數(shù)據(jù)庫數(shù)據(jù)庫sql鏈接字符串sql鏈接字符串3)對(duì)數(shù)據(jù)表進(jìn)行更新操作)對(duì)數(shù)據(jù)表進(jìn)行更新操作 n我們還可以利用connection對(duì)象對(duì)數(shù)據(jù)庫中的基本表進(jìn)行增加、刪除、修改等不返回結(jié)果集的操作,語法如下:nadocn.execute sql語句字符串語句字符串總結(jié)總結(jié)總結(jié)connection對(duì)象的使用方法:0)準(zhǔn)備)準(zhǔn)備ado環(huán)境:引用環(huán)境:引用microsoft activex data objects 2.7 library1)聲明并創(chuàng)建對(duì)象)聲明并創(chuàng)建對(duì)象dim adocn as new connection2)建立數(shù)據(jù)庫連接)建立數(shù)據(jù)庫連接adocn.op
43、en 連接字符串連接字符串3)對(duì)數(shù)據(jù)表進(jìn)行更新操作)對(duì)數(shù)據(jù)表進(jìn)行更新操作adocn.execute sql語句字符串語句字符串舉例舉例3 3)對(duì)數(shù)據(jù)表進(jìn)行更新操作)對(duì)數(shù)據(jù)表進(jìn)行更新操作執(zhí)行執(zhí)行n聲明一個(gè)字符串變量ndim strsql as stringn拼寫insert、delete、update結(jié)構(gòu)化查詢語句nstrsql = delete from 學(xué)生成績表 nstrsql = strsql+ “where學(xué)號(hào)= ” + “ ” + combo1.text + “ n執(zhí)行sql語句nadocn.execute strsqln這里使用兩個(gè)“”表示一個(gè)單引號(hào)字符,比如拼寫后的strsql應(yīng)
44、該具有以下內(nèi)容:ndelete from 學(xué)生成績表 where 學(xué)號(hào)=001執(zhí)行一個(gè)字符串。實(shí)現(xiàn)一個(gè)執(zhí)行一個(gè)字符串。實(shí)現(xiàn)一個(gè)增刪改動(dòng)作,不能作如:賦增刪改動(dòng)作,不能作如:賦值、顯示等的表操作。值、顯示等的表操作。字符串變量優(yōu)點(diǎn)在與便于字符串變量優(yōu)點(diǎn)在與便于調(diào)試。調(diào)試。(2)recordset和field對(duì)象使用方法 n第一步:聲明一個(gè)新的recordset對(duì)象ndim adors as new recordsetn第二步:與ado鏈接對(duì)象建立關(guān)聯(lián)nadors.activeconnection = adocnn第三步:執(zhí)行select操作nadors.open select * from 學(xué)生
45、成績表n第四步:進(jìn)行數(shù)據(jù)庫的各種訪問。n第五步:關(guān)閉記錄集對(duì)象nadors.close 3 3)對(duì)數(shù)據(jù)表進(jìn)行更新操作)對(duì)數(shù)據(jù)表進(jìn)行更新操作增刪改增刪改n當(dāng)使用open方法打開一個(gè)記錄集后,我們就可以訪問其中的數(shù)據(jù)了,一般的方法是:nadors.fields(“學(xué)號(hào)”) n或者adors(學(xué)號(hào)) (3)將記錄在窗體上顯示 n一般可通過下面幾種方法顯示記錄集中的數(shù)據(jù): n1)在textbox控件中顯示ntext1.text = adors.fields(學(xué)號(hào))n2)讀取到變量中ndim strno as stringnstrno = adors.fields(學(xué)號(hào))ntext1.text = st
46、rnon3)在grid控件中以二維表的形式顯示n一般可以采用msflexgird控件進(jìn)行顯示,這個(gè)控件的用法比較簡單,請(qǐng)同學(xué)們參照教材中的演示代碼。n在使用這類控件顯示數(shù)據(jù)時(shí),一般的步驟是:n第一步:清空數(shù)據(jù)。n第二步:設(shè)置標(biāo)題欄。n第三步:打開記錄集。n第四步:使用循環(huán)將記錄集中的數(shù)據(jù)添加到grid中去。 例子例子物質(zhì)臺(tái)賬n在模塊兒中:npublic adocn as new connectionnsub main()n connet the databasen adocn.open provider=microsoft.jet.oledb.4.0;data source=c:文件vb實(shí)驗(yàn)數(shù)
47、據(jù)庫字符串訪問數(shù)據(jù)庫物資庫.mdb;persist security info=falsen show the main formn form1.shownend subsource= + app.path + 物資庫.mdbsource=c:文件vb實(shí)驗(yàn)數(shù)據(jù)庫字符串訪問數(shù)據(jù)庫物資庫.mdb;persist security info=falsesource= + app.path + 物資庫.mdb;persist security info=false引用ado環(huán)境microsoft activex data objects 2.7 library在窗體中添加記錄,單擊添加按鈕privat
48、e sub command1_click() dim strsql as string dim adors as new recordset adors.activeconnection = adocnstrsql = select * from 物質(zhì)臺(tái)帳 where 編碼= + text1.text + adors.open strsql if adors.eof then如果指針到底了,說明沒有找到該記錄可以進(jìn)行添加 strsql = “insert into 物質(zhì)臺(tái)帳(編碼,名稱,單價(jià),備注) values( strsql = strsql + + text1.text + ,strsql = strsql + + text2.text + , strsql = strsql + + text3.text + , strsql = strsql + + text4.text + ) adocn.execute strsql else msgbox “此記錄已經(jīng)存在 end ifend subinsert into 物質(zhì)臺(tái)帳(編碼,名稱,單價(jià),備注) values(001,負(fù)載,12312,這是一人上奪)字符串連接練習(xí)n將下列sql語句連成字符串:ninsert into 物質(zhì)臺(tái)帳(編碼,名稱,單價(jià),備注) values(001,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單位管理制度呈現(xiàn)合集人事管理篇十篇
- 《證券交易流程》課件
- 《企業(yè)戰(zhàn)略管理》課件
- 新生引航共筑未來
- 學(xué)校三年級(jí)班主任工作總結(jié)5篇
- 2023年-2024年新員工入職安全教育培訓(xùn)試題附答案(突破訓(xùn)練)
- 大學(xué)畢業(yè)晚會(huì)策劃書合集15篇
- 2023年-2024年新入職員工安全教育培訓(xùn)試題附下載答案可打印
- 2024員工三級(jí)安全培訓(xùn)考試題(原創(chuàng)題)
- 保護(hù)環(huán)境的建議書(合集15篇)
- 英語-湖南省天一大聯(lián)考暨郴州市2025屆高考高三第二次教學(xué)質(zhì)量檢測(cè)(郴州二檢懷化統(tǒng)考)試題和答案
- 【MOOC期末】《形勢(shì)與政策》(北京科技大學(xué))期末慕課答案
- 營銷專業(yè)安全培訓(xùn)
- 2024年度五星級(jí)酒店廚師團(tuán)隊(duì)管理與服務(wù)合同3篇
- 廣東省廣州市花都區(qū)2024年七年級(jí)上學(xué)期期末數(shù)學(xué)試題【附答案】
- 期末測(cè)試模擬練習(xí) (含答案) 江蘇省蘇州市2024-2025學(xué)年統(tǒng)編版語文七年級(jí)上冊(cè)
- 上海市徐匯區(qū)2024-2025學(xué)年高一語文下學(xué)期期末試題含解析
- 安全風(fēng)險(xiǎn)隱患舉報(bào)獎(jiǎng)勵(lì)制度
- 江蘇省蘇州市2023-2024學(xué)年高三上學(xué)期期末考試 數(shù)學(xué) 含答案
- 線性代數(shù)知到智慧樹章節(jié)測(cè)試課后答案2024年秋貴州理工學(xué)院
- 建筑幕墻工程檢測(cè)知識(shí)考試題庫500題(含答案)
評(píng)論
0/150
提交評(píng)論