vba数据库编程复习资料.docx
《vba数据库编程复习资料.docx》由会员分享,可在线阅读,更多相关《vba数据库编程复习资料.docx(19页珍藏版)》请在冰豆网上搜索。
vba数据库编程复习资料
VBA数据库编程技术
实验目的
1、掌握connection对象
2、掌握Recordset对象
3、掌握Command对象
实验题目
9-1connection对象的具体连接方法:
方法1
DimconnAsADODB.Connection'定义对象类型
Setconn=NewADODB.Connection'将对象初始化
conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=E:
/access/vba数据库编程技术/学生成绩管理.mdb"'设置连接字符信息
conn.open'连接对象打开
…………….
conn.Close'关闭连接对象
Setconn=Nothing'将连接对象清空
方法2
DimconnAsADODB.Connection'定义对象类型
Setconn=NewADODB.Connection'将对象初始化
conn.Open"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=E:
/access/vba数据库编程技术/学生成绩管理.mdb;UID=;PWD="
…………….
conn.Close
Setconn=Nothing
方法3
DimconnAsADODB.Connection'定义对象类型
Setconn=NewADODB.Connection'将对象初始化
conn.OpenCurrentProject.Connection'打开当前正在连接的数据
…………….
conn.Close
Setconn=Nothing
9-2在9-1的基础上,打开表单学生信息,利用Recordset对象获取来自“学生成绩管理.mdb”中“学生”数据表的记录,并显示第一条记录。
PrivateSubForm_Load()
DimconnAsADODB.Connection'定义连接对象类型
DimrsAsADODB.Recordset'定义记录集对象类型
Setrs=NewADODB.Recordset'将记录集对象初始化
Setconn=NewADODB.Connection'将连接对象初始化
conn.Open"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=E:
/access/vba数据库编程技术/学生成绩管理.mdb;"
rs.Open"select*from学生",conn,adOpenKeyset,adLockReadOnly
rs.MoveFirst
Text0.Value=rs("姓名")
Text2.Value=rs("学号")
Text4.Value=rs("性别")
conn.Close
Setconn=Nothing
EndSub
9-3打开表单增加专业,单击增加按钮增加一条关于专业的的新记录:
专业编号:
p07,专业名称:
电子技术,专业负责人:
刘容强。
PrivateSubCommand0_Click()
DimconnAsADODB.Connection'定义连接对象类型
DimrsAsADODB.Recordset'定义记录集对象类型
Setrs=NewADODB.Recordset'将记录集对象初始化
Setconn=NewADODB.Connection'将连接对象初始化
conn.Open"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=E:
/access/vba数据库编程技术/学生成绩管理.mdb;"
rs.Open"select*from专业",conn,adOpenKeyset,adLockOptimistic
rs.AddNew
rs("专业编号")="P07"
rs("专业名称")="电子技术"
rs("专业负责人")="刘容强"
rs.Update
MsgBox"已完成新记录的添加",0+32,"提示"
conn.Close
Setconn=Nothing
EndSub
9-5新建一个过程a,将“专业”数据表中专业名称为“公共基础教学”的专业负责人姓名改为“郑智强”。
PublicSuba()
DimconnAsADODB.Connection'定义对象类型
Setconn=NewADODB.Connection'将对象初始化
conn.OpenCurrentProject.Connection'打开当前正在连接的数据
DimcommAsADODB.Command
Setcomm=NewADODB.Command
comm.ActiveConnection=conn
comm.CommandText="update专业set专业负责人='郑智强'where专业名称='公共基础教学'"
comm.Execute
MsgBox"已完成修改",0+32,"提示"
conn.Close
Setconn=Nothing
Setcomm=Nothing
EndSub
9-6打开“学生成绩管理.mdb”,设计课程成绩统计窗体,运行界面如图9-5所示,要求实现:
1、在组合框combo1中选择一课程编号,则对应的课程名称、学分、任课教师、学时分别显示在对应文本框中
2、单击“统计按钮”,则在对应文本框中显示指定课程的所有参考学生人数、课程平均分、60分以上人数和不及格人数。
3、若未指定具体课程编号就单击“统计”按钮,则显示提示信息。
OptionCompareDatabase
PrivateSubCombo0_Change()
DimrsAsADODB.Recordset
Setrs=NewADODB.Recordset
DimsqlstrAsString
sqlstr="select课程名称,学时,学分,姓名from课程,教师where课程.教师编号=教师.教师编号and课程编号='"&Combo0&"'"
rs.Opensqlstr,CurrentProject.Connection,2,2
IfNotrs.EOF()Then
Text4=rs("课程名称")
Text6=rs("学分")
Text8=rs("姓名")
Text10=rs("学时")
EndIf
rs.Close
Setrs=Nothing
EndSub
PrivateSubCommand12_Click()
DimrsAsADODB.Recordset
Setrs=NewADODB.Recordset
DimsqlstrAsString
sqlstr="select*from成绩where课程编号='"&Combo0&"'"
rs.Opensqlstr,CurrentProject.Connection,2,2
IfNotrs.BOF()OrNotrs.EOF()Then
sum=0
n=0
x=0
y=0
DoWhileNotrs.EOF()
sum=sum+rs("成绩")
n=n+1
Ifrs("成绩")>=60Then
x=x+1
Else
y=y+1
EndIf
rs.MoveNext
Loop
aver=sum/n
Text15.Value=n
Text17.Value=Int(aver*100+0.5)/100
Text19.Value=x
Text21.Value=y
Else
MsgBox"课程编号为空,请重新选择",0+16,"提示"
EndIf
rs.Close
Setrs=Nothing
EndSub
9-7打开“学生成绩管理.mdb”,设计按课程查阅学生成绩窗体,运行界面如图9-7所示,要求实现如下:
PublicrsAsADODB.Recordset
PrivateSubCombo0_Change()
DimrsAsADODB.Recordset
Setrs=NewADODB.Recordset
DimsqlstrAsString
sqlstr="select课程名称,学时,学分,姓名from课程,教师where课程.教师编号=教师.教师编号and课程编号='"&Combo0&"'"
rs.Opensqlstr,CurrentProject.Connection,2,2
IfNotrs.EOF()Then
Text4=rs("课程名称")
Text6=rs("学分")
Text8=rs("姓名")
Text10=rs("学时")
EndIf
rs.Close
Setrs=Nothing
EndSub
PrivateSubCommand12_Click()
Setrs=NewADODB.Recordset
DimsqlstrAsString
sqlstr="select学生.学号,姓名,专业名称,成绩from学生,专业,成绩where学生.专业编号=专业.专业编号"&_
"and成绩.学号=学生.学号and成绩.课程编号='"&Combo0.Value&"'"
rs.Opensqlstr,CurrentProject.Connection,2,2
IfNotrs.BOF()OrNotrs.EOF()Then
Text15.Value=rs("学号")
Text17.Value=rs("姓名")
Text19.Value=rs("专业名称")
Text21.Value=rs("成绩")
Command23.Enabled=True
Command24.Enabled=True
Command25.Enabled=True
Command26.Enabled=True
Else
MsgBox"课程号为空,请重新指定课程编号",0+16,"提示"
EndIf
EndSub
PrivateSubCommand23_Click()
rs.MoveFirst
Text15.Value=rs("学号")
Text17.Value=rs("姓名")
Text19.Value=rs("专业名称")
Text21.Value=rs("成绩")
EndSub
PrivateSubCommand24_Click()
rs.MovePrevious
IfNotrs.BOF()Then
Text15.Value=rs("学号")
Text17.Value=rs("姓名")
Text19.Value=rs("专业名称")
Text21.Value=rs("成绩")
Else
rs.MoveNext
Text15.Value=rs("学号")
Text17.Value=rs("姓名")
Text19.Value=rs("专业名称")
Text21.Value=rs("成绩")
MsgBox"已经是首记录",0+64,"提示"
EndIf
EndSub
PrivateSubCommand25_Click()
rs.MoveNext
IfNotrs.EOF()Then
Text15.Value=rs("学号")
Text17.Value=rs("姓名")
Text19.Value=rs("专业名称")
Text21.Value=rs("成绩")
Else
rs.MovePrevious
Text15.Value=rs("学号")
Text17.Value=rs("姓名")
Text19.Value=rs("专业名称")
Text21.Value=rs("成绩")
MsgBox"已经是未记录",0+64,"提示"
EndIf
EndSub
PrivateSubCommand26_Click()
rs.MoveLast
Text15.Value=rs("学号")
Text17.Value=rs("姓名")
Text19.Value=rs("专业名称")
Text21.Value=rs("成绩")
EndSub
PrivateSubForm_Activate()
Command23.Enabled=False
Command24.Enabled=False
Command25.Enabled=False
Command26.Enabled=False
EndSub
9-8在例9-7基础上,增加“更新”、“删除”、“新增”和“结束”4个命令按钮,运行界面如下图所示:
PublicrsAsADODB.Recordset
PrivateSubCombo0_Change()
DimrsAsADODB.Recordset
Setrs=NewADODB.Recordset
DimsqlstrAsString
sqlstr="select课程名称,学时,学分,姓名from课程,教师where课程.教师编号=教师.教师编号and课程编号='"&Combo0&"'"
rs.Opensqlstr,CurrentProject.Connection,2,2
IfNotrs.EOF()Then
Text4=rs("课程名称")
Text6=rs("学分")
Text8=rs("姓名")
Text10=rs("学时")
EndIf
rs.Close
Setrs=Nothing
EndSub
PrivateSubCommand12_Click()
Setrs=NewADODB.Recordset
DimsqlstrAsString
sqlstr="select学生.学号,姓名,专业名称,成绩from学生,专业,成绩where学生.专业编号=专业.专业编号"&_
"and成绩.学号=学生.学号and成绩.课程编号='"&Combo0.Value&"'"
rs.Opensqlstr,CurrentProject.Connection,2,2
IfNotrs.BOF()OrNotrs.EOF()Then
Text15.Value=rs("学号")
Text17.Value=rs("姓名")
Text19.Value=rs("专业名称")
Text21.Value=rs("成绩")
Command23.Enabled=True
Command24.Enabled=True
Command25.Enabled=True
Command26.Enabled=True
Command27.Enabled=True
Command28.Enabled=True
Command29.Enabled=True
Else
MsgBox"课程号为空,请重新指定课程编号",0+16,"提示"
EndIf
EndSub
PrivateSubCommand23_Click()
rs.MoveFirst
Text15.Value=rs("学号")
Text17.Value=rs("姓名")
Text19.Value=rs("专业名称")
Text21.Value=rs("成绩")
EndSub
PrivateSubCommand24_Click()
rs.MovePrevious
IfNotrs.BOF()Then
Text15.Value=rs("学号")
Text17.Value=rs("姓名")
Text19.Value=rs("专业名称")
Text21.Value=rs("成绩")
Else
rs.MoveNext
Text15.Value=rs("学号")
Text17.Value=rs("姓名")
Text19.Value=rs("专业名称")
Text21.Value=rs("成绩")
MsgBox"已经是首记录",0+64,"提示"
EndIf
EndSub
PrivateSubCommand25_Click()
rs.MoveNext
IfNotrs.EOF()Then
Text15.Value=rs("学号")
Text17.Value=rs("姓名")
Text19.Value=rs("专业名称")
Text21.Value=rs("成绩")
Else
rs.MovePrevious
Text15.Value=rs("学号")
Text17.Value=rs("姓名")
Text19.Value=rs("专业名称")
Text21.Value=rs("成绩")
MsgBox"已经是未记录",0+64,"提示"
EndIf
EndSub
PrivateSubCommand26_Click()
rs.MoveLast
Text15.Value=rs("学号")
Text17.Value=rs("姓名")
Text19.Value=rs("专业名称")
Text21.Value=rs("成绩")
EndSub
EndSub
PrivateSubCommand27_Click()
flag=0
yn=MsgBox("确定更新成绩吗?
",1+32,"提问")
Ifyn=1Then
Setrs=NewADODB.Recordset
DimsqlstrAsString
sqlstr="select*from成绩"
rs.Opensqlstr,CurrentProject.Connection,2,2
DoWhileNotrs.EOF()Andflag=0
Ifrs("学号")=Trim(Text15.Value)Andrs("课程编号")=Trim(Combo0.Value)Then
rs("成绩")=Text21.Value
rs.Update
MsgBox"完成成绩更新!
",0+64,"提示"
flag=1
Else
rs.MoveNext
EndIf
Loop
Ifflag=0Then
MsgBox"学号或课程编号有变化,无法进行成绩更新!
",0+16,"提示"
EndIf
rs.Close
Setrs=Nothing
EndIf
EndSub
PrivateSubCommand28_Click()
flag=0
yn=MsgBox("确定删除本记录吗?
",1+32,"提问")
Ifyn=1Then
Setrs=NewADODB.Recordset
DimsqlstrAsString
sqlstr="select*from成绩"
rs.Opensqlstr,CurrentProject.Connection,2,2
DoWhileNotrs.EOF()Andflag=0
Ifrs("学号")=Trim(Text15.Value)Andrs("课程编号")=Trim(Combo0.Value)Then
rs.Delete
rs.Update
MsgBox"已完成删除!
",0+64,"提示"
Text15.Value=""
Text17.Value=""
Text19.Value=""
Text21.Value=""
Command23.Enabled=False
Command24.Enabled=False
Command25.Enabled=False
Command26.Enabled=False
flag=1
Else
rs.MoveNext
EndIf
Loop
Ifflag=0Then
MsgBox"学号或课程编号有变化,无法进行成绩更新!
",0+16,"提示"
EndIf
rs.Close
Setrs=Nothing
EndIf
EndSub
PrivateSubCommand29_Click()
cmark=0
smark=0
yn=MsgBox("确定新增成绩信息吗?
",1+32,"提问")
Ifyn=1Then
Setrs=NewADODB.Recordset
DimsqlstrAsString
sqlstr="select*from成绩where学号='"&Trim(Text15.Value)&"'and课程编号='"&Combo0.Value&"'"
rs.Opensqlstr,CurrentProject.Connection,2,2
IfNotrs.BOF()AndNotrs.EOF()Then
MsgBox"成绩表已有记录,无法再新增",0+64,"提示"
cmark=1
EndIf
rs.Close
Setrs=Nothing
Ifcmark=0Then
Setrs=NewADODB.Recordset
sqlstr="select*from学生where学号='"&Trim(Text15.Value)&"'"
rs.Opensqlstr,CurrentProject.Connection,2,2
IfNotrs.BOF()AndNotrs.EOF()Then
smark=1