vba数据库编程答案.pdf
.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关闭连接对象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将对象初始化conn.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.Connection将连接对象初始化-.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,专业名称:电子技术,专业负责人:刘容强。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 专业,conn,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 CurrentProject.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、在组合框combo1 中选择一课程编号,则对应的课程名称、学分、任课教师、学时分别显示在对应文本框中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 课程.教师编号=教师.教师编号 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 成绩 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=yElseMsgBox 课程编号为空,请重新选择,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 课程.教师编号=教师.教师编号 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 学生.专业编号=专业.专业编号&_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-.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(专业名称)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.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(成绩)End SubPrivate Sub Form_Activate()Command23.Enabled=FalseCommand24.Enabled=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 课程.教师编号=教师.教师编号 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 学生.专业编号=专业.专业编号&_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=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.BOF()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.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(成绩)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(成绩)=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=select*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.Enabled=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*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.Open 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(Combo0.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.-