2023学年完整公开课版VB访问Access数据库_第1页
2023学年完整公开课版VB访问Access数据库_第2页
2023学年完整公开课版VB访问Access数据库_第3页
2023学年完整公开课版VB访问Access数据库_第4页
2023学年完整公开课版VB访问Access数据库_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第五单元VB访问Access数据库考点与典例考点

VB访问Access数据库1.通过ADO对象连接数据库VB中使用ADO访问数据库。ADO是微软公司提供的一种应用程序访问数据库的编程接口。该接口包含了多个对象,其中Connection对象用于和数据库建立连接,在建立连接后,用Recordset对象查询数据表。●Connection对象用Connection建立和数据库的连接时,需要设置连接字符串ConnectionString的参数。下列语句定义一个Connection对象的实例conn,并设置conn的连接字符串:DimconnAsNewADODB.Connection

conn.ConnectionString="Provider=Microsoft.ACE.OLEDB.12.0;DATASource="&App.Path&"\Contacts.accdb"其中,参数Provider用于指定连接的提供者(Microsoft.ACE.OLEDB.12.0可以访问Access2010数据库),DATASource用于指定数据库的文件名(含绝对路径),App.Path返回当前应用程序所在的绝对路径。Connection对象具有Open、Close等方法,其中Open方法用于建立到数据源的连接,Close方法用于关闭连接。2.通过Recordset对象获取数据表中的数据●Recordset对象 用Recordset对象从数据库中查询记录时,要设置ActiveConnection属性的值。语句Setrs.ActiveConnection=conn,使Recordset对象的实例rs与Connection对象的实例conn建立关联。在与conn建立关联后,可用Recordset对象的Open方法查询数据表的记录。Open方法的参数为SQL命令。如:rs.Open"SELECT*FROMinfo"运行后,记录集rs中的数据为SQL语句"SELECT*FROMinfo"查询到的记录。Recordset对象的Close方法用于关闭对象。Recordset对象的Fields集合用于返回当前记录中的数据,如:rs.Fields("fName")返回当前记录中“fName”字段的值;rs.Fields(0)返回当前记录中第一个字段的值,如果第一个字段名为“fName”,rs.Fields(0)与rs.Fields("fName")返回值相同。Recordset对象的MoveNext方法用于把当前移动到下一条记录。若到结尾处还继续向下移动,程序会出错,因此在使用MoveNext时要判断Recordset的EOF属性,判断是不是到达结尾处。EOF属性取值为“True”或“False”。3.Select语句Select语句是结构化查询语言SQL中最常见的语句,主要用于从数据表中查询数据,如语句“SELECT*FROMinfo”表示查询数据表“info”中的全部数据。【典例1】将Access数据表中的第一条记录在VB文本框中显示。(1)准备Access数据库。在文件夹“VB访问Access数据库”下的“test41”文件夹中存有数据库文件“cityaqi.accdb”,其“AQI”表的结构与部分数据分别如图4-5-1与图4-5-2所示:(2)建立VB工程、选择ADO引用。新建VB工程,将窗体与工程分别以“test41.frm”与“test41.vbp”为名保存于“test41”文件夹中,打开“工程”菜单,单击“引用”项,在弹出的对话框中勾选“MicrosoftActiveXDataObjects6.0Library”引用项,如图4-5-3所示:(3)在标签框中显示数据表中的数据。建立如图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("地区")

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(即“下一条”按钮),增加和修改相关代码实现:单击“下一条”按钮时,在文本框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("地区")

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("地区")

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

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

Else

MsgBox("记录已全部显示完毕!")

rs.Close

conn.Close

Setrs=Nothing

Setconn=Nothing

EndIfEndSub【典例3】(2017·浙江11月选考)【加试题】由数组a生成数组b的方法描述如下:(1)将数组a中的n个元素依次分割出若干个数据块,每个数据块有m×m个元素,m最大值为8,最小值为2。分割时,按尽可能大的数据块进行分割;(2)对每个分割出的数据块用“方阵转换法”进行转换,每次转换后得到的数据块依次存储在数据b中;(3)数组a分割后的剩余元素(个数小于4),直接依序存储到数组b中。例如n=140时,可依次分割出3个数据块,元素的个数分别为64(8×8)、64(8×8)、9(3×3),剩余元素为3个。“方阵转换法”过程如下:将数据块中m×m个元素按行序排列成一个数字方阵,从该数字方阵中按列序得到转换后元素的次序。以3×3数据块为例,转换过程如图4-5-7所示:小明依据上述描述设计了如下VB程序。请回答下列问题:(1)当n=120时,分割出的第3个数据块元素个数为

解析:(1)n=120时,可依次分割出3个数据块,元素的个数分别为:64(8×8)、49(7×7)、4(2×2),剩余元素为3个。因此,第3个数据块为4个元素。答案:(1)4(2)请在划线处填入合适的代码。Constn=120Dima(1Ton)AsIntegerDimb(1Ton)AsIntegerPrivateSubCommand1_Click()DimmAsInteger,iAsIntegerDimStartAsInteger

′当前未分割数据的第1个元素下标DimLeftAsInteger

′当前未分割数据的个数DimpaAsInteger

′数组a的下标DimpbAsInteger

′数组b的下标′读取n个转换前的数据,依次存储到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′依次输出转换后数据b(1)、b(2)、……b(n)中,代码略EndSub解析:(2)剩余数量Left<m*m,意味着当前剩余数量不够分割成数据块m×m,则下一次尝试分割数据块(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,最后剩下一个元素,直接存储到数组b中;下面分析当m=5时转置处理:当i=1时,执行b(1)=a(1),然后推算出下一个存入b数组的元素a[pa],pa=pa+m=6;当i=2时,执行b(2)=a(6),然后推算出下一个存入b数组的元素a[pa],pa=pa+m=11;当i=3时,执行b(3)=a(11),然后推算出下一个存入b数组的元素a[pa],pa=pa+m=16;……当i=5时,执行b(5)=a(21),此时,imodm=0,则下一个该存入b数组的元素是什么呢?即pa=?,很显然是第2个数,即pa=Start+1;当i=10时,执行b(10)=a(22),此时,imodm=0,则下一个该存入b数组的元素是什么呢?即pa=?,很显然是第3个数,即pa=Start+2;如此继续,当i=15时,pa=start+3,i=20时,pa=Start+4,因此,可得出公式pa=Start+i\m,因此②处应填入的语句为pa=Start+i\m。分割之后剩余元素的数量Left=Left-m*m,则下一个数据块的头元素的位置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月选考)小王编写了一个依据成绩计算名次的VB程序,成绩为0到100之间的整数。算法的基本思想:先统计每个分数的个数,然后按照分数从高到低依次计算每个有效分数(该分数的个数不为0)对应的名次,分数相同时名次并列。最高分为第1名,该分数的名次与个数之和为下一个有效分数的名次,以此类推。程序用数组A存放每个分数对应的个数,数组B存放每个分数对应的名次。例如,下表中最高分100有2个,并列第1名,则分数96的名次为分数100的名次加上分数100的个数,即第3名。分数100999897969594…0个数(A数组)2000103…0名次(B数组)134…程序运行时,学生数据显示在列表框List1中,单击“计算”按钮Command1,计算结果显示在列表框List2中,程序运行界面如图4-5-8所示。解析:(1)根据题意和题中表格可知,100分对应的名次为1,96分对应的名次为100分的名次+100分的个数,即1+2=3。94分对应的名次为96分的名次+96分的个数,即3+1=4。所以93对应的名次为94分的的名次+94分的个数,即4+3=7。答案:(1)7

实现上述功能的VB程序如下,请回答下列问题:(1)如表所示,若分数93的个数为2,则该分数对应的名次为

(2)请在划线处填入合适的代码。DimsName(1To50)AsString

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

′存放学生分数DimrecCountAsInteger

′存放学生人数PrivateSubForm-Load()

′本过程从数据库中读取学生数据,存储在相应的变量中,并在List1中显示′代码略EndSub′整数转换成长度固定的字符串Functionads(xAsInteger,nAsInteger)AsString

DimsxAsString,nxAsInteger,iAsIntegerFori=1Ton-nx

sx=""+sx

Nexti

EndFunctionPrivateSubCommand1_Click()

DimA(0To100)AsInteger

′存放每个分数的个数

DimB(0To100)AsInteger

′存放每个分数的名次

DimmcAsInteger,scoreAsInteger,iAsInteger

Fori=0To100

A(i)=0

Nexti

Fori=1TorecCount′计算每个分数的个数

Nexti

mc=1

Fori=100To0Step-1

′计算每个分数的名次

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论