2023學年完整公開課版VB訪問Access數(shù)據(jù)庫_第1頁
2023學年完整公開課版VB訪問Access數(shù)據(jù)庫_第2頁
2023學年完整公開課版VB訪問Access數(shù)據(jù)庫_第3頁
2023學年完整公開課版VB訪問Access數(shù)據(jù)庫_第4頁
2023學年完整公開課版VB訪問Access數(shù)據(jù)庫_第5頁
已閱讀5頁,還剩25頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第五單元VB訪問Access數(shù)據(jù)庫考點與典例考點

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

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

rs.Close

conn.Close

Setrs=Nothing

Setconn=NothingEndSubPrivateSubCommand2_Click()

EndEndSub(4)運行程序。單擊“顯示”按鈕,結果如圖4-5-5所示:【典例2】在典例1的基礎上,添加一個按鈕對象Command3(即“下一條”按鈕),增加和修改相關代碼實現(xiàn):單擊“下一條”按鈕時,在文本框Text1和Text2顯示下一條記錄,顯示完最后一條記錄時提示“記錄已全部顯示完!”。程序運行界面如圖4-5-6所示:(1)添加按鈕對象Command3,將Caption屬性的值修改為“下一條”。(2)命令按鈕“顯示”(Command1)和“下一條”(Command3)的事件處理過程代碼如下: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("等級")

′rs.Close

′conn.Close

′Setrs=Nothing

′Setconn=NothingEndSubPrivateSubCommand2_Click()

EndEndSubPrivateSubCommand3_Click()

rs.MoveNext

′移動到下一條記錄

IfNotrs.EOFThen

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

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

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

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

Else

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

rs.Close

conn.Close

Setrs=Nothing

Setconn=Nothing

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

。

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

′當前未分割數(shù)據(jù)的第1個元素下標DimLeftAsInteger

′當前未分割數(shù)據(jù)的個數(shù)DimpaAsInteger

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

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

實現(xiàn)上述功能的VB程序如下,請回答下列問題:(1)如表所示,若分數(shù)93的個數(shù)為2,則該分數(shù)對應的名次為

(2)請在劃線處填入合適的代碼。DimsName(1To50)AsString

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

′存放學生分數(shù)DimrecCountAsInteger

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

′本過程從數(shù)據(jù)庫中讀取學生數(shù)據(jù),存儲在相應的變量中,并在List1中顯示′代碼略EndSub′整數(shù)轉換成長度固定的字符串Functionads(xAsInteger,nAsInteger)AsString

DimsxAsString,nxAsInteger,iAsIntegerFori=1Ton-nx

sx=""+sx

Nexti

EndFunctionPrivateSubCommand1_Click()

DimA(0To100)AsInteger

′存放每個分數(shù)的個數(shù)

DimB(0To100)AsInteger

′存放每個分數(shù)的名次

DimmcAsInteger,scoreAsInteger,iAsInteger

Fori=0To100

A(i)=0

Nexti

Fori=1TorecCount′計算每個分數(shù)的個數(shù)

Nexti

mc=1

Fori=100To0Step-1

′計算每個分數(shù)的名次

溫馨提示

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

評論

0/150

提交評論