第六章VB數(shù)據(jù)庫訪問技術(shù)_第1頁
第六章VB數(shù)據(jù)庫訪問技術(shù)_第2頁
第六章VB數(shù)據(jù)庫訪問技術(shù)_第3頁
第六章VB數(shù)據(jù)庫訪問技術(shù)_第4頁
第六章VB數(shù)據(jù)庫訪問技術(shù)_第5頁
已閱讀5頁,還剩99頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(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ù)對象( activex data objects )n上機及作業(yè)vb數(shù)據(jù)庫訪問技術(shù)的概論nvbvb數(shù)據(jù)對象及數(shù)據(jù)庫訪問機制數(shù)據(jù)對象及數(shù)據(jù)庫訪問機制數(shù)據(jù)引擎數(shù)據(jù)引擎nvb中數(shù)據(jù)庫類型中數(shù)據(jù)庫類型n在在vb中常用的數(shù)據(jù)庫引擎中常用的數(shù)據(jù)庫引擎n數(shù)據(jù)庫訪問方式數(shù)據(jù)庫訪問方式數(shù)據(jù)對象數(shù)據(jù)對象n補充內(nèi)容:補充內(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)容:對數(shù)據(jù)庫進行對數(shù)據(jù)庫進行“增刪改查增刪改查”操作操作vb數(shù)據(jù)對象及數(shù)據(jù)庫訪問機制數(shù)據(jù)引擎:n數(shù)據(jù)庫應(yīng)用程序?qū)儆谝环N非常典型的前后臺軟件結(jié)構(gòu)n前臺就是我們用開的vb程序n后臺則是數(shù)據(jù)庫管理系統(tǒng)(如sql server)或數(shù)據(jù)文件(如access數(shù)據(jù)文件)n而前后臺之間進行通信的主要機制稱為數(shù)據(jù)庫引擎 數(shù)據(jù)庫應(yīng)用程序數(shù)據(jù)庫引擎(1)本地數(shù)據(jù)庫:主要指microsoft access數(shù)據(jù)庫。(2 )外部數(shù)據(jù)庫:是指采用isam(inde

3、xed sequential access method,索引順序訪問方法)的數(shù)據(jù)庫,比發(fā)dbase、foxpro、paradox和execle等。(3)遠程數(shù)據(jù)庫:指sql server、oracle、db2等大型數(shù)據(jù)庫,當(dāng)前的大型數(shù)據(jù)庫應(yīng)用程序基本上都是以這類數(shù)據(jù)庫為后臺。 在在vb中常用的數(shù)據(jù)庫引擎有三種中常用的數(shù)據(jù)庫引擎有三種 n1jet引擎:n聯(lián)合數(shù)據(jù)庫引擎,是microsoft公司開的用于本地數(shù)據(jù)庫(比如access)、外部數(shù)據(jù)庫(比如dbase、excel、paradox)的數(shù)據(jù)庫引擎。n它也可以訪問遠程數(shù)據(jù)庫(比如sql server、oracle),但必須通過odbc來轉(zhuǎn)接。

4、 2odbc:n開放式數(shù)據(jù)庫連接,是一種建立數(shù)據(jù)庫驅(qū)動程序的標(biāo)準(zhǔn),當(dāng)前幾乎所有的dbms都支持這種數(shù)據(jù)庫引擎。nodbc是在數(shù)據(jù)庫和應(yīng)用程序之間提供的一個抽象層,即通過驅(qū)動程序和游標(biāo)庫來和數(shù)據(jù)庫進行通信。這樣,通過odbc就可以使用本地化的協(xié)議來訪問所有支持odbc的數(shù)據(jù)庫了。 3ole db:nmicrosoft公司于1996年提出了一種新的數(shù)據(jù)庫訪問策略uda(universal data access),它的核心是一系列組件對象模型(com)接口,被命名為ole db。n這些接口允許開發(fā)人員創(chuàng)建數(shù)據(jù)庫提供者(data providers)。數(shù)據(jù)提供者能夠很靈活地表達各種格式存儲的數(shù)據(jù),通

5、用性比odbc更好、更靈活。 數(shù)據(jù)庫訪問方式數(shù)據(jù)對象 (1)dao對象(data access objects,數(shù)據(jù)訪問對象) :可以使用jet引擎和odbc兩種方式訪問數(shù)據(jù)庫。(2) rdo對象(remote data objects,遠程數(shù)據(jù)對象):一般采用odbc來訪問數(shù)據(jù)庫。(3) ado對象(activex data objects, activex數(shù)據(jù)對象):主要采用ole db訪問數(shù)據(jù)庫,也支持odbc訪問,但需要經(jīng)過ole db轉(zhuǎn)接。ado對象模型 nado是microsoft公司提出的第三種數(shù)據(jù)庫訪問對象,是microsoft數(shù)據(jù)庫訪問技術(shù)的一個主要發(fā)展方向,它把ole db

6、封裝在一個數(shù)據(jù)對象中,使得vb程序可以方便地實現(xiàn)對數(shù)據(jù)庫的訪問。 nado與其他兩種對象模型的主要區(qū)別在于它的簡單和非層次結(jié)構(gòu)。這種對象模型共包含7個對象,即connection、command、recordset、parameter、property、field和error。n其中最常用的是connection、command、recordset和field四個對象。 圖5-2ado對象模型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一個數(shù)據(jù)庫文件可以包含一個或多個表n每個表均有一個表名n各表之間可以存在某種關(guān)系n比如:學(xué)生.mdb 個人信息(學(xué)號,姓名,班級,年齡,-) 成績(學(xué)號,科目代號,成績) 科目(科目代號,科目名稱)n記錄和字段n列-字段(field)n行-記錄(record)db表1表n字段字段1字段字段2字段字段m記錄記錄1記錄記錄n數(shù)據(jù)庫基本概念數(shù)據(jù)庫基本概念2n關(guān)鍵字(key)n能夠唯一識另一條記錄的最小屬性集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)鍵字建立的一個表中的記錄同另一個表中記錄之間

8、的關(guān)系n根據(jù)數(shù)量對應(yīng)關(guān)系,分為一對一、一對多、多對多n索引(index)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對象(對象( activex data objects )使

9、用使用data控件訪問數(shù)據(jù)庫控件訪問數(shù)據(jù)庫1定義:用運用data控件訪問db是一種編程很少,但卻能快速訪問db表的手段,為此vb提供了兩種工具: 其一為data控件,用于定義數(shù)據(jù)源; 其二為bound約束控件,用于定義數(shù)據(jù)源的輸 入輸出界面。n這種方式具有編程簡單,易學(xué)易用的優(yōu)點,適合開發(fā)原型及小型數(shù)據(jù)庫系統(tǒng)的應(yīng)用。 如圖2data控件 3data控件的約束數(shù)據(jù)(bound控件) 作業(yè)作業(yè)db如圖 人號:_ 人名:_ 年齡:_ 人員紀(jì)錄 data控件1)名字:data (n)2)功能:(定義數(shù)據(jù)源)n通過data控件無須編程,直接訪問由其屬性定義的數(shù)據(jù)源;ndata控件有四個導(dǎo)航器,用于顯示域

10、上移動被顯示的內(nèi)容,相當(dāng)于順序查找;n被顯示內(nèi)容可在屏幕上直接修改,當(dāng)導(dǎo)航器從當(dāng)前記錄移動后,被修改既被接受。首記錄上條記錄尾記錄下條記錄說明信息3)后臺位置動作: 把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控件屬性,建立對數(shù)據(jù)庫的連接向form上添加約束控件,使其與data控件記錄集的某個字段關(guān)聯(lián)放入其他需要的控件,并編寫有關(guān)事件過程ado數(shù)據(jù)控件

11、使用方法及步驟:數(shù)據(jù)控件使用方法及步驟: (1)建立邏輯數(shù)據(jù)庫(odbc數(shù)據(jù)源)(2)“部件”中加入“ado data control6.0”(3)窗體上放置一個 ado data 控件(adodcuser),建立與數(shù)據(jù)庫及表的連接。i. 在“屬性”窗口中,單擊“connectionstring”打開“connectionstring”對話框,設(shè)置odbc 數(shù)據(jù)源名。ii. 在“屬性”窗口中,將“recordsource”屬性設(shè)置為一個表名或sql語句。例如:select * from tbl_user;(4)建立ado data控件與用戶界面控件的綁定。ni. 在窗體上放置一個text控件n

12、ii. datasource屬性設(shè)為adodcuser, 將該文本框與ado data控件綁定niii. datafield屬性設(shè)置為該文本框要顯示字段的名稱,如name 。niv. dataformat屬性設(shè)置該文本框顯示數(shù)據(jù)的格式(類型)n添加其他數(shù)據(jù)綁定控件combo, grid等(方法同上)。下拉列表框中項目添加仍需用additem方法。注:de環(huán)境同樣可做此綁定設(shè)置。示例示例5.15.1數(shù)據(jù)數(shù)據(jù)綁定窗體綁定窗體5)data控件的子對象 data對象 庫的表、視圖、查詢 record set 記錄集 field 表項、字段6)data控件的及其子對象的屬性控件的及其子對象的屬性ncon

13、ect:database name: recordsource :nrecordset: recordtype:eof/bof nrecordcount:bookmark:fields: 7) 方法(方法(data的子對象的子對象recordset對象的方法對象的方法 、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:記錄對象,也可看為屬性,通過屬性可直接訪問由data控件調(diào)入內(nèi)存的所有數(shù)據(jù)。n命令格式為:.。n因此recordset是一種瀏覽數(shù)據(jù)庫的工具,也視為內(nèi)存中對表的查尋結(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)航器的 移動。n調(diào)用格式:data1.recordset.eof/bof data控件的子對象屬:nrecordcount:recordset記錄集中的記錄個數(shù)。nbookmark:系統(tǒng)給予recordset 每一行的唯一標(biāo)簽。其標(biāo)志與記錄集的順序無關(guān)。 n屬性調(diào)用格式:n. nfields (n) :表示調(diào)用recordset的某個字段 n屬性調(diào)用格式:n .fields(n)recordset.fields(n) data控件的子對象屬:data的

16、子對象的子對象recordset對象的方法對象的方法:n無條件順序移動move方法 n有條件的查找find方法 n數(shù)據(jù)庫記錄的編輯方法 n索引查找 無條件順序移動move方法n格式: n功能:按記錄的物理順序進行順序移動其中nmovefirst將記錄定位到第一條記錄;nmovelast將記錄移到最后一條記錄;nmoveprevious將記錄移到當(dāng)前記錄的前一條記錄; nmovenext將記錄移到當(dāng)前記錄的下一條記錄。n調(diào)用: .recordset. 有條件的查找find方法n格式: 其中條件為邏輯表達式。n功能:findfirst在recordset中將記錄定位到滿足條件的第一個記錄;find

17、last在recordset中將記錄定位到滿足條件的最后一個記錄;findprevious在recordset中將定位到滿足條件的記錄的前一個記錄findnext在recordset中將定位到滿足條件的記錄的后一個記錄;n調(diào)用:.recordset.find. n如果找不到,需要做容錯處理,使用nomatch方法表示find查找失敗。 數(shù)據(jù)庫記錄的編輯方法naddnew:增加一個空白記錄到文件尾部;ndelete:刪除recordset中當(dāng)前記錄;nedit:使當(dāng)前記錄處于可以修改的狀態(tài);nupdate:將當(dāng)前記錄寫入數(shù)據(jù)庫中;nrefresh:同上。n使用格式:. 索引查找n格式:seek

18、“運算符”,變量值。n如seek “=”,“004”。n使用條件:在使用seek前相應(yīng)的索引文件必須打開。n打開索引文件的格式為:n.recordset.index=”索引文件的關(guān)鍵字段名”n例如, .recordset.index=”primarykey” .recordset.index=”職稱”nseek文件建立的策略:在經(jīng)常性查找和使用的時候需要建立seek文件,因為系統(tǒng)的開銷大。而只找一條記錄時使用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清除對當(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:反映約束控件對應(yīng)的實際數(shù)據(jù)源。 如表、視

20、圖等。ndatafield:表示所綁定的數(shù)據(jù)源recordset的某個字段。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)建約束對象與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ā)時機:n使用data控件導(dǎo)航器移動記錄值n使用move 方法使另一條記錄成為當(dāng)前記錄之前n使用update更新數(shù)據(jù)時,當(dāng)把物理數(shù)據(jù)庫真正更改之前被觸發(fā)n使用delete,close,unload(關(guān)閉窗口) 操作之前被觸發(fā)n按updaterecord事件不觸發(fā)validate,將觸發(fā)dberro事件n該方法用于保存記錄的按鈕的事件程序中 例子例:檢查某文本框text,(其值將修改某個表)的值發(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),做三個約束控件與authors三個變量關(guān)聯(lián),運行并利用data控件導(dǎo)航器瀏覽內(nèi)容補充資料:vb帶的兩個數(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)請同學(xué)自己整理出來。 建立如圖所示的界面,其中:有3個label控件,3個text控件,1個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è)置完成上述控件屬性后,運行。 利用data控件的導(dǎo)航器觀察數(shù)據(jù)庫記錄的內(nèi)容。 上機練習(xí)內(nèi)容: 1利用move方法。要求程序運行時將data控件隱藏,對c2及c3做容錯處理。利用導(dǎo)航器實現(xiàn)對”year born”的賦值。(year born=1000+ 2利用導(dǎo)航器及關(guān)鍵字段實現(xiàn)對authors 的增、刪、改操作。 3find 及seek的使用。

27、在authors中查找某一個指定的記錄值,其關(guān)鍵字為au_id。要求:按find時,支持seek的控件隱藏;按seek時,支持find的控件隱藏。找不到記錄時使用nomatch做容錯處理。使用inputbox動態(tài)輸入指定的查找值au_id。 用adode 環(huán)境訪問數(shù)據(jù)庫n數(shù)據(jù)環(huán)境設(shè)計器為創(chuàng)建編程的運行時數(shù)據(jù)環(huán)境設(shè)計器為創(chuàng)建編程的運行時數(shù)據(jù)訪問提供了一個交互的、設(shè)計時數(shù)據(jù)訪問提供了一個交互的、設(shè)計時環(huán)境。環(huán)境。n提供在提供在vb應(yīng)用程序中訪問數(shù)據(jù)庫的接應(yīng)用程序中訪問數(shù)據(jù)庫的接口???。n鏈接數(shù)據(jù)庫的操作步驟鏈接數(shù)據(jù)庫的操作步驟n訪問數(shù)據(jù)庫訪問數(shù)據(jù)庫(recordset)屬性和方法屬性和方法總結(jié)總結(jié)

28、用adode 環(huán)境訪問數(shù)據(jù)庫1n要引用數(shù)據(jù)環(huán)境設(shè)計器,請按照以下步驟執(zhí)行: n“工程”-“引用.”-“data environment 1.0”n創(chuàng)建一個 connection 對象,建立一個和遠程數(shù)據(jù)庫的連接(該數(shù)據(jù)庫為邏輯數(shù)據(jù)庫)。ncommand 對象定義了從一個數(shù)據(jù)庫連接中獲取何種數(shù)據(jù)的詳細(xì)信息。ncommand 對象既可以基于一個數(shù)據(jù)庫對象(例如:一個表、視圖、存儲過程或同義詞),也可以基于一個結(jié)構(gòu)化查詢語言(sql)查詢。ncommand對象建立的同時,建立一個recordset對象,實現(xiàn)對記錄的進行訪問。n例如,當(dāng)數(shù)據(jù)環(huán)境設(shè)計器創(chuàng)建cmduser命令時,它同時創(chuàng)建一個稱為rscm

29、duser的recordset對象??偨Y(jié)操作步驟總結(jié)操作步驟詳細(xì)操作步驟詳細(xì)操作步驟nvb中對數(shù)據(jù)庫訪問的實現(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中間件,以實現(xiàn)和邏輯db的連接。n方法:添加一個數(shù)據(jù)環(huán)境設(shè)計器對象:n“工程”-“引用.”-“data environment 1.0”n“工程”-“添加 data environment”。 n(4)建立與邏輯數(shù)據(jù)庫的連接。n方法:i. 添加 connection

30、 對象 ii. “數(shù)據(jù)鏈接屬性”對話框中,在“提供方”和“連接”選項卡中指定連接數(shù)據(jù)庫信息。n(5)建立與數(shù)據(jù)庫中某個表的連接。n方法:i. 在connection對象下添加command對象 ii. 設(shè)置command屬性:n database object下拉列表中選擇數(shù)據(jù)庫對象的類型,可以是一個存儲過程、同義詞、表或視圖。n object下拉列表中選擇一個對象的名字。(6)vb應(yīng)用程序代碼中引用該數(shù)據(jù)環(huán)境。n方法:用dim語句創(chuàng)建數(shù)據(jù)環(huán)境實例變量后,才能引用。n格式:ndim myde as new dework(7)對數(shù)據(jù)表記錄進行讀、寫等操作。方法:方法:在代碼中將command對象

31、作為數(shù)據(jù)環(huán)境的一種方法來引用,并將其recordset作為數(shù)據(jù)環(huán)境的一種屬性來引用。通過(6)所建的實例變量引用。例如,例如,如果在名為dework的數(shù)據(jù)環(huán)境中創(chuàng)建了cmduser命令,就可以在代碼中用myde.rscmduser引用command對象中的記錄集。與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中間件以實現(xiàn)和邏輯db的

32、連接。de環(huán)境如: dework(4)建立與邏輯數(shù)據(jù)庫的連接connection(5)建立與數(shù)據(jù)庫中某個表的連接command(6)vb應(yīng)用程序代碼中引用該數(shù)據(jù)環(huán)境dim myde as new dework(7)對數(shù)據(jù)表記錄進行讀、寫等操作myde.rscmduser.fields(1).value = “cxd”command連接連接的表對象明的表對象明對數(shù)據(jù)庫的記錄的顯示操作 n一般可通過下面幾種方法顯示記錄集中的數(shù)據(jù): n1)在textbox控件中顯示ntext1.text = myde.rscmduser.fields(學(xué)號學(xué)號)n2)讀取到變量中ndim strno as stri

33、ngnstrno = myde.rscmduser.fields(學(xué)號學(xué)號)ntext1.text = strnon3)在grid控件中以二維表的形式顯示n一般可以采用msflexgird控件進行顯示,這個控件的用法比較簡單,請同學(xué)們參照教材中的演示代碼。n注意:注意:n顯示前需要清空原控件中的顯示內(nèi)容n需要先打開數(shù)據(jù)庫,做完后還需要關(guān)閉數(shù)據(jù)庫n下次實驗課練習(xí)n根據(jù)綜合作業(yè)的需要,自己建立一“學(xué)生信息”數(shù)據(jù)庫,其中至少包括四個表“學(xué)生基本信息”,“學(xué)生選課”,“民族”和“學(xué)院信息”;n在作業(yè)中,建立一數(shù)據(jù)環(huán)境、連接及命令,實現(xiàn)與表“學(xué)生基本信息”、“民族”的連接。n要求要反復(fù)練習(xí),明確掌握數(shù)據(jù)

34、環(huán)境、連接、命令及recordset的概念及其對應(yīng)于物理數(shù)據(jù)庫、表中的對象,在vb應(yīng)用系統(tǒng)中如何使用??偨Y(jié)步驟:(1)建庫建庫:建立物理數(shù)據(jù)庫及其邏輯數(shù)據(jù)庫odbc(2)環(huán)境環(huán)境:設(shè)置ado中間件以實現(xiàn)和邏輯db的連接。de環(huán)境如: stmisde(3)連接連接:connection建立與邏輯數(shù)據(jù)庫的連接;command建立與數(shù)據(jù)庫中某個表的連接。(4)引用引用:vb應(yīng)用程序代碼中引用該數(shù)據(jù)環(huán)境dim misde as new stmisde(5)讀寫讀寫:對數(shù)據(jù)表記錄進行讀、寫等操作 關(guān)于(5)對數(shù)據(jù)庫的讀寫:n打開表: dim strsql as string strsql = selec

35、t distinct s_department from tbl_dep misde.rscmdquery.open strsql n可做:清空、賦值、顯示、上/下一個等操作控件對象名控件對象名. clear 初始化時首先將顯示區(qū)清空n關(guān)閉:misde.rscmdquery.close初始化時需要剔除重復(fù)項初始化時需要剔除重復(fù)項 屬性與方法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é)號”為某值的記錄修改 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)用:檢測記錄是否讀取完畢、是否查找到指定記錄;表中或查詢中是否有記錄 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)計表、查詢中的記錄數(shù)n例:for ii = 1 to myde.rscmduser.recordcountnabsoluteposition:當(dāng)前記錄指針的絕對位置n應(yīng)用:與recordcount一起顯示記錄的總數(shù)及當(dāng)前記錄號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:移動指針n例如:myde.rscmduser. update記錄游標(biāo)(recordset)n方法:nopen, close:打開、關(guān)閉一個記錄游標(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對象的使用方法(2)recordset和field對象使用方法(3)將記錄在窗體上顯示(4)報表輸出(自學(xué))(5)小結(jié)(6)練習(xí)題( 1)connection對象的使用方法n在vb應(yīng)用程序中主要用這個對象建立與數(shù)據(jù)庫的連接,一般的方法是:n1)聲明并創(chuàng)建對象)

41、聲明并創(chuàng)建對象ndim adocn as connection 聲明對象nset adocn = new connection 創(chuàng)建新對象n或?qū)⑸鲜鰞蓷l語句直接寫成ndim adocn as new connectionn2)建立數(shù)據(jù)庫連接)建立數(shù)據(jù)庫連接n一般通過下列語句完成與數(shù)據(jù)庫(源)的連接:nadocn.open 連接字符串連接字符串自動生成“連接字符串”的方法n首先選擇“工程添加data environment”菜單項 鏈接sql數(shù)據(jù)庫n在connection1之上點擊鼠標(biāo)右鍵,并選擇“屬性”菜單項 鏈接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)對數(shù)據(jù)表進行更新操作)對數(shù)據(jù)表進行更新操作 n我們還可以利用connection對象對數(shù)據(jù)庫中的基本表進行增加、刪除、修改等不返回結(jié)果集的操作,語法如下:nadocn.execute sql語句字符串語句字符串總結(jié)總結(jié)總結(jié)connection對象的使用方法:0)準(zhǔn)備)準(zhǔn)備ado環(huán)境:引用環(huán)境:引用microsoft activex data objects 2.7 library1)聲明并創(chuàng)建對象)聲明并創(chuàng)建對象dim adocn as new connection2)建立數(shù)據(jù)庫連接)建立數(shù)據(jù)庫連接adocn.op

43、en 連接字符串連接字符串3)對數(shù)據(jù)表進行更新操作)對數(shù)據(jù)表進行更新操作adocn.execute sql語句字符串語句字符串舉例舉例3 3)對數(shù)據(jù)表進行更新操作)對數(shù)據(jù)表進行更新操作執(zhí)行執(zhí)行n聲明一個字符串變量ndim strsql as stringn拼寫insert、delete、update結(jié)構(gòu)化查詢語句nstrsql = delete from 學(xué)生成績表 nstrsql = strsql+ “where學(xué)號= ” + “ ” + combo1.text + “ n執(zhí)行sql語句nadocn.execute strsqln這里使用兩個“”表示一個單引號字符,比如拼寫后的strsql應(yīng)

44、該具有以下內(nèi)容:ndelete from 學(xué)生成績表 where 學(xué)號=001執(zhí)行一個字符串。實現(xiàn)一個執(zhí)行一個字符串。實現(xiàn)一個增刪改動作,不能作如:賦增刪改動作,不能作如:賦值、顯示等的表操作。值、顯示等的表操作。字符串變量優(yōu)點在與便于字符串變量優(yōu)點在與便于調(diào)試。調(diào)試。(2)recordset和field對象使用方法 n第一步:聲明一個新的recordset對象ndim adors as new recordsetn第二步:與ado鏈接對象建立關(guān)聯(lián)nadors.activeconnection = adocnn第三步:執(zhí)行select操作nadors.open select * from 學(xué)生

45、成績表n第四步:進行數(shù)據(jù)庫的各種訪問。n第五步:關(guān)閉記錄集對象nadors.close 3 3)對數(shù)據(jù)表進行更新操作)對數(shù)據(jù)表進行更新操作增刪改增刪改n當(dāng)使用open方法打開一個記錄集后,我們就可以訪問其中的數(shù)據(jù)了,一般的方法是:nadors.fields(“學(xué)號”) n或者adors(學(xué)號) (3)將記錄在窗體上顯示 n一般可通過下面幾種方法顯示記錄集中的數(shù)據(jù): n1)在textbox控件中顯示ntext1.text = adors.fields(學(xué)號)n2)讀取到變量中ndim strno as stringnstrno = adors.fields(學(xué)號)ntext1.text = st

46、rnon3)在grid控件中以二維表的形式顯示n一般可以采用msflexgird控件進行顯示,這個控件的用法比較簡單,請同學(xué)們參照教材中的演示代碼。n在使用這類控件顯示數(shù)據(jù)時,一般的步驟是:n第一步:清空數(shù)據(jù)。n第二步:設(shè)置標(biāo)題欄。n第三步:打開記錄集。n第四步:使用循環(huán)將記錄集中的數(shù)據(jù)添加到grid中去。 例子例子物質(zhì)臺賬n在模塊兒中:npublic adocn as new connectionnsub main()n connet the databasen adocn.open provider=microsoft.jet.oledb.4.0;data source=c:文件vb實驗數(shù)

47、據(jù)庫字符串訪問數(shù)據(jù)庫物資庫.mdb;persist security info=falsen show the main formn form1.shownend subsource= + app.path + 物資庫.mdbsource=c:文件vb實驗數(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ì)臺帳 where 編碼= + text1.text + adors.open strsql if adors.eof then如果指針到底了,說明沒有找到該記錄可以進行添加 strsql = “insert into 物質(zhì)臺帳(編碼,名稱,單價,備注) 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ì)臺帳(編碼,名稱,單價,備注) values(001,負(fù)載,12312,這是一人上奪)字符串連接練習(xí)n將下列sql語句連成字符串:ninsert into 物質(zhì)臺帳(編碼,名稱,單價,備注) values(001,

溫馨提示

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

評論

0/150

提交評論