2023學(xué)年完整公開(kāi)課版VB訪問(wèn)Access數(shù)據(jù)庫(kù)_第1頁(yè)
2023學(xué)年完整公開(kāi)課版VB訪問(wèn)Access數(shù)據(jù)庫(kù)_第2頁(yè)
2023學(xué)年完整公開(kāi)課版VB訪問(wèn)Access數(shù)據(jù)庫(kù)_第3頁(yè)
2023學(xué)年完整公開(kāi)課版VB訪問(wèn)Access數(shù)據(jù)庫(kù)_第4頁(yè)
2023學(xué)年完整公開(kāi)課版VB訪問(wèn)Access數(shù)據(jù)庫(kù)_第5頁(yè)
已閱讀5頁(yè),還剩25頁(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)介

第五單元VB訪問(wèn)Access數(shù)據(jù)庫(kù)考點(diǎn)與典例考點(diǎn)

VB訪問(wèn)Access數(shù)據(jù)庫(kù)1.通過(guò)ADO對(duì)象連接數(shù)據(jù)庫(kù)VB中使用ADO訪問(wèn)數(shù)據(jù)庫(kù)。ADO是微軟公司提供的一種應(yīng)用程序訪問(wèn)數(shù)據(jù)庫(kù)的編程接口。該接口包含了多個(gè)對(duì)象,其中Connection對(duì)象用于和數(shù)據(jù)庫(kù)建立連接,在建立連接后,用Recordset對(duì)象查詢數(shù)據(jù)表。●Connection對(duì)象用Connection建立和數(shù)據(jù)庫(kù)的連接時(shí),需要設(shè)置連接字符串ConnectionString的參數(shù)。下列語(yǔ)句定義一個(gè)Connection對(duì)象的實(shí)例conn,并設(shè)置conn的連接字符串:DimconnAsNewADODB.Connection

conn.ConnectionString="Provider=Microsoft.ACE.OLEDB.12.0;DATASource="&App.Path&"\Contacts.accdb"其中,參數(shù)Provider用于指定連接的提供者(Microsoft.ACE.OLEDB.12.0可以訪問(wèn)Access2010數(shù)據(jù)庫(kù)),DATASource用于指定數(shù)據(jù)庫(kù)的文件名(含絕對(duì)路徑),App.Path返回當(dāng)前應(yīng)用程序所在的絕對(duì)路徑。Connection對(duì)象具有Open、Close等方法,其中Open方法用于建立到數(shù)據(jù)源的連接,Close方法用于關(guān)閉連接。2.通過(guò)Recordset對(duì)象獲取數(shù)據(jù)表中的數(shù)據(jù)●Recordset對(duì)象 用Recordset對(duì)象從數(shù)據(jù)庫(kù)中查詢記錄時(shí),要設(shè)置ActiveConnection屬性的值。語(yǔ)句Setrs.ActiveConnection=conn,使Recordset對(duì)象的實(shí)例rs與Connection對(duì)象的實(shí)例conn建立關(guān)聯(lián)。在與conn建立關(guān)聯(lián)后,可用Recordset對(duì)象的Open方法查詢數(shù)據(jù)表的記錄。Open方法的參數(shù)為SQL命令。如:rs.Open"SELECT*FROMinfo"運(yùn)行后,記錄集rs中的數(shù)據(jù)為SQL語(yǔ)句"SELECT*FROMinfo"查詢到的記錄。Recordset對(duì)象的Close方法用于關(guān)閉對(duì)象。Recordset對(duì)象的Fields集合用于返回當(dāng)前記錄中的數(shù)據(jù),如:rs.Fields("fName")返回當(dāng)前記錄中“fName”字段的值;rs.Fields(0)返回當(dāng)前記錄中第一個(gè)字段的值,如果第一個(gè)字段名為“fName”,rs.Fields(0)與rs.Fields("fName")返回值相同。Recordset對(duì)象的MoveNext方法用于把當(dāng)前移動(dòng)到下一條記錄。若到結(jié)尾處還繼續(xù)向下移動(dòng),程序會(huì)出錯(cuò),因此在使用MoveNext時(shí)要判斷Recordset的EOF屬性,判斷是不是到達(dá)結(jié)尾處。EOF屬性取值為“True”或“False”。3.Select語(yǔ)句Select語(yǔ)句是結(jié)構(gòu)化查詢語(yǔ)言SQL中最常見(jiàn)的語(yǔ)句,主要用于從數(shù)據(jù)表中查詢數(shù)據(jù),如語(yǔ)句“SELECT*FROMinfo”表示查詢數(shù)據(jù)表“info”中的全部數(shù)據(jù)。【典例1】將Access數(shù)據(jù)表中的第一條記錄在VB文本框中顯示。(1)準(zhǔn)備Access數(shù)據(jù)庫(kù)。在文件夾“VB訪問(wèn)Access數(shù)據(jù)庫(kù)”下的“test41”文件夾中存有數(shù)據(jù)庫(kù)文件“cityaqi.accdb”,其“AQI”表的結(jié)構(gòu)與部分?jǐn)?shù)據(jù)分別如圖4-5-1與圖4-5-2所示:(2)建立VB工程、選擇ADO引用。新建VB工程,將窗體與工程分別以“test41.frm”與“test41.vbp”為名保存于“test41”文件夾中,打開(kāi)“工程”菜單,單擊“引用”項(xiàng),在彈出的對(duì)話框中勾選“MicrosoftActiveXDataObjects6.0Library”引用項(xiàng),如圖4-5-3所示:(3)在標(biāo)簽框中顯示數(shù)據(jù)表中的數(shù)據(jù)。建立如圖4-5-4所示:命令按鈕“顯示”(Command1)和“退出”(Command2)的事件處理過(guò)程代碼如下:PrivateSubCommand1_Click()

DimconnAsNewADODB.Connection

DimrsAsNewADODB.Recordsetconn.ConnectionString="Provider=Microsoft.ACE.OLEDB.12.0.DATASource="&App.Path&"\cityaqi.accdb"

conn.Open

Setrs.ActiveConnection=conn

rs.Open"SELECT*FROMaqi"

Text1.Text=rs.Fields("地區(qū)")

Text2.Text=rs.Fields("aqi")

Text3.Text=rs.Fields("等級(jí)")

rs.Close

conn.Close

Setrs=Nothing

Setconn=NothingEndSubPrivateSubCommand2_Click()

EndEndSub(4)運(yùn)行程序。單擊“顯示”按鈕,結(jié)果如圖4-5-5所示:【典例2】在典例1的基礎(chǔ)上,添加一個(gè)按鈕對(duì)象Command3(即“下一條”按鈕),增加和修改相關(guān)代碼實(shí)現(xiàn):單擊“下一條”按鈕時(shí),在文本框Text1和Text2顯示下一條記錄,顯示完最后一條記錄時(shí)提示“記錄已全部顯示完!”。程序運(yùn)行界面如圖4-5-6所示:(1)添加按鈕對(duì)象Command3,將Caption屬性的值修改為“下一條”。(2)命令按鈕“顯示”(Command1)和“下一條”(Command3)的事件處理過(guò)程代碼如下:DimconnAsNewADODB.ConnectionDimrsAsNewADODB.RecordsetPrivateSubCommand1_Click()conn.ConnectionString="Provider=Microsoft.ACE.OLEDB.12.0.DATASource="&App.Path&"\cityaqi.accdb"

conn.Open

Setrs.ActiveConnection=conn

rs.Open"SELECT*FROMaqi"

Text1.Text=rs.Fields("地區(qū)")

Text2.Text=rs.Fields("aqi")

Text3.Text=rs.Fields("等級(jí)")

′rs.Close

′conn.Close

′Setrs=Nothing

′Setconn=NothingEndSubPrivateSubCommand2_Click()

EndEndSubPrivateSubCommand3_Click()

rs.MoveNext

′移動(dòng)到下一條記錄

IfNotrs.EOFThen

′判斷是否已到記錄集的最后一條記錄

Text1.Text=rs.Fields("地區(qū)")

Text2.Text=rs.Fields("aqi")

Text3.Text=rs.Fields("等級(jí)")

Else

MsgBox("記錄已全部顯示完畢!")

rs.Close

conn.Close

Setrs=Nothing

Setconn=Nothing

EndIfEndSub【典例3】(2017·浙江11月選考)【加試題】由數(shù)組a生成數(shù)組b的方法描述如下:(1)將數(shù)組a中的n個(gè)元素依次分割出若干個(gè)數(shù)據(jù)塊,每個(gè)數(shù)據(jù)塊有m×m個(gè)元素,m最大值為8,最小值為2。分割時(shí),按盡可能大的數(shù)據(jù)塊進(jìn)行分割;(2)對(duì)每個(gè)分割出的數(shù)據(jù)塊用“方陣轉(zhuǎn)換法”進(jìn)行轉(zhuǎn)換,每次轉(zhuǎn)換后得到的數(shù)據(jù)塊依次存儲(chǔ)在數(shù)據(jù)b中;(3)數(shù)組a分割后的剩余元素(個(gè)數(shù)小于4),直接依序存儲(chǔ)到數(shù)組b中。例如n=140時(shí),可依次分割出3個(gè)數(shù)據(jù)塊,元素的個(gè)數(shù)分別為64(8×8)、64(8×8)、9(3×3),剩余元素為3個(gè)?!胺疥囖D(zhuǎn)換法”過(guò)程如下:將數(shù)據(jù)塊中m×m個(gè)元素按行序排列成一個(gè)數(shù)字方陣,從該數(shù)字方陣中按列序得到轉(zhuǎn)換后元素的次序。以3×3數(shù)據(jù)塊為例,轉(zhuǎn)換過(guò)程如圖4-5-7所示:小明依據(jù)上述描述設(shè)計(jì)了如下VB程序。請(qǐng)回答下列問(wèn)題:(1)當(dāng)n=120時(shí),分割出的第3個(gè)數(shù)據(jù)塊元素個(gè)數(shù)為

。

解析:(1)n=120時(shí),可依次分割出3個(gè)數(shù)據(jù)塊,元素的個(gè)數(shù)分別為:64(8×8)、49(7×7)、4(2×2),剩余元素為3個(gè)。因此,第3個(gè)數(shù)據(jù)塊為4個(gè)元素。答案:(1)4(2)請(qǐng)?jiān)趧澗€處填入合適的代碼。Constn=120Dima(1Ton)AsIntegerDimb(1Ton)AsIntegerPrivateSubCommand1_Click()DimmAsInteger,iAsIntegerDimStartAsInteger

′當(dāng)前未分割數(shù)據(jù)的第1個(gè)元素下標(biāo)DimLeftAsInteger

′當(dāng)前未分割數(shù)據(jù)的個(gè)數(shù)DimpaAsInteger

′數(shù)組a的下標(biāo)DimpbAsInteger

′數(shù)組b的下標(biāo)′讀取n個(gè)轉(zhuǎn)換前的數(shù)據(jù),依次存儲(chǔ)到a(1),a(2),……a(n)中,代碼略m=8Start=1Left=nDoWhileLeft>3

IfLeft<m*mThen

m=①

Else

pa=Start

pb=Start

Fori=1Tom*m

b(pb)=a(pa)

pb=pb+1

IfiModm=0Then

Else

pa=pa+m

EndIf

Nexti

Start=Start+m*m

EndIfLoopFori=StartTon

b(i)=a(i)Nexti′依次輸出轉(zhuǎn)換后數(shù)據(jù)b(1)、b(2)、……b(n)中,代碼略EndSub解析:(2)剩余數(shù)量Left<m*m,意味著當(dāng)前剩余數(shù)量不夠分割成數(shù)據(jù)塊m×m,則下一次嘗試分割數(shù)據(jù)塊(m-1)×(m-1),……,因此①處應(yīng)填入的語(yǔ)句為m=m-1。例如Left=90,m=8,首先分割成8×8,Left=90-64=26,不夠分割成8×8,則依次嘗試7×7,6×6,5×5,可分割成5×5,最后剩下一個(gè)元素,直接存儲(chǔ)到數(shù)組b中;下面分析當(dāng)m=5時(shí)轉(zhuǎn)置處理:當(dāng)i=1時(shí),執(zhí)行b(1)=a(1),然后推算出下一個(gè)存入b數(shù)組的元素a[pa],pa=pa+m=6;當(dāng)i=2時(shí),執(zhí)行b(2)=a(6),然后推算出下一個(gè)存入b數(shù)組的元素a[pa],pa=pa+m=11;當(dāng)i=3時(shí),執(zhí)行b(3)=a(11),然后推算出下一個(gè)存入b數(shù)組的元素a[pa],pa=pa+m=16;……當(dāng)i=5時(shí),執(zhí)行b(5)=a(21),此時(shí),imodm=0,則下一個(gè)該存入b數(shù)組的元素是什么呢?即pa=?,很顯然是第2個(gè)數(shù),即pa=Start+1;當(dāng)i=10時(shí),執(zhí)行b(10)=a(22),此時(shí),imodm=0,則下一個(gè)該存入b數(shù)組的元素是什么呢?即pa=?,很顯然是第3個(gè)數(shù),即pa=Start+2;如此繼續(xù),當(dāng)i=15時(shí),pa=start+3,i=20時(shí),pa=Start+4,因此,可得出公式pa=Start+i\m,因此②處應(yīng)填入的語(yǔ)句為pa=Start+i\m。分割之后剩余元素的數(shù)量Left=Left-m*m,則下一個(gè)數(shù)據(jù)塊的頭元素的位置Start為Start+m*m。答案:(2)①m=m-1或m=int(sqr(Left))②pa=Start+i\m或pa=Start+i/m或pa=pa-(m-1)*m+1或pa=Start+(pa-Start+1)modm③Left=Left-m*m【典例4】(2017浙江4月選考)小王編寫(xiě)了一個(gè)依據(jù)成績(jī)計(jì)算名次的VB程序,成績(jī)?yōu)?到100之間的整數(shù)。算法的基本思想:先統(tǒng)計(jì)每個(gè)分?jǐn)?shù)的個(gè)數(shù),然后按照分?jǐn)?shù)從高到低依次計(jì)算每個(gè)有效分?jǐn)?shù)(該分?jǐn)?shù)的個(gè)數(shù)不為0)對(duì)應(yīng)的名次,分?jǐn)?shù)相同時(shí)名次并列。最高分為第1名,該分?jǐn)?shù)的名次與個(gè)數(shù)之和為下一個(gè)有效分?jǐn)?shù)的名次,以此類(lèi)推。程序用數(shù)組A存放每個(gè)分?jǐn)?shù)對(duì)應(yīng)的個(gè)數(shù),數(shù)組B存放每個(gè)分?jǐn)?shù)對(duì)應(yīng)的名次。例如,下表中最高分100有2個(gè),并列第1名,則分?jǐn)?shù)96的名次為分?jǐn)?shù)100的名次加上分?jǐn)?shù)100的個(gè)數(shù),即第3名。分?jǐn)?shù)100999897969594…0個(gè)數(shù)(A數(shù)組)2000103…0名次(B數(shù)組)134…程序運(yùn)行時(shí),學(xué)生數(shù)據(jù)顯示在列表框List1中,單擊“計(jì)算”按鈕Command1,計(jì)算結(jié)果顯示在列表框List2中,程序運(yùn)行界面如圖4-5-8所示。解析:(1)根據(jù)題意和題中表格可知,100分對(duì)應(yīng)的名次為1,96分對(duì)應(yīng)的名次為100分的名次+100分的個(gè)數(shù),即1+2=3。94分對(duì)應(yīng)的名次為96分的名次+96分的個(gè)數(shù),即3+1=4。所以93對(duì)應(yīng)的名次為94分的的名次+94分的個(gè)數(shù),即4+3=7。答案:(1)7

實(shí)現(xiàn)上述功能的VB程序如下,請(qǐng)回答下列問(wèn)題:(1)如表所示,若分?jǐn)?shù)93的個(gè)數(shù)為2,則該分?jǐn)?shù)對(duì)應(yīng)的名次為

。

(2)請(qǐng)?jiān)趧澗€處填入合適的代碼。DimsName(1To50)AsString

′存放學(xué)生姓名DimsScore(1To50)AsInteger

′存放學(xué)生分?jǐn)?shù)DimrecCountAsInteger

′存放學(xué)生人數(shù)PrivateSubForm-Load()

′本過(guò)程從數(shù)據(jù)庫(kù)中讀取學(xué)生數(shù)據(jù),存儲(chǔ)在相應(yīng)的變量中,并在List1中顯示′代碼略EndSub′整數(shù)轉(zhuǎn)換成長(zhǎng)度固定的字符串Functionads(xAsInteger,nAsInteger)AsString

DimsxAsString,nxAsInteger,iAsIntegerFori=1Ton-nx

sx=""+sx

Nexti

EndFunctionPrivateSubCommand1_Click()

DimA(0To100)AsInteger

′存放每個(gè)分?jǐn)?shù)的個(gè)數(shù)

DimB(0To100)AsInteger

′存放每個(gè)分?jǐn)?shù)的名次

DimmcAsInteger,scoreAsInteger,iAsInteger

Fori=0To100

A(i)=0

Nexti

Fori=1TorecCount′計(jì)算每個(gè)分?jǐn)?shù)的個(gè)數(shù)

Nexti

mc=1

Fori=100To0Step-1

′計(jì)算每個(gè)分?jǐn)?shù)的名次

溫馨提示

  • 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)論