使用Data控件訪問數(shù)據(jù)庫_第1頁
使用Data控件訪問數(shù)據(jù)庫_第2頁
使用Data控件訪問數(shù)據(jù)庫_第3頁
使用Data控件訪問數(shù)據(jù)庫_第4頁
使用Data控件訪問數(shù)據(jù)庫_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1使用Data控件訪問數(shù)據(jù)庫VB具有數(shù)據(jù)庫連接和數(shù)據(jù)處理功能,因此能夠作為數(shù)據(jù)庫應(yīng)用程序的開發(fā)環(huán)境。用用開發(fā)數(shù)據(jù)庫應(yīng)用程序有以下優(yōu)點(diǎn):?簡(jiǎn)單。VB提供了數(shù)據(jù)控件,利用此控件可以方便的訪問數(shù)據(jù)庫,瀏覽數(shù)據(jù)庫中的數(shù)據(jù)。?靈活。VB可以和多種數(shù)據(jù)庫相連,通過ODBC,甚至可以象使用數(shù)據(jù)庫表格一樣使用文本文件和EXCEL工作表。?可擴(kuò)充性。在VB中可以用控件的方式對(duì)VB的功能進(jìn)行擴(kuò)充。開發(fā)過程中,使用VB作為數(shù)據(jù)庫前端。數(shù)據(jù)控件數(shù)據(jù)控件已經(jīng)集成到了VB的工具箱里,可以直接使用。數(shù)據(jù)控件的按扭為:置,在應(yīng)用窗體中添加控件如下圖所示:使用數(shù)據(jù)控件不用編程就可以實(shí)現(xiàn)下列操作:?與本地或者遠(yuǎn)程數(shù)據(jù)庫建立連接?對(duì)連接的數(shù)據(jù)庫執(zhí)行SQL查詢,打開指定的數(shù)據(jù)表或定義記錄集。?把數(shù)據(jù)字段傳送到各種約束控件,并可以在約束控件中顯示或修改數(shù)據(jù)字段的值。?根據(jù)約束控件中數(shù)據(jù)的變化,添加新記錄或更新數(shù)據(jù)庫。?捕獲訪問數(shù)據(jù)庫時(shí)出現(xiàn)的錯(cuò)誤。?關(guān)閉數(shù)據(jù)庫。數(shù)據(jù)控件的屬性數(shù)據(jù)控件具有以下一些屬性:ConnectH性:指定數(shù)據(jù)庫類型,VB可識(shí)別的數(shù)據(jù)庫有:Access的MDB及件,DBASE數(shù)據(jù)庫文件,F(xiàn)oxpro的DBF文件,BorlandParadOfi數(shù)據(jù)庫文件,ODBC數(shù)據(jù)庫等。DatabaseName屬性:指定具體使用的數(shù)據(jù)庫。如果連接的是MDB數(shù)據(jù)庫文件,就把該屬性設(shè)置為文件名,如果連接的是Foxpro,dBase,Parad數(shù)據(jù)庫,就把該屬性設(shè)置為相應(yīng)的子目錄的名稱。Data1.DataBaseName=〃C:\ProgramFiles\MicrosoftVisualStudio\VB98\Biblio.mdb"Data1.RecordSource=〃Select*fromAuthor"Recordtyp類型:確定記錄類型。如果是Access數(shù)據(jù)庫,就設(shè)置RecordType為Table記錄集合類型;如果是其他類型的數(shù)據(jù)庫就選擇Dynaset記錄集合類型,如果只需要讀數(shù)據(jù)的話,就選擇Snapshot記錄集合類型。RecordSourc屬性。指定具體可訪問的數(shù)據(jù)。例如表,存儲(chǔ)的查詢或者一個(gè)SQL語句等。EofAction和BofActioni性,指定當(dāng)瀏覽記錄集時(shí),到頭或者到尾該如何處理。用戶可以選擇是保持,還是觸發(fā)一個(gè)事件等。Readonly屬性:控制是否對(duì)記錄集進(jìn)行寫操作。數(shù)據(jù)控件的方法Move方法:MoveFirst,MoveLast,MoveNext,MovePrevious,Move(n)Fin方法:FindFirst,FindLast,FindNext,FindPreviousSee方法:Refresh法:Clos方法:關(guān)閉數(shù)據(jù)庫連接。數(shù)據(jù)的輸入與更新增加記錄,使用Addnew方法,分三步:調(diào)用Addnew方法,給各字段賦值,調(diào)用Update方法,確定所作的添加,將數(shù)據(jù)寫入數(shù)據(jù)庫中。刪除記錄,使用Deleted法,分三步:定位記錄,調(diào)用Delete方法,移動(dòng)記錄指針。編輯記錄:分四步:定位記錄,調(diào)用Edit方法,給各字段賦值,調(diào)用Update方法,確定所作的修改。如果放棄修改,就調(diào)用Refresl方法。用控件顯示數(shù)據(jù)在VB中,通過與Data控件關(guān)聯(lián)的控件來顯示數(shù)據(jù),為了使控件能夠與數(shù)據(jù)控件關(guān)聯(lián),必需設(shè)置下面的兩個(gè)屬性:DataSourcdi性和DataFiel屬性。此外,還可以使用一些高級(jí)約束控件,這些控件包括:數(shù)據(jù)庫網(wǎng)格控件(DataGrid)數(shù)據(jù)庫組合框控件和數(shù)據(jù)庫列表框(DataLis控件。請(qǐng)觀看演示。2使用DAO訪問數(shù)據(jù)庫DAO就是數(shù)據(jù)庫訪問對(duì)象模型。它提供了一些對(duì)象,通過這些對(duì)象的屬性和方法就可以實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的訪問。下圖就是DAO的一個(gè)模型圖。使用DAO之前必須將對(duì)象庫引入到工程中去,方法如下圖所示:使用RecordSe對(duì)象一、Recordse對(duì)象的創(chuàng)建在DAO對(duì)象一覽圖中我們可以看到Recordset象是Database對(duì)象的子對(duì)象,那么在建立Recordse對(duì)象之前需要先建立Databsse對(duì)象,這就如同在C++中要先建立父類才能建立子類一樣,這里有些讀者可能會(huì)問,在Databases象上還有兩層對(duì)象不需要建立嗎?在VB的數(shù)據(jù)庫編程,DBEngine對(duì)象是最頂級(jí)的數(shù)據(jù)庫訪問對(duì)象,有點(diǎn)象JAVA中的超類概念,是不需要建立,其他DAO對(duì)象都是對(duì)它的繼承,至于Workspace對(duì)象,VB中缺省建立了一個(gè),如果不設(shè)計(jì)到多個(gè)數(shù)據(jù)庫環(huán)境的話(例如:在程序中同時(shí)使用ODBC和Je),是不需要關(guān)心的。首先必須聲明一個(gè)Recordset類型的變量然后將變量設(shè)置為OpenRecordset方法返回的對(duì)象。OpenRecordset方法在DatabaseConnectionTableDefQueryDef以及已經(jīng)存在的Recordset對(duì)象中使用。Connection和Database對(duì)象的OpenRecordset方法的語法如下:Setvariable=database.OpenRecordset(source[,type[,options,[lockedits]]])其它所有類型的對(duì)象的OpenRecordset方法的語法如下:Setvariable=object.OpenRecordset([type[,options[,lockedits]])其中:variabl參數(shù)是新的Recordset對(duì)象的名稱。database參數(shù)是一個(gè)打開的Database或者Connection對(duì)象的名稱,可用該對(duì)象創(chuàng)建新的Recordset對(duì)象。object參數(shù)是一個(gè)TableDefQueryDef或者現(xiàn)有的Recordset對(duì)象,我們用該對(duì)象創(chuàng)建新的Recordset對(duì)象。source參數(shù)指定新的Recordset對(duì)象的記錄來源。source的值將成為新產(chǎn)生的Recordset對(duì)象的Name屬性的值。用Connection或者Database對(duì)象創(chuàng)建新的Recordset對(duì)象時(shí),source參數(shù)可以是數(shù)據(jù)庫中現(xiàn)有的TableDef或QueryDef對(duì)象,或者為一個(gè)有效的、返回行的SQL查詢或語句。如果用TableDefQueryDef或者現(xiàn)有的Recordset對(duì)象創(chuàng)建新的Recordset對(duì)象,那么對(duì)象自身將為新的記錄集提供數(shù)據(jù)源。Recordset對(duì)象有五種類型:表、動(dòng)態(tài)集、快照、動(dòng)態(tài)和僅向前表類型的Recordset對(duì)象是指當(dāng)前數(shù)據(jù)庫中的本地表或者M(jìn)icrosoftJ創(chuàng)建的外部數(shù)據(jù)庫。在創(chuàng)建表類型的記錄集時(shí),數(shù)據(jù)庫引擎打開實(shí)際表,后續(xù)的數(shù)據(jù)操作都是直接對(duì)基本表進(jìn)行的。只能對(duì)單個(gè)的表打開表類型的記錄集,而不能對(duì)聯(lián)接或者聯(lián)合查詢打開。如果使用基本表創(chuàng)建的索引,就可以對(duì)表類型的Recordset對(duì)象進(jìn)行索引。與其它類型的Recordset對(duì)象相比,表類型的搜索與排序速度最快。定位特定的記錄時(shí),Seek方法要快于Find方法。動(dòng)態(tài)集類型的Recordset對(duì)象可以是本地的或者鏈接的表,也可以是返回的行查詢結(jié)果。它實(shí)際上是對(duì)一個(gè)或者幾個(gè)表中的記錄的一系列引用。可用動(dòng)態(tài)集從多個(gè)表中提取和更新數(shù)據(jù),其中包括鏈接其它數(shù)據(jù)庫中的表。動(dòng)態(tài)集類型具有一種與眾不同的特點(diǎn):不同數(shù)據(jù)庫的可更新聯(lián)接。利用這種特性,可以對(duì)不同類型的數(shù)據(jù)庫中的表進(jìn)行可更新的聯(lián)接查詢。動(dòng)態(tài)集和它的基本表可以互相更新。如果動(dòng)態(tài)集中的記錄發(fā)生改變,同樣的變化也將在基本表中反映出來。在打開動(dòng)態(tài)集的時(shí)候,如果其他的用戶修改了基本表,那么動(dòng)態(tài)集中也將反映出被修改過的記錄。動(dòng)態(tài)集類型是最靈活的recordse類型,也是功能最強(qiáng)的。不過,它的搜索速度與其它操作的速度不及表類型的Recordset快照類型的Recordset對(duì)象包含的數(shù)據(jù)是固定的,它反映了在產(chǎn)生快照的一瞬間數(shù)據(jù)庫的狀態(tài)。從Microsoft丁數(shù)據(jù)源得到的快照是不可更新的,從開放數(shù)據(jù)庫互連(ODBC)數(shù)據(jù)源得到的某些快照是可以更新的,這取決于后端數(shù)據(jù)庫的能力。與動(dòng)態(tài)集類型和表類型的Recordset對(duì)象相比,快照的處理開銷較少。因此,它執(zhí)行查詢和返回?cái)?shù)據(jù)的速度更快,特別是在使用ODBC數(shù)據(jù)源時(shí)。需要注意的是,對(duì)于.mdb文件,在快照中用指針表示Memo和LongBinary字段中的數(shù)據(jù)。僅向前類型的Recordset對(duì)象,有時(shí)被稱為“向前滾動(dòng)快照”或者“僅向前快照”,提供了快照的一部分功能。它提供了最基本的Recordset對(duì)象功能,但是通常可以達(dá)到最快的速度。與快照類似,從MicrosoftJ得到的僅向前類型的Recordset對(duì)象是不可更新的。另外,僅向前的快照只允許在記錄中向前移動(dòng),而不能向相反的方向移動(dòng)。這種類型的Recordset對(duì)象不能被復(fù)制,而且只支持Move和MoveNext方法。動(dòng)態(tài)類型的Recordset對(duì)象是從一個(gè)或幾個(gè)基本表中查詢到的結(jié)果集,對(duì)于返回行的查詢,可以在其中添加、修改或刪除記錄。另外,其它用戶對(duì)基本表的添加、刪除和修改操作也將出現(xiàn)在您的記錄集中。這種類型對(duì)應(yīng)于ODBC的動(dòng)態(tài)游標(biāo)。DAO能夠根據(jù)記錄集的數(shù)據(jù)源類型,以及打開記錄集的方式,自動(dòng)地設(shè)置缺省的記錄集類型。因此,一般不需要指定記錄集類型。然而,可以在OpenRecordset方法中指定type參數(shù),以取消缺省的類型。按照打開記錄集的方式,下表中列出了可用的類型和缺省的類型。■使用Database對(duì)象的OpenRecordset方法:SetrstNew=dbs.OpenRecordset(〃DataSource")如果DataSource數(shù)據(jù)庫中的本地表,那么可以用表類型、動(dòng)態(tài)集、快照和動(dòng)態(tài)類型的Recordset對(duì)象,缺省的記錄集類型為表類型。如果DataSourc為其它類型,那么只能使用動(dòng)態(tài)集和快照類型的Recordset對(duì)象,動(dòng)態(tài)集類型為缺省的類型。■使用TableDef對(duì)象的OpenRecordset方法。SetrstNew=tdfTableData.OpenRecordset如果tdfTableDat指的是MicrosoftJ數(shù)據(jù)庫(.mdb)中的表,或者直接打開的ISAM數(shù)據(jù)庫,那么所有的五種類型都是可用的,表類型的記錄集為缺省的類型。如果tdfTableDat在ODBC數(shù)據(jù)庫中,或者是外部數(shù)據(jù)庫中的鏈接表,那么只能用動(dòng)態(tài)集和快照類型的Recordset對(duì)象,動(dòng)態(tài)集類型為缺省類型?!鍪褂肣ueryDef對(duì)象的OpenRecordset方法:SetrstNew=qdfQueryData.OpenRecordset只能使用動(dòng)態(tài)集和快照類型的Recordset對(duì)象,動(dòng)態(tài)集類型為缺省的類型?!鍪褂矛F(xiàn)有的Recordset對(duì)象的OpenRecordset方法:SetrstNew=rstExisting.OpenRecordset只能使用動(dòng)態(tài)集和快照類型的Recordset對(duì)象。缺省的類型為現(xiàn)有的記錄集的類型,在上例中,即rstExisti^g類型。具體創(chuàng)建Recordset象的例子以表為基礎(chǔ)創(chuàng)建記錄集用基本表創(chuàng)建Recordset對(duì)象的方法,取決于該表對(duì)于當(dāng)前數(shù)據(jù)庫是本地表,還是位于另一個(gè)數(shù)據(jù)庫中的鏈接表。用本地MicrosoftJ數(shù)據(jù)庫中的表創(chuàng)建記錄集下列程序代碼使用OpenRecordset方法為一個(gè)表創(chuàng)建了表類型的Recordset對(duì)象:DimdbsAsDatabase,rstCustomersAsRecordsetSetdbs=OpenDatabase(〃Northwind.mdb〃)SetrstCustomers=dbs.OpenRecordset(〃Customers〃)請(qǐng)注意,創(chuàng)建表類型的記錄集時(shí)無需使用dbOpenTable常數(shù)。如果省略了type常數(shù),DAO將根據(jù)數(shù)據(jù)源和用來創(chuàng)建記錄集的對(duì)象的類型,選擇最適當(dāng)?shù)腞ecordset對(duì)象類型。當(dāng)從本地表打開記錄集時(shí),可以使用表類型的記錄集,DAO將使用它。用其它數(shù)據(jù)庫格式的鏈接表創(chuàng)建記錄集下列程序段為鏈接的Paradox3.表創(chuàng)建了一個(gè)動(dòng)態(tài)集類型的Recordset對(duì)象。當(dāng)從非Microsoft丁數(shù)據(jù)庫中的鏈接表打開記錄集時(shí),表類型是不能使用的,因此,DAO的使用效率僅次于它的動(dòng)態(tài)集類型。DimdbsAsDatabaseDimtdfNonJetLinkedAsTableDefDimrstTableDataAsRecordset'打開數(shù)據(jù)庫并創(chuàng)建TableDefSetdbs=OpenDatabase(〃Northwind.mdb〃)SettdfNonJetLinked=dbs.CreateTableDef(〃PDXAuthor〃)'連接到名為Author的Paradox表,該表位于數(shù)據(jù)庫'C:\PDX\PublishtdfNonJetLinked.Connect=_"Paradox3.X;DATABASE二C:\PDX\Publish”tdfNonJetLinked.SourceTableName="Author"'鏈接該表。dbs.TableDefs.AppendtdfNonJetLinked'為該表創(chuàng)建動(dòng)態(tài)集類型的記錄集。SetrstTableData=tdfNonJetLinked.OpenRecordset()如果先打開Paradox數(shù)據(jù)庫,則可直接打開Paradox表。以查詢?yōu)榛A(chǔ)創(chuàng)建記錄集也可以基于存儲(chǔ)的選擇查詢來創(chuàng)建Recordset對(duì)象。在下例中,“CurrentProductList”是保存在當(dāng)前數(shù)據(jù)庫中的一個(gè)選擇查詢。DimdbsAsDatabase,rstProductsAsRecordsetSetdbs=OpenDatabase("Northwind.mdb")SetrstProducts=dbs.OpenRecordset_("CurrentProductList")如果當(dāng)前并不存在存儲(chǔ)的選擇查詢OpenRecordset方法允許使用SQL字符串代替查詢名。上例可以改寫為以下程序段:DimdbsAsDatabase,rstProductsAsRecordsetDimstrQuerySQLAsStringSetdbs=OpenDatabase("Northwind.mdb")strQuerySQL="SELECT*FROMProducts"_&"WHEREDiscontinued=No"&"ORDERBYProductName;"SetrstProducts=dbs.OpenRecordset(strQuerySQL)這種方法的缺點(diǎn)在于,每次運(yùn)行時(shí)都需要先編譯查詢字符串,而存儲(chǔ)的查詢只是在首次保存時(shí)編譯一次,所以性能較佳。注意如果在MicrosoftJ中用SQL字符串或者存儲(chǔ)的查詢創(chuàng)建Recordset對(duì)象,那么,在查詢返回了記錄集的第一行以后,程序才會(huì)繼續(xù)運(yùn)行。在查詢運(yùn)行的時(shí)候,最好在狀態(tài)欄中顯示出適當(dāng)?shù)南?。如果使用ODBCDirect,可以指定dbRunAsync,它使查詢?cè)诤笈_(tái)執(zhí)行,應(yīng)用程序能夠繼續(xù)執(zhí)行其它語句。3使用ADO(OLEDB)訪問數(shù)據(jù)庫ActiveXDataObjects(AD是微軟最新的數(shù)據(jù)訪問技術(shù)。它被設(shè)計(jì)用來同新的數(shù)據(jù)訪問層OLEDBProvider-起協(xié)同工作,以提供通用數(shù)據(jù)訪問(UniversalDataAccess)。OLEDB是一個(gè)低層的數(shù)據(jù)訪問接口,用它可以訪問各種數(shù)據(jù)源,包

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論