《vba数据库编程答案.pdf》由会员分享,可在线阅读,更多相关《vba数据库编程答案.pdf(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、.VBA 数据库编程技术实验目的1、掌握 connection 对象2、掌握 Recordset 对象3、掌握 Command 对象实验题目9-1 connection 对象的具体连接方法:方法 1Dim conn As ADODB.Connection定义对象类型Set conn=New ADODB.Connection将对象初始化conn.ConnectionString=Provider=Microsoft.Jet.OLEDB.4.0;DataSource=E:/access/vba 数据库编程技术/学生成绩管理.mdb设置连接字符信息conn.open连接对象打开.conn.Close
2、关闭连接对象Set conn=Nothing将连接对象清空方法 2Dim conn As ADODB.Connection定义对象类型Set conn=New ADODB.Connection将对象初始化conn.OpenProvider=Microsoft.Jet.OLEDB.4.0;DataSource=E:/access/vba 数据库编程技术/学生成绩管理.mdb;UID=;PWD=-.conn.CloseSet conn=Nothing方法 3Dim conn As ADODB.Connection定义对象类型Set conn=New ADODB.Connection将对象初始化co
3、nn.Open CurrentProject.Connection打开当前正在连接的数据.conn.CloseSet conn=Nothing9-2 在 9-1 的基础上,打开表单学生信息,利用 Recordset 对象获取来自“学生成绩管理.mdb”中“学生”数据表的记录,并显示第一条记录。Private Sub Form_Load()Dim conn As ADODB.Connection定义连接对象类型Dim rs As ADODB.Recordset定义记录集对象类型Set rs=New ADODB.Recordset将记录集对象初始化Set conn=New ADODB.Connec
4、tion将连接对象初始化-.conn.Open Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:/access/vba数据库编程技术/学生成绩管理.mdb;rs.Open select*from 学生,conn,adOpenKeyset,adLockReadOnlyrs.MoveFirstText0.Value=rs(姓名)Text2.Value=rs(学号)Text4.Value=rs(性别)conn.CloseSet conn=NothingEnd Sub9-3 打开表单增加专业,单击增加按钮增加一条关于专业的的新记录:专业编号:p07,专业名
5、称:电子技术,专业负责人:刘容强。Private Sub Command0_Click()Dim conn As ADODB.Connection定义连接对象类型Dim rs As ADODB.Recordset定义记录集对象类型Set rs=New ADODB.Recordset将记录集对象初始化Set conn=New ADODB.Connection将连接对象初始化-.conn.Open Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:/access/vba数据库编程技术/学生成绩管理.mdb;rs.Open select*from 专业,c
6、onn,adOpenKeyset,adLockOptimisticrs.AddNewrs(专业编号)=P07rs(专业名称)=电子技术rs(专业负责人)=刘容强rs.UpdateMsgBox 已完成新记录的添加,0+32,提示conn.CloseSet conn=NothingEnd Sub9-5 新建一个过程 a,将“专业”数据表中专业名称为“公共基础教学”的专业负责人姓名改为“郑智强”。Public Sub a()Dim conn As ADODB.Connection定义对象类型Set conn=New ADODB.Connection将对象初始化conn.Open CurrentPro
7、ject.Connection打开当前正在连接的数据Dim comm As ADODB.CommandSet comm=New ADODB.Commandcomm.ActiveConnection=conn-.comm.CommandText=update 专业 set 专业负责人=郑智强 where 专业名称=公共基础教学comm.ExecuteMsgBox 已完成修改,0+32,提示conn.CloseSet conn=NothingSet comm=NothingEnd Sub9-6 打开“学生成绩管理.mdb”,设计课程成绩统计窗体,运行界面如图9-5 所示,要求实现:1、在组合框co
8、mbo1 中选择一课程编号,则对应的课程名称、学分、任课教师、学时分别显示在对应文本框中2、单击“统计按钮”,则在对应文本框中显示指定课程的所有参考学生人数、课程平均分、60 分以上人数和不及格人数。3、若未指定具体课程编号就单击“统计”按钮,则显示提示信息。Option Compare DatabasePrivate Sub Combo0_Change()Dim rs As ADODB.RecordsetSet rs=New ADODB.RecordsetDim sqlstr As String-.sqlstr=select 课程名称,学时,学分,姓名 from 课程,教师 where 课程
9、.教师编号=教师.教师编号 and 课程编号=&Combo0&rs.Open sqlstr,CurrentProject.Connection,2,2If Not rs.EOF()ThenText4=rs(课程名称)Text6=rs(学分)Text8=rs(姓名)Text10=rs(学时)End Ifrs.CloseSet rs=NothingEnd SubPrivate Sub Command12_Click()Dim rs As ADODB.RecordsetSet rs=New ADODB.RecordsetDim sqlstr As Stringsqlstr=select*from 成
10、绩 where 课程编号=&Combo0&rs.Open sqlstr,CurrentProject.Connection,2,2If Not rs.BOF()Or Not rs.EOF()Thensum=0n=0 x=0-.y=0Do While Not rs.EOF()sum=sum+rs(成绩)n=n+1If rs(成绩)=60 Thenx=x+1Elsey=y+1End Ifrs.MoveNextLoopaver=sum/nText15.Value=nText17.Value=Int(aver*100+0.5)/100Text19.Value=xText21.Value=yElseMs
11、gBox 课程编号为空,请重新选择,0+16,提示End Ifrs.CloseSet rs=NothingEnd Sub-.9-7打开“学生成绩管理.mdb”,设计按课程查阅学生成绩窗体,运行界面如图 9-7 所示,要求实现如下:Public rs As ADODB.RecordsetPrivate Sub Combo0_Change()Dim rs As ADODB.RecordsetSet rs=New ADODB.RecordsetDim sqlstr As Stringsqlstr=select 课程名称,学时,学分,姓名 from 课程,教师 where 课程.教师编号=教师.教师编
12、号 and 课程编号=&Combo0&rs.Open sqlstr,CurrentProject.Connection,2,2If Not rs.EOF()ThenText4=rs(课程名称)Text6=rs(学分)Text8=rs(姓名)-.Text10=rs(学时)End Ifrs.CloseSet rs=NothingEnd SubPrivate Sub Command12_Click()Set rs=New ADODB.RecordsetDim sqlstr As Stringsqlstr=select 学生.学号,姓名,专业名称,成绩 from 学生,专业,成绩 where 学生.专
13、业编号=专业.专业编号&_and 成绩.学号=学生.学号 and 成绩.课程编号=&Combo0.Value&rs.Open sqlstr,CurrentProject.Connection,2,2If Not rs.BOF()Or Not rs.EOF()ThenText15.Value=rs(学号)Text17.Value=rs(姓名)Text19.Value=rs(专业名称)Text21.Value=rs(成绩)Command23.Enabled=TrueCommand24.Enabled=TrueCommand25.Enabled=TrueCommand26.Enabled=True-
14、.ElseMsgBox 课程号为空,请重新指定课程编号,0+16,提示End IfEnd SubPrivate Sub Command23_Click()rs.MoveFirstText15.Value=rs(学号)Text17.Value=rs(姓名)Text19.Value=rs(专业名称)Text21.Value=rs(成绩)End SubPrivate Sub Command24_Click()rs.MovePreviousIf Not rs.BOF()ThenText15.Value=rs(学号)Text17.Value=rs(姓名)Text19.Value=rs(专业名称)Text
15、21.Value=rs(成绩)Elsers.MoveNextText15.Value=rs(学号)-.Text17.Value=rs(姓名)Text19.Value=rs(专业名称)Text21.Value=rs(成绩)MsgBox 已经是首记录,0+64,提示End IfEnd SubPrivate Sub Command25_Click()rs.MoveNextIf Not rs.EOF()ThenText15.Value=rs(学号)Text17.Value=rs(姓名)Text19.Value=rs(专业名称)Text21.Value=rs(成绩)Elsers.MovePrevious
16、Text15.Value=rs(学号)Text17.Value=rs(姓名)Text19.Value=rs(专业名称)Text21.Value=rs(成绩)MsgBox 已经是未记录,0+64,提示End IfEnd Sub-.Private Sub Command26_Click()rs.MoveLastText15.Value=rs(学号)Text17.Value=rs(姓名)Text19.Value=rs(专业名称)Text21.Value=rs(成绩)End SubPrivate Sub Form_Activate()Command23.Enabled=FalseCommand24.E
17、nabled=FalseCommand25.Enabled=FalseCommand26.Enabled=FalseEnd Sub9-8在例 9-7 基础上,增加“更新”、“删除”、“新增”和“结束”4 个命令按钮,运行界面如下图所示:-.Public rs As ADODB.RecordsetPrivate Sub Combo0_Change()Dim rs As ADODB.RecordsetSet rs=New ADODB.RecordsetDim sqlstr As Stringsqlstr=select 课程名称,学时,学分,姓名 from 课程,教师 where 课程.教师编号=教
18、师.教师编号 and 课程编号=&Combo0&rs.Open sqlstr,CurrentProject.Connection,2,2If Not rs.EOF()ThenText4=rs(课程名称)Text6=rs(学分)Text8=rs(姓名)Text10=rs(学时)End Ifrs.Close-.Set rs=NothingEnd SubPrivate Sub Command12_Click()Set rs=New ADODB.RecordsetDim sqlstr As Stringsqlstr=select 学生.学号,姓名,专业名称,成绩 from 学生,专业,成绩 where
19、 学生.专业编号=专业.专业编号&_and 成绩.学号=学生.学号 and 成绩.课程编号=&Combo0.Value&rs.Open sqlstr,CurrentProject.Connection,2,2If Not rs.BOF()Or Not rs.EOF()ThenText15.Value=rs(学号)Text17.Value=rs(姓名)Text19.Value=rs(专业名称)Text21.Value=rs(成绩)Command23.Enabled=TrueCommand24.Enabled=TrueCommand25.Enabled=TrueCommand26.Enabled=
20、TrueCommand27.Enabled=TrueCommand28.Enabled=TrueCommand29.Enabled=True-.ElseMsgBox 课程号为空,请重新指定课程编号,0+16,提示End IfEnd SubPrivate Sub Command23_Click()rs.MoveFirstText15.Value=rs(学号)Text17.Value=rs(姓名)Text19.Value=rs(专业名称)Text21.Value=rs(成绩)End SubPrivate Sub Command24_Click()rs.MovePreviousIf Not rs.B
21、OF()ThenText15.Value=rs(学号)Text17.Value=rs(姓名)Text19.Value=rs(专业名称)Text21.Value=rs(成绩)Elsers.MoveNextText15.Value=rs(学号)-.Text17.Value=rs(姓名)Text19.Value=rs(专业名称)Text21.Value=rs(成绩)MsgBox 已经是首记录,0+64,提示End IfEnd SubPrivate Sub Command25_Click()rs.MoveNextIf Not rs.EOF()ThenText15.Value=rs(学号)Text17.
22、Value=rs(姓名)Text19.Value=rs(专业名称)Text21.Value=rs(成绩)Elsers.MovePreviousText15.Value=rs(学号)Text17.Value=rs(姓名)Text19.Value=rs(专业名称)Text21.Value=rs(成绩)MsgBox 已经是未记录,0+64,提示End IfEnd Sub-.Private Sub Command26_Click()rs.MoveLastText15.Value=rs(学号)Text17.Value=rs(姓名)Text19.Value=rs(专业名称)Text21.Value=rs(
23、成绩)End SubEnd SubPrivate Sub Command27_Click()flag=0yn=MsgBox(确定更新成绩吗?,1+32,提问)If yn=1 ThenSet rs=New ADODB.RecordsetDim sqlstr As Stringsqlstr=select*from 成绩rs.Open sqlstr,CurrentProject.Connection,2,2Do While Not rs.EOF()And flag=0If rs(学号)=Trim(Text15.Value)And rs(课程编号)=Trim(Combo0.Value)Thenrs(成
24、绩)=Text21.Valuers.Update-.MsgBox 完成成绩更新!,0+64,提示flag=1Elsers.MoveNextEnd IfLoopIf flag=0 ThenMsgBox 学号或课程编号有变化,无法进行成绩更新!,0+16,提示End Ifrs.CloseSet rs=NothingEnd IfEnd SubPrivate Sub Command28_Click()flag=0yn=MsgBox(确定删除本记录吗?,1+32,提问)If yn=1 ThenSet rs=New ADODB.RecordsetDim sqlstr As Stringsqlstr=sel
25、ect*from 成绩rs.Open sqlstr,CurrentProject.Connection,2,2-.Do While Not rs.EOF()And flag=0If rs(学号)=Trim(Text15.Value)And rs(课程编号)=Trim(Combo0.Value)Thenrs.Deleters.UpdateMsgBox 已完成删除!,0+64,提示Text15.Value=Text17.Value=Text19.Value=Text21.Value=Command23.Enabled=FalseCommand24.Enabled=FalseCommand25.En
26、abled=FalseCommand26.Enabled=Falseflag=1Elsers.MoveNextEnd IfLoopIf flag=0 ThenMsgBox 学号或课程编号有变化,无法进行成绩更新!,0+16,提示End Ifrs.Close-.Set rs=NothingEnd IfEnd SubPrivate Sub Command29_Click()cmark=0smark=0yn=MsgBox(确定新增成绩信息吗?,1+32,提问)If yn=1 ThenSet rs=New ADODB.RecordsetDim sqlstr As Stringsqlstr=select
27、*from 成绩 where 学号=&Trim(Text15.Value)&and课程编号=&Combo0.Value&rs.Open sqlstr,CurrentProject.Connection,2,2If Not rs.BOF()And Not rs.EOF()ThenMsgBox 成绩表已有记录,无法再新增,0+64,提示cmark=1End Ifrs.CloseSet rs=NothingIf cmark=0 ThenSet rs=New ADODB.Recordset-.sqlstr=select*from 学生 where 学号=&Trim(Text15.Value)&rs.O
28、pen sqlstr,CurrentProject.Connection,2,2If Not rs.BOF()And Not rs.EOF()Thensmark=1ElseMsgBox 新增学号不存在,无法新增,0+64,提示End Ifrs.CloseSet rs=NothingIf smark=1 ThenSet rs=New ADODB.Recordsetsqlstr=select*from 成绩rs.Open sqlstr,CurrentProject.Connection,2,2rs.AddNewrs(学号)=Trim(Text15.Value)rs(课程编号)=Trim(Combo
29、0.Value)rs(成绩)=Text21.Valuers.UpdateMsgBox 完成新增操作,0+64,提示rs.CloseSet rs=NothingText15.Value=-Text17.Value=Text19.Value=Text21.Value=Command23.Enabled=FalseCommand24.Enabled=FalseCommand25.Enabled=FalseCommand26.Enabled=FalseEnd IfEnd IfEnd IfEnd SubPrivate Sub Form_Activate()Command23.Enabled=FalseCommand24.Enabled=FalseCommand25.Enabled=FalseCommand26.Enabled=FalseCommand27.Enabled=FalseCommand28.Enabled=FalseCommand29.Enabled=FalseEnd Sub.-