学生信息管理系统论文
精品资料.为你而备
毕 业 论 文
题 目 学 生 信 息 管 理 系 统
院系名称: 信 息 工 程 系 专业班级: 计 算 机 网 络 技 术 学生姓名: 学 号: 指导教师:
20 年 月 日
精品资料.为你而备
摘 要
使用本系统进行学生信息的管理,其中包括有系统用户的管理,院系管理,专业管理,学生信息管理,教学计划管理,以及学生成绩的管理。系统用户管理是管理用户信息的添加、修改、删除和查询功能;院系管理是管理院系信息的添加、修改、删除和查询功能;专业管理是管理专业信息的添加、修改、删除和查询功能;学生信息管理是管理学生信息的添加、修改、删除和查询功能;教学计划管理是管理教学计划的添加、修改、删除和查询功能;学生成绩管理是管理学生成绩信息的添加、修改、删除和查询功能。
关键字 学生信息 管理 窗体
精品资料.为你而备
目 录
1 引言„„„„„„„„„„„„„„„„„„„„„„„„„„„„1 1.1 项目开发计划阶段„„„„„„„„„„„„„„„„„„„„„1 1.2 开发阶段„„„„„„„„„„„„„„„„„„„„„„„„„1 2 学生信息管理系统简介„„„„„„„„„„„„„„„„„„„„3 3 系统功能分析„„„„„„„„„„„„„„„„„„„„„„„„5 4 系统数据库设计„„„„„„„„„„„„„„„„„„„„„„„6 4.1 定义数据字典„„„„„„„„„„„„„„„„„„„„„„„6 4.2 定义数据库结构„„„„„„„„„„„„„„„„„„„„„„6 5 系统应用程序设计„„„„„„„„„„„„„„„„„„„„„„9 5.1 新建工程„„„„„„„„„„„„„„„„„„„„„„„„„9 5.2 窗体设计„„„„„„„„„„„„„„„„„„„„„„„„„9 结束语„„„„„„„„„„„„„„„„„„„„„„„„„„„„49 致谢„„„„„„„„„„„„„„„„„„„„„„„„„„„„„50 参考文献„„„„„„„„„„„„„„„„„„„„„„„„„„„51 附录„„„„„„„„„„„„„„„„„„„„„„„„„„„„„52
精品资料.为你而备
1 引言
目前,随着高等院校办学规模的不断扩大,学生人数的逐年增长,学校对学生的信息管理工作也变得越来越繁重。为此,很大大中专院校都开发或购买了学生信息管理系统,用于对学校学生的基本信息、课程设置信息、成绩信息等进行计算机管理。从而方便快捷的对学生信息进行管理,保证了学校管理的正常并有效的进行着,不会因学生信息繁多,不好管理而影响学校的学生扩招计划。从而使学校快速持续稳定的发展着。
本系统分为六个功能模块即系统用户管理模块、院系管理模块、专业管理模块、学生信息管理模块、教学计划管理模块和学生成绩管理模块。每个模块实现不同的功能:系统用户管理模块是对用户信息的添加、修改、删除和查询功能的实现;院系管理模块是对院系信息的添加、修改、删除和查询功能的实现;专业管理模块是对专业信息的添加、修改、删除和查询功能的实现;学生信息管理模块是对学生信息的添加、修改、删除和查询功能的实现;教学计划管理模块是对教学计划的添加、修改、删除和查询功能的实现;学生成绩管理模块是对学生成绩信息的添加、修改、删除和查询功能的实现。
1.1 项目开发计划阶段
这个时期的主要任务是分析用户需求,分析软件系统所追求的目标,分析开发该系统的可行性。经过了解大致可以分为以下两个阶段。
(1) 问题定义阶段
收集、分析、理解、确定用户的要求,在与用户进行全面讨论的基础上共同拟定“软件系统目标与范围说明书”。
(2) 可行性研究阶段
确立对问题定义阶段确实的问题是否有可行的解决
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
,并对各种可能方案做出成本和效益分析,系统分析员据此提出“可行性论证
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
”,作为确定是否继续进行这项工程的依据。
1.2 开发阶段
这个时期包括设计和实现两个任务。其中设计任务又分为需求分析和系统设计两个阶段,实现任务包括编程和测试两个阶段。
(1) 需求分析阶段
确定用户对软件系统的全部需求,并以“需求说明书”的形式
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
达,其目的是明确该软件项目是用来“做什么”的。
需求分析是整个开发任务的开始,也是最重困难、最耗时的一步。作为基础的需求分析是否做得充分与准确,直接决定了构建数据库与应用系统的速度和质量。需求分析做得不好,有时甚至会导致整个系统作废。
精品资料.为你而备
(2)系统设计阶段
设计软件系统的模块层次结构,设计模块的控制流程,其目的是明确软件系统“如何做”。本阶段又可以分为概要设计和详细设计两个步骤,前者完成软件系统模块的划分和模块的层次结构以及数据库结构设计;后者完成每个模块的控制流程设计。本阶段要完成“设计说明书”的编写。
(3)编程阶段
本阶段将按照选定的程序设计语言将“设计说明书”中每个模块的控制流程编写出相应的程序,得到软件系统的源程序。
(4)测试阶段
软件测试是在软件投入运行前,对软件需求分析、设计规格说明和编码的最终审查,是保证软件质量的关键步骤。
2 学生信息管理系统简介
精品资料.为你而备
本章讲述如何实现学生信息管理系统的开发,该系统各主要功能模块界面如
图下:
精品资料.为你而备
精品资料.为你而备
3 系统功能分析
在实际开发此系统时,系统功能分析需要设计人员与用户进行全面、深入的交流,切实了解用户对整个系统期望具有的功能,与用户共同决定系统应具备的功能。
学生信息管理系统主要具有以下功能:
? 系统用户管理:管理用户信息的添加、修改、删除和查询功能。
? 院系管理:管理院系信息的添加、修改、删除和查询功能。
? 专业管理:管理专业信息的添加、修改、删除和查询功能。
? 学生信息管理:管理学生信息的添加、修改、删除和查询功能。
? 教学计划管理:管理教学计划的添加、修改、删除和查询功能。
? 学生成绩管理:管理学生成绩的添加、修改、删除和查询功能。
根据系统功能分析,可得到学生信息管理系统功能模块结构图如图3—1:
学生信息管理系统
学教学系院专生学生统系业信计成用管管息划绩户理理 管管管管
理理理理
图3—1 学生信息管理系统功能模块结构图
精品资料.为你而备
4 系统数据库设计
数据库在学生信息管理系统中占有非常重要的地位,数据库设计的好坏将直接影响到系统的效率以及系统实现的效果。合理的数据库结构设计可以提高数据存储的效率,保证数据的完整性和一致性,同时,合理的数据库结构也将有利于程序的实现。
数据库设计可包括两个部分:定义数据字典、定义数据库结构。 4.1 定义数据字典
在学生信息管理系统中有下面所示的数据字典:
(1)系统用户数据
系统用户数据包含的数据项有用户名、密码、用户权限。
(2)院系信息数据
院系信息数据包含的数据项有学院代码和学校名称。
)专业信息数据 (3
专业信息数据包含的数据项有学院代码、专业代码和专业名称。 (4)学生基本信息数据
学生基本信息数据包含的数据项有学号、姓名、性别、生日、民族、政治面貌、籍贯和备注。
(5)教学计划信息数据
教学计划信息数据包含的数据项有学院代码、专业代码、课程代码、课程名称、学期、学时、学分和课程性质。
(6)学生成绩信息数据
学生成绩信息数据包含的数据项有学号、姓名、课程代码、成绩和备注。 4.2 定义数据库结构
学生信息管理系统采用的后台数据库是Microsoft Office Access 2003
数据库系统,数据库名称为“StudentMIS.mdb“,其中包含了6张数据表,各表的名车设计结果分别如表4—1~表4—6所示。
(1)系统用户数据表(login)
系统用户数据表用来保存用户的账户信息,表中各字段的属性如表4—1所示。
表4—1 “login“数据表的各字段属性
字段名称 数据类型 字段大小 主键 标题 user 文本 10 用户名 password 文本 10 密码 admin 是/否 是否为超级用户
(2)院系信息数据表(institute)
院系信息数据表用来保存学校院系的信息,数据表中各字段的属性如表4—2所示。
表4—2 “institute“数据表的各字段属性
精品资料.为你而备
字段名称 数据类型 字段大小 主键 标题 institude_id 文本 2 Yes 学院代码 Institude_name 文本 22 学院名称
(3)专业信息数据表(major)
专业信息数据表用来保存学校各院系所设专业的信息,数据表中各字段的属性如表
4—3所示。
表4—3 “major“数据表的各字段属性
字段名称 数据类型 字段大小 主键 标题 Institude_id 文本 2 Yes 学院代码 major_id 文本 2 Yes 专业代码 major_name 文本 22 专业名称
(4)学生信息数据表(students)
学生信息数据表用来保存学校所有学生的基本信息,数据表中各字段的属性如表4—4所示。
表4—4 “students“数据表的各字段属性
字段名称 数据类型 字段大小 主键 标题 number 文本 12 Yes 学号 name 文本 8 姓名 sex 文本 1 性别 birth 日期/时间 生日 nationality 文本 10 民族 political_party 文本 4 政治面貌 family_place 文本 30 籍贯 Memo 备注 备注 说明:
学生信息数据表中的学号字段的字段名为number,其长度为12。即number字段的前四位表示年级,其次两位表示学院代码,再次两位表示专业代码,接下来两位表示班级,最后两位表示序号。
(5)教学计划信息数据表(lessons)
教学计划信息数据表用来保存各学院专业所开设的各类课程的信息,数据表中各字段的属性如表4—5所示。
表4—5 “lessons“数据表的各字段属性
字段名称 数据类型 字段大小 主键 标题 institude_id 文本 2 Yes 学院代码 major_id 文本 2 Yes 专业代码 lesson_id 文本 7 Yes 课程代码 lesson_name 文本 50 课程名称 Term 文本 1 学期 hours 数字 整型(小数位数0) 学时 credit 数字 单精度型(小数位数1) 学分 lesson_type 文本 8 课程性质
(6)学生成绩信息数据表(score)
精品资料.为你而备
学生成绩信息数据表用来保存学生各门课程的成绩信息,数据表中各字段的属性如表 4—6所示。
表4—6 “score“数据表的各字段属性 字段名称 数据类型 字段大小 主键 标题 Number 文本 12 Yes 学号 Name 文本 8 姓名 lesson_id 文本 7 Yes 课程代码 Score 数字 单精度型(小数位数1,默认值0) 成绩 Memo 备注 备注
精品资料.为你而备
5 系统应用程序设计
5.1 新建工程
在VB中新建一个标准EXE工程,并将工程保存为“学生信息管理系统.vbp“。接下来就可以设计各窗体,编写代码实现系统功能。
5.2 窗体设计
在已建的“学生信息管理系统.vbp“工程中新建窗体,并在相应的窗体上添加文本框、标签、直线以及命令按钮等常用的VB内部控件,并设置相关属性值。
具体实现代码(部分)如下:
1.用户登录窗体代码:
Option Explicit
Dim try_times As Integer '尝试登陆次数
Private Sub Form_Load()
'设置数据库路径
StudentDBfile = App.Path & "\StudentMIS.mdb"
'窗体中心定位
Call ScreenCenter(Me)
End Sub
Private Sub cmdCancel_Click()
'结束应用程序
If MsgBox("你选择了退出登陆,是否退出?", _
vbYesNo + vbInformation, "用户登陆") = vbYes Then
End
Else
Exit Sub
End If
End Sub
Private Sub cmdOK_Click()
Dim sName As String, sPas As String Dim mrs As ADODB.Recordset, strSQL As String
sName = Trim(txtUserName.Text): sPas = Trim(txtPassword.Text)
'数据有效性检查
If sName = "" Then
MsgBox "请输入用户名!", vbCritical, "用户登陆验证"
txtUserName.SetFocus
Exit Sub
End If
精品资料.为你而备
If sPas = "" Then
MsgBox "请输入密码!", vbCritical, "用户登陆验证"
txtPassword.SetFocus
Exit Sub
End If
'检查用户名是否正确
strSQL = "select * from login where user='" & sName & "'"
Set mrs = ExecuteSQL(strSQL)
If mrs.EOF = True Then
MsgBox "用户名不存在~", vbCritical, "用户登陆验证"
try_times = try_times + 1
If try_times >= 3 Then
MsgBox "您已经三次尝试进入本系统,均不成功,系统将关闭~", _
vbCritical, "用户登陆验证"
End
Else
txtUserName.SetFocus
txtUserName.SelStart = 0
txtUserName.SelLength = Len(txtUserName.Text)
Exit Sub
End If
End If
strSQL = "select * from login where user='" & sName & "'" & _
"and password='" & sPas & "'"
Set mrs = ExecuteSQL(strSQL)
If mrs.EOF = True Then
MsgBox " 密码错误~", vbCritical, "用户登陆验证"
try_times = try_times + 1
If try_times >= 3 Then
MsgBox "您已经三次尝试进入本系统,均不成功,系统将关闭~", _
vbCritical, "用户登陆验证"
End
Else
txtPassword.SetFocus
txtPassword.SelStart = 0
txtPassword.SelLength = Len(txtPassword.Text)
Exit Sub
End If
End If
MsgBox "登陆成功~", vbInformation, "用户登陆验证"
'保存当前登陆的权限
bolAuthority = mrs.Fields("admin")
精品资料.为你而备
'加载MDI主窗体
StudentMIS.Show
'卸载登陆窗体
Unload Me
End Sub
2.主窗体代码:
Option Explicit
Private Sub MDIForm_Load()
'"操作"菜单,按钮禁用
Call InitMenuAndToolbars(False)
'InitMenuAndToolbars为标准模块中自定义的公用函数 End Sub
'教学计划信息菜单单击事件
Private Sub mMan_Lessons_Click()
If unloadChildForm() Then frmLessons.Show
'"操作"菜单,按钮使能
Call InitMenuAndToolbars(True) End Sub
'专业信息菜单单击事件
Private Sub mMan_Major_Click()
If unloadChildForm() Then frmMajor.Show
'"操作"菜单,按钮使能
Call InitMenuAndToolbars(True) End Sub
'成绩信息菜单单击事件
Private Sub mMan_Score_Click()
mOpe_CreTable.Enabled = False '建表菜单失效
If unloadChildForm() Then frmScore.Show
'"操作"菜单,按钮使能
Call InitMenuAndToolbars(True) End Sub
'学生信息菜单单击事件
Private Sub mMan_Students_Click()
If unloadChildForm() Then frmStudent.Show
'"操作"菜单,按钮使能
Call InitMenuAndToolbars(True) End Sub
精品资料.为你而备
'还原菜单命令
Private Sub mOpe_Cancel_Click()
Call Me.ActiveForm.CancelData End Sub
'清空菜单命令
Private Sub mOpe_Clear_Click() Dim s$, k%
s = "是否确定删除当前的记录表的全部数据,"
k = MsgBox(s, vbYesNo + vbQuestion, "操作提示")
If k = vbYes Then
Call Me.ActiveForm.ClearData
End If
End Sub
'建表菜单命令
Private Sub mOpe_CreTable_Click()
Call Me.ActiveForm.CreateScoreTable End Sub
'删除菜单命令
Private Sub mOpe_Delete_Click()
Call Me.ActiveForm.DeleteData End Sub
'保存菜单命令
Private Sub mOpe_Update_Click()
Call Me.ActiveForm.SaveData End Sub
'退出菜单命令
Private Sub mSys_Exit_Click()
End
End Sub
'用户管理菜单命令
Private Sub mSys_User_Click()
If unloadChildForm() Then frmUserManage.Show
End Sub
'工具栏按钮单击事件
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
Select Case Button.Key
Case "Delete"
精品资料.为你而备
Call mOpe_Delete_Click
Case "New"
Call mOpe_CreTable_Click
Case "Recall"
Call mOpe_Cancel_Click
Case "Clear"
Call mOpe_Clear_Click
Case "Save"
Call mOpe_Update_Click
End Select
End Sub
3.用户管理窗体部分代码:
Option Explicit
Dim rs As ADODB.Recordset '记录集对象
Dim strSQL As String '字符串变量,保存SQL语言 Dim bEdit As Boolean '编辑状态标志
Dim bAdd As Boolean '添加状态标志
Private Sub Form_Load()
Set rs = New ADODB.Recordset
strSQL = "select * from login"
Set rs = ExecuteSQL(strSQL)
If rs.RecordCount = 0 Then
Call DisButtons
Else
rs.MoveFirst
Call FillText
cmdUpdate.Enabled = False
cmdCancel.Enabled = False
End If
'窗体中心定位
Call CenterPos(StudentMIS, Me) End Sub
Private Sub cmdEdit_Click() '编辑记录
bEdit = True
cmdEdit.Enabled = False
cmdAdd.Enabled = False
cmdDelete.Enabled = False
cmdUpdate.Enabled = True
cmdCancel.Enabled = True
精品资料.为你而备
cmdFirst.Enabled = False
cmdPrevious.Enabled = False
cmdNext.Enabled = False
cmdLast.Enabled = False
txtUser.SetFocus
End Sub
Private Sub cmdAdd_Click() '添加记录
bAdd = True
rs.AddNew
Call ClearText
cmdEdit.Enabled = False
cmdAdd.Enabled = False
cmdDelete.Enabled = False
cmdUpdate.Enabled = True
cmdCancel.Enabled = True
cmdFirst.Enabled = False
cmdPrevious.Enabled = False
cmdNext.Enabled = False
cmdLast.Enabled = False
txtUser.SetFocus
End Sub
Private Sub cmdDelete_Click() '删除当前记录
If MsgBox("真的要删除吗,", vbYesNo + vbExclamation, "提示信息") =
vbYes Then
rs.Delete
rs.MoveNext
If rs.EOF And rs.RecordCount > 0 Then rs.MoveFirst
If rs.RecordCount = 0 Then
Call DisButtons
Call ClearText
Else
Call FillText
End If
rs.Requery
End If
End Sub
Private Sub cmdUpdate_Click() '更新
If Trim(txtUser.Text) = "" Then
精品资料.为你而备
MsgBox "用户名不能为空!", vbCritical, "提示"
txtUser.SetFocus
Exit Sub
End If
If Trim(txtPassword.Text) = "" Then
MsgBox "密码不能为空!", vbCritical, "提示"
txtPassword.SetFocus
Exit Sub
End If
If bEdit Then rs.Update
If bAdd Then
rs.Update
rs.Requery
rs.MoveLast
End If
Call FillText
cmdEdit.Enabled = True
cmdAdd.Enabled = True
cmdDelete.Enabled = True
cmdUpdate.Enabled = False
cmdCancel.Enabled = False
cmdFirst.Enabled = True
cmdPrevious.Enabled = True
cmdNext.Enabled = True
cmdLast.Enabled = True
bEdit = False
bAdd = False
End Sub
Private Sub cmdCancel_Click() '取消更改
bEdit = False
bAdd = False
rs.CancelUpdate
If rs.RecordCount = 0 Then
cmdUpdate.Enabled = False
cmdAdd.Enabled = True
Call ClearText
Exit Sub
Else
Call FillText
cmdEdit.Enabled = True
cmdAdd.Enabled = True
cmdDelete.Enabled = True
精品资料.为你而备
cmdUpdate.Enabled = False
cmdCancel.Enabled = False
cmdFirst.Enabled = True
cmdPrevious.Enabled = True
cmdNext.Enabled = True
cmdLast.Enabled = True
End If
End Sub
Private Sub cmdFirst_Click() '第一条记录
rs.MoveFirst
If rs.RecordCount > 0 Then Call FillText
End Sub
Private Sub cmdPrevious_Click() '上一条记录
rs.MovePrevious
If rs.BOF Then rs.MoveFirst
If rs.RecordCount > 0 Then Call FillText
End Sub
Private Sub cmdNext_Click() '下一条记录
rs.MoveNext
If rs.EOF Then rs.MoveLast
If rs.RecordCount > 0 Then Call FillText
End Sub
Private Sub cmdLast_Click() '最后一条记录
rs.MoveLast
If rs.RecordCount > 0 Then Call FillText
End Sub
Private Sub DisButtons()
'按钮禁用
cmdEdit.Enabled = False
cmdDelete.Enabled = False
cmdUpdate.Enabled = False
cmdCancel.Enabled = False
cmdFirst.Enabled = False
cmdPrevious.Enabled = False
cmdNext.Enabled = False
精品资料.为你而备
cmdLast.Enabled = False
End Sub
Private Sub FillText()
'用当前记录的字段内容填充文本框
txtUser.Text = TransNull(rs.Fields(0))
txtPassword.Text = TransNull(rs.Fields(1))
If TransNull(rs.Fields(2)) Then
chkAdmin.Value = 1
Else
chkAdmin.Value = 0
End If
End Sub
Private Sub ClearText()
'清除文本框
txtUser.Text = ""
txtPassword.Text = ""
chkAdmin.Value = False
End Sub
4专业信息窗体代码:
Option Explicit
Dim cn As New ADODB.Connection '连接对象
Dim DataEdited As Boolean '数据已编辑标志
Dim bFirstStart As Boolean '窗体首次启动的标志
'DataGrid内部错误处理
Private Sub DataGrid1_Error(ByVal DataError As Integer, Response As
Integer)
If DataError = 7007 Then
MsgBox "所输字符数超过允许输入字符最大个数,参见状态栏提示~", _
vbCritical, "错误提示"
Response = 0 '不弹出系统错误提示框
End If
End Sub
'设置ADO数据控件的连接属性和记录源属性
Private Sub SetAdc()
Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=" _
& StudentDBfile & ";Persist Security
Info=False"
精品资料.为你而备
Adodc1.RecordSource = "select major_id as 专业代码" & " major_name
as 专业名称"_
& " form major order by major_id asc" End Sub
Private Sub Adodc1_FieldChangeComplete(ByVal cFields As Long, Fields As
Variant, _
ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, _
ByVal pRecordset As ADODB.Recordset) '字段改变完成后触发的事件
DataEdited = True
End Sub
Private Sub Adodc1_RecordChangeComplete(ByVal adReason As ADODB.EventReasonEnum, _
ByVal cRecords As Long, ByVal pError As ADODB.Error, _
adStatus As ADODB.EventStatusEnum, ByVal pRecordset As
ADODB.Recordset)
'记录改变完成后触发的事件
Select Case adReason
Case adRsnDelete, adRsnUpdate, adRsnAddNew
DataEdited = True
End Select
End Sub
Private Sub Adodc1_RecordsetChangeComplete(ByVal adReason As ADODB.EventReasonEnum, _
ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, _
ByVal pRecordset As ADODB.Recordset) '记录集改变完成后触发的事件
Select Case adReason
Case adRsnAddNew, adRsnDelete, adRsnAddNew
DataEdited = True
End Select
End Sub
'DataGrid控件当前单元行列位置改变事件
Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As
Integer)
Dim dbrow As Long, s1$, s2$, s3$
'确定记录指针
On Error Resume Next
精品资料.为你而备
With Adodc1.Recordset
If .RecordCount = 0 Then
dbrow = .RecordCount
Else
dbrow = .AbsolutePosition
End If
s1 = "当前记录位置:" & dbrow
s2 = "记录总数:" & Adodc1.Recordset.RecordCount
s3 = "提示:" & Adodc1.Recordset.Fields(DataGrid1.Col).Name & "最多只允许输入" & _
Adodc1.Recordset.Fields(DataGrid1.Col).DefinedSize & "位字符~"
StatBar.Panels(1).Text = s1
StatBar.Panels(2).Text = s2
StatBar.Panels(3).Text = s3 End With
End Sub
Public Sub DeleteData()
'删除当前记录
AddNew 操作,被挂起情况下退出该过程 '当前单元在最后一行,但没有
If DataGrid1.AddNewMode = dbgAddNewCurrent Or
Adodc1.Recordset.RecordCount = 0 Then
Exit Sub
End If
Adodc1.Recordset.Bookmark = DataGrid1.Bookmark
Adodc1.Recordset.Delete
'设置修改标志
DataEdited = True
DataGrid1.Refresh
End Sub
Public Sub SaveData()
'保存全部修改
On Error GoTo errhandler:
If Adodc1.Recordset.RecordCount > 0 Then Adodc1.Recordset.MoveFirst
Adodc1.Recordset.UpdateBatch
cn.CommitTrans '提交事务
DataEdited = False
DataGrid1.Refresh
Adodc1.Refresh
Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象
cn.BeginTrans '开始一个新事务
精品资料.为你而备
Exit Sub
errhandler:
'显示与数据库操作规则有关的错误信息
Call ShowDbRuleErrInf("专业代码")
End Sub
Public Sub CancelData() '还原全部修改
On Error GoTo errhandler:
If Adodc1.Recordset.RecordCount > 0 Then Adodc1.Recordset.MoveFirst
Adodc1.Recordset.CancelBatch
cn.RollbackTrans '回滚事务
DataEdited = False
DataGrid1.Refresh
Adodc1.Refresh
Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象
cn.BeginTrans '开始一个新事务
Exit Sub
errhandler:
'显示与数据库操作规则有关的错误信息
Call ShowDbRuleErrInf("专业代码")
End Sub
Public Sub ClearData()
'删空当前记录集
Call DBRecordset_Delete(Adodc1.Recordset)
DataGrid1.Refresh
'设置修改标志
DataEdited = True
End Sub
'窗体卸载前查询事件
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Dim s$, b%
If DataEdited = True Then
s$ = "数据已修改,是否保存,"
b = MsgBox(s$, vbYesNoCancel + vbQuestion, "操作提示")
Select Case b
Case vbYes '保存修改
Call SaveData
Case vbNo '取消修改
Call CancelData
Case vbCancel
精品资料.为你而备
Cancel = True '不关闭窗体
Exit Sub
End Select
End If
'"操作"菜单、按钮禁用
Call InitMenuAndToolbars(False) End Sub
5学生信息窗体代码:
Option Explicit
Dim cn As New ADODB.Connection '连接对象
Dim DataEdited As Boolean '数据已编辑标志
Dim bFirstStart As Boolean '窗体首次启动的标志
'DataGrid内部错误处理
Private Sub DataGrid1_Error(ByVal DataError As Integer, Response As
Integer)
If DataError = 7007 Then
MsgBox "所输字符数超过允许输入字符最大个数,参见状态栏提示~", _
vbCritical, "错误提示"
Response = 0
ElseIf DataError = 7008 Then
Adodc1.Recordset.AddNew
Response = 0
End If
End Sub
'设置ADO数据控件的连接属性和记录源属性
Private Sub SetAdc()
Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=" _
& StudentDBfile & ";Persist Security
Info=False"
Adodc1.RecordSource = "select number as 学号,name as 姓名,sex as 性别,birth as 生日," _
& "nationality as 民族," _
& "political_party as 政治面貌,family_place as 籍贯,memo as 备注 from students"
End Sub
精品资料.为你而备
Private Sub Adodc1_FieldChangeComplete(ByVal cFields As Long, Fields As
Variant, ByVal pError _
As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
'字段改变完成后触发的事件
DataEdited = True
End Sub
Private Sub Adodc1_RecordChangeComplete(ByVal adReason As ADODB.EventReasonEnum, _
ByVal cRecords As Long, ByVal pError As ADODB.Error, _
adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
'记录改变完成后触发的事件
Select Case adReason
Case adRsnDelete, adRsnUpdate, adRsnAddNew
DataEdited = True
End Select
End Sub
Private Sub Adodc1_RecordsetChangeComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError _
As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
'记录集改变完成后触发的事件
Select Case adReason
Case adRsnAddNew, adRsnDelete, adRsnAddNew
DataEdited = True
End Select
End Sub
'当前单元位置改变事件
Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As
Integer)
Dim dbrow As Long, s1$, s2$, s3$
'确定记录指针
On Error Resume Next
With Adodc1.Recordset
If .RecordCount = 0 Then
dbrow = .RecordCount
Else
dbrow = .AbsolutePosition
End If
s1 = "当前记录位置:" & dbrow
精品资料.为你而备
s2 = "记录总数:" & Adodc1.Recordset.RecordCount
s3 = "提示:" & Adodc1.Recordset.Fields(DataGrid1.Col).Name & "最多只允许输入" & _
Adodc1.Recordset.Fields(DataGrid1.Col).DefinedSize & "位字符~"
StatBar.Panels(1).Text = s1
StatBar.Panels(2).Text = s2
StatBar.Panels(3).Text = s3 End With
End Sub
'年级组合框单击
Private Sub njComb_Click()
If bFirstStart Then Exit Sub
Call SaveData
'其后面的所有列表框显示全部
xyComb.ListIndex = 0
zyComb.ListIndex = 0
bjComb.ListIndex = 0
'根据选择的条件组合进行相应的查询
Call ConditionQuery
'重新初始化状态栏显示信息
StatBar.Panels(1).Text = "当前记录位置:0"
StatBar.Panels(2).Text = "记录总数:0"
StatBar.Panels(3).Text = ""
'打开更新后的记录集
Adodc1.Refresh
Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象
cn.BeginTrans '开始一个新事务
End Sub
'学院组合框单击
Private Sub xyComb_Click() Dim msql$, sArray() As String, mrs As New ADODB.Recordset
If bFirstStart Then Exit Sub
Call SaveData
'其后面的所有列表框显示全部
zyComb.ListIndex = 0
bjComb.ListIndex = 0
'重新填充专业组合框内容
sArray = Split(xyComb.Text)
If sArray(0) = "全部" Then
msql = "select * from major order by institute_id,major_id asc"
精品资料.为你而备
Set mrs = ExecuteSQL(msql)
Call ADDComboListRS(zyComb, mrs, True, "major_name",
"institute_id", "major_id")
Else
msql = "select * from major where institute_id='" & sArray(1) &
"'" _
& " order by institute_id,major_id asc"
Set mrs = ExecuteSQL(msql)
Call ADDComboListRS(zyComb, mrs, True, "major_name",
"institute_id", "major_id")
End If
'根据选择的条件组合进行相应的查询
Call ConditionQuery
'重新初始化状态栏显示信息
StatBar.Panels(1).Text = "当前记录位置:0"
StatBar.Panels(2).Text = "记录总数:0"
StatBar.Panels(3).Text = ""
'打开更新后的记录集
Adodc1.Refresh
Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象
cn.BeginTrans '开始一个新事务
End Sub
'专业组合框单击
Private Sub zyComb_Click()
If bFirstStart Then Exit Sub
Call SaveData
'其后面的所有列表框显示全部
bjComb.ListIndex = 0
'根据选择的条件组合进行相应的查询
Call ConditionQuery
'重新初始化状态栏显示信息
StatBar.Panels(1).Text = "当前记录位置:0"
StatBar.Panels(2).Text = "记录总数:0"
StatBar.Panels(3).Text = ""
'打开更新后的记录集
Adodc1.Refresh
Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象
cn.BeginTrans '开始一个新事务
End Sub
'班级组合框单击
精品资料.为你而备
Private Sub bjComb_Click()
If bFirstStart Then Exit Sub
Call SaveData
'根据选择的条件组合进行相应的查询
Call ConditionQuery
'重新初始化状态栏显示信息
StatBar.Panels(1).Text = "当前记录位置:0"
StatBar.Panels(2).Text = "记录总数:0"
StatBar.Panels(3).Text = ""
'打开更新后的记录集
Adodc1.Refresh
Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对
象
cn.BeginTrans '开始一个新事务
End Sub
'根据选择的条件组合进行相应的查询
Private Sub ConditionQuery()
Dim msql$, sxyArray() As String, szyArray() As String
msql = "select number as 学号,name as 姓名,sex as 性别,birth as 生
日,nationality as 民族," _
& "political_party as 政治面貌,family_place as 籍贯,memo as 备注 from students "
sxyArray = Split(xyComb.Text)
szyArray = Split(zyComb.Text)
If njComb.Text = "全部" And sxyArray(0) = "全部" And szyArray(0) = "全部" _
And bjComb.Text = "全部" Then
Adodc1.RecordSource = CreateSqlStu(msql)
ElseIf njComb.Text <> "全部" And sxyArray(0) = "全部" And szyArray(0) = "全部" _
And bjComb.Text = "全部" Then
Adodc1.RecordSource = CreateSqlStu(msql, njComb.Text)
ElseIf njComb.Text = "全部" And sxyArray(0) <> "全部" And szyArray(0) = "全部" _
And bjComb.Text = "全部" Then
Adodc1.RecordSource = CreateSqlStu(msql, , sxyArray(1))
ElseIf njComb.Text = "全部" And sxyArray(0) <> "全部" And szyArray(0) = "全部" _
And bjComb.Text <> "全部" Then
Adodc1.RecordSource = CreateSqlStu(msql, , sxyArray(1), ,
bjComb.Text)
ElseIf njComb.Text = "全部" And sxyArray(0) <> "全部" And szyArray(0) <> "全部" _
精品资料.为你而备
And bjComb.Text = "全部" Then
Adodc1.RecordSource = CreateSqlStu(msql, , sxyArray(1), szyArray(1) & szyArray(2))
ElseIf njComb.Text = "全部" And sxyArray(0) <> "全部" And szyArray(0)
<> "全部" _
And bjComb.Text <> "全部" Then
Adodc1.RecordSource = CreateSqlStu(msql, , sxyArray(1), szyArray(1) & szyArray(2), bjComb.Text)
ElseIf njComb.Text <> "全部" And sxyArray(0) <> "全部" And szyArray(0)
= "全部" _
And bjComb.Text = "全部" Then
Adodc1.RecordSource = CreateSqlStu(msql, njComb.Text, sxyArray(1))
ElseIf njComb.Text = "全部" And sxyArray(0) = "全部" And szyArray(0)
<> "全部" _
And bjComb.Text = "全部" Then
Adodc1.RecordSource = CreateSqlStu(msql, , , szyArray(1) & szyArray(2))
ElseIf njComb.Text = "全部" And sxyArray(0) = "全部" And szyArray(0)
<> "全部" _
And bjComb.Text <> "全部" Then
Adodc1.RecordSource = CreateSqlStu(msql, , , szyArray(1) & szyArray(2), bjComb.Text)
ElseIf njComb.Text <> "全部" And sxyArray(0) <> "全部" And szyArray(0)
<> "全部" _
And bjComb.Text = "全部" Then
Adodc1.RecordSource = CreateSqlStu(msql, njComb.Text, sxyArray(1), szyArray(1) & szyArray(2))
ElseIf njComb.Text = "全部" And sxyArray(0) = "全部" And szyArray(0)
= "全部" _
And bjComb.Text <> "全部" Then
Adodc1.RecordSource = CreateSqlStu(msql, , , , bjComb.Text)
ElseIf njComb.Text <> "全部" And sxyArray(0) <> "全部" And szyArray(0)
<> "全部" _
And bjComb.Text <> "全部" Then
Adodc1.RecordSource = CreateSqlStu(msql, njComb.Text, sxyArray(1), szyArray(1) & szyArray(2), _
bjComb.Text)
End If
End Sub
Public Sub SaveData()
'保存全部修改
On Error GoTo errhandler:
精品资料.为你而备
If Adodc1.Recordset.RecordCount > 0 Then Adodc1.Recordset.MoveFirst
Adodc1.Recordset.UpdateBatch
cn.CommitTrans '提交事务
DataEdited = False
DataGrid1.Refresh
Adodc1.Refresh
Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象
cn.BeginTrans '开始一个新事务
Exit Sub
errhandler:
'显示与数据库操作规则有关的错误信息
Call ShowDbRuleErrInf("学号")
End Sub
Public Sub CancelData()
'还原全部修改
On Error GoTo errhandler:
If Adodc1.Recordset.RecordCount > 0 Then Adodc1.Recordset.MoveFirst
Adodc1.Recordset.CancelBatch
cn.RollbackTrans '回滚事务
DataEdited = False
DataGrid1.Refresh
Adodc1.Refresh
Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象
cn.BeginTrans '开始一个新事务
Exit Sub
errhandler:
'显示与数据库操作规则有关的错误信息
Call ShowDbRuleErrInf("学号")
End Sub
6教学计划窗体代码:
Option Explicit
Dim cn As New ADODB.Connection '连接对象
Dim DataEdited As Boolean '数据已编辑标志
Dim bFirstStart As Boolean '窗体首次启动的标志
'DataGrid内部错误处理
Private Sub DataGrid1_Error(ByVal DataError As Integer, Response As
精品资料.为你而备
Integer)
If DataError = 7007 Then
MsgBox "所输字符数超过允许输入字符最大个数,参见状态栏提示~",
_
vbCritical, "错误提示"
Response = 0
ElseIf DataError = 7008 Then
Adodc1.Recordset.AddNew
Response = 0
End If
End Sub
'设置ADO数据控件的连接属性和记录源属性
Private Sub SetAdc()
Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=" _
& StudentDBfile & ";Persist Security
Info=False"
Adodc1.RecordSource = "select institute_id as 学院代码,major_id as 专业代码," & _
"lesson_id as 课程代码," _
& "lesson_name as 课程名称,term as 学
期,hours as 学时," & _
"credit as 学分,lesson_type as 课程性质 " _
& "from lessons order by institute_id,major_id asc"
End Sub
Private Sub Adodc1_FieldChangeComplete(ByVal cFields As Long, Fields As
Variant, _
ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, _
ByVal pRecordset As ADODB.Recordset) '字段改变完成后触发的事件
DataEdited = True
End Sub
Private Sub Adodc1_RecordChangeComplete(ByVal adReason As ADODB.EventReasonEnum, _
ByVal cRecords As Long, ByVal pError As ADODB.Error, _
adStatus As ADODB.EventStatusEnum, ByVal pRecordset As
ADODB.Recordset)
'记录改变完成后触发的事件
Select Case adReason
精品资料.为你而备
Case adRsnDelete, adRsnUpdate, adRsnAddNew
DataEdited = True
End Select
End Sub
Private Sub Adodc1_RecordsetChangeComplete(ByVal adReason As
ADODB.EventReasonEnum, _
ByVal pError As ADODB.Error, adStatus As
ADODB.EventStatusEnum, _
ByVal pRecordset As ADODB.Recordset)
'记录集改变完成后触发的事件
Select Case adReason
Case adRsnAddNew, adRsnDelete, adRsnAddNew
DataEdited = True
End Select
End Sub
'当前单元格改变位置事件
Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As
Integer)
Dim dbrow As Long, s1$, s2$, s3$ '确定记录指针
On Error Resume Next
With Adodc1.Recordset
If .RecordCount = 0 Then
dbrow = .RecordCount
Else
dbrow = .AbsolutePosition
End If
s1 = "当前记录位置:" & dbrow
s2 = "记录总数:" & Adodc1.Recordset.RecordCount
s3 = "提示:" & Adodc1.Recordset.Fields(DataGrid1.Col).Name & "最多只允许输入" & _
Adodc1.Recordset.Fields(DataGrid1.Col).DefinedSize & "位字符~"
StatBar.Panels(1).Text = s1
StatBar.Panels(2).Text = s2
StatBar.Panels(3).Text = s3 End With
End Sub
Private Sub SSPanel1_Click()
End Sub
精品资料.为你而备
'课程性质组合框单击
Private Sub tyComb_Click()
If bFirstStart Then Exit Sub
Call SaveData
'根据选择的条件组合进行相应的查询
Call ConditionQuery
'重新初始化状态栏显示信息
StatBar.Panels(1).Text = "当前记录位置:0"
StatBar.Panels(2).Text = "记录总数:0"
StatBar.Panels(3).Text = ""
'打开更新后的记录集
Adodc1.Refresh
Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象
cn.BeginTrans '开始一个新事务
End Sub
'学期组合框单击
Private Sub xqComb_Click()
If bFirstStart Then Exit Sub
Call SaveData
'其后面的所有列表框显示全部
tyComb.ListIndex = 0
'根据选择的条件组合进行相应的查询
Call ConditionQuery
'重新初始化状态栏显示信息
StatBar.Panels(1).Text = "当前记录位置:0"
StatBar.Panels(2).Text = "记录总数:0"
StatBar.Panels(3).Text = ""
'打开更新后的记录集
Adodc1.Refresh
Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象
cn.BeginTrans '开始一个新事务
End Sub
'学院组合框单击事件
Private Sub xyComb_Click() Dim sArray() As String, msql As String, mrs As ADODB.Recordset
If bFirstStart Then Exit Sub
Call SaveData
'其后面的所有列表框显示全部
zyComb.ListIndex = 0
精品资料.为你而备
xqComb.ListIndex = 0
tyComb.ListIndex = 0
'重新填充专业组合框内容
sArray = Split(xyComb.Text)
If sArray(0) = "全部" Then
msql = "select * from major order by institute_id,major_id asc"
Set mrs = ExecuteSQL(msql)
Call ADDComboListRS(zyComb, mrs, True, "major_name",
"institute_id", "major_id")
Else
msql = "select * from major where institute_id='" & sArray(1) &
"'" _
& " order by institute_id,major_id asc"
Set mrs = ExecuteSQL(msql)
Call ADDComboListRS(zyComb, mrs, True, "major_name",
"institute_id", "major_id")
End If
'根据选择的条件组合进行相应的查询
Call ConditionQuery
'重新初始化状态栏显示信息
StatBar.Panels(1).Text = "当前记录位置:0"
StatBar.Panels(2).Text = "记录总数:0"
StatBar.Panels(3).Text = ""
'打开更新后的记录集
Adodc1.Refresh
Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象
cn.BeginTrans '开始一个新事务
End Sub
'专业组合框单击
Private Sub zyComb_Click()
If bFirstStart Then Exit Sub
Call SaveData
'其后面的所有列表框显示全部
xqComb.ListIndex = 0
tyComb.ListIndex = 0
'根据选择的条件组合进行相应的查询
Call ConditionQuery
'重新初始化状态栏显示信息
StatBar.Panels(1).Text = "当前记录位置:0"
StatBar.Panels(2).Text = "记录总数:0"
StatBar.Panels(3).Text = ""
'打开更新后的记录集
精品资料.为你而备
Adodc1.Refresh
Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对
象
cn.BeginTrans '开始一个新事务
End Sub
'根据选择的条件组合进行相应的查询
Private Sub ConditionQuery()
Dim msql$, sxyArray() As String, szyArray() As String msql = "select institute_id as 学院代码,major_id as 专业代码,lesson_id
as 课程代码," _
& "lesson_name as 课程名称,term as 学期,hours as 学时,credit
as 学分," & _
"lesson_type as 课程性质 from lessons"
sxyArray = Split(xyComb.Text)
szyArray = Split(zyComb.Text)
If sxyArray(0) = "全部" And szyArray(0) = "全部" And xqComb.Text = "全部" _
And tyComb.Text = "全部" Then
Adodc1.RecordSource = CreateSqlLes(msql)
ElseIf sxyArray(0) <> "全部" And szyArray(0) = "全部" And xqComb.Text = "全部" _
And tyComb.Text = "全部" Then
Adodc1.RecordSource = CreateSqlLes(msql, sxyArray(1))
ElseIf sxyArray(0) <> "全部" And szyArray(0) <> "全部" And
xqComb.Text = "全部" _
And tyComb.Text = "全部" Then
Adodc1.RecordSource = CreateSqlLes(msql, sxyArray(1), _
szyArray(1) & szyArray(2))
ElseIf sxyArray(0) <> "全部" And szyArray(0) <> "全部" And
xqComb.Text <> "全部" _
And tyComb.Text = "全部" Then
Adodc1.RecordSource = CreateSqlLes(msql, sxyArray(1), _
szyArray(1) & szyArray(2), xqComb.Text)
ElseIf sxyArray(0) <> "全部" And szyArray(0) <> "全部" And
xqComb.Text <> "全部" _
And tyComb.Text <> "全部" Then
Adodc1.RecordSource = CreateSqlLes(msql, sxyArray(1), _
szyArray(1) & szyArray(2), xqComb.Text,
tyComb.Text)
ElseIf sxyArray(0) = "全部" And szyArray(0) <> "全部" And xqComb.Text = "全部" _
And tyComb.Text = "全部" Then
Adodc1.RecordSource = CreateSqlLes(msql, , szyArray(1) &
精品资料.为你而备
szyArray(2))
ElseIf sxyArray(0) = "全部" And szyArray(0) <> "全部" And xqComb.Text
<> "全部" _
And tyComb.Text = "全部" Then
Adodc1.RecordSource = CreateSqlLes(msql, , szyArray(1) & szyArray(2), xqComb.Text)
ElseIf sxyArray(0) = "全部" And szyArray(0) <> "全部" And xqComb.Text
<> "全部" _
And tyComb.Text <> "全部" Then
Adodc1.RecordSource = CreateSqlLes(msql, , szyArray(1) & szyArray(2), _
xqComb.Text, tyComb.Text)
ElseIf sxyArray(0) = "全部" And szyArray(0) <> "全部" And xqComb.Text
= "全部" _
And tyComb.Text <> "全部" Then
Adodc1.RecordSource = CreateSqlLes(msql, , szyArray(1) & szyArray(2), , _
tyComb.Text)
ElseIf sxyArray(0) = "全部" And szyArray(0) = "全部" And xqComb.Text
<> "全部" _
And tyComb.Text = "全部" Then
Adodc1.RecordSource = CreateSqlLes(msql, , , xqComb.Text)
ElseIf sxyArray(0) = "全部" And szyArray(0) = "全部" And xqComb.Text
<> "全部" _
And tyComb.Text <> "全部" Then
Adodc1.RecordSource = CreateSqlLes(msql, , , xqComb.Text, tyComb.Text)
ElseIf sxyArray(0) <> "全部" And szyArray(0) = "全部" And xqComb.Text
<> "全部" _
And tyComb.Text = "全部" Then
Adodc1.RecordSource = CreateSqlLes(msql, sxyArray(1), , xqComb.Text)
ElseIf sxyArray(0) <> "全部" And szyArray(0) = "全部" And xqComb.Text
<> "全部" _
And tyComb.Text <> "全部" Then
Adodc1.RecordSource = CreateSqlLes(msql, sxyArray(1), , xqComb.Text, tyComb.Text)
ElseIf sxyArray(0) <> "全部" And szyArray(0) <> "全部" And
xqComb.Text = "全部" _
And tyComb.Text <> "全部" Then
Adodc1.RecordSource = CreateSqlLes(msql, sxyArray(1), _
szyArray(1) & szyArray(2), , tyComb.Text)
ElseIf sxyArray(0) <> "全部" And szyArray(0) = "全部" And xqComb.Text
精品资料.为你而备
= "全部" _
And tyComb.Text <> "全部" Then
Adodc1.RecordSource = CreateSqlLes(msql, sxyArray(1), , ,
tyComb.Text)
End If
End Sub
Public Sub SaveData()
'保存全部修改
On Error GoTo errhandler:
If Adodc1.Recordset.RecordCount > 0 Then Adodc1.Recordset.MoveFirst
Adodc1.Recordset.UpdateBatch
cn.CommitTrans '提交事务
DataEdited = False
DataGrid1.Refresh
Adodc1.Refresh
Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象
cn.BeginTrans '开始一个新事务
Exit Sub
errhandler:
'显示与数据库操作规则有关的错误信息
Call ShowDbRuleErrInf("学院代码、专业代码和课程代码的组合值") End Sub
Public Sub CancelData()
'还原全部修改
On Error GoTo errhandler:
If Adodc1.Recordset.RecordCount > 0 Then Adodc1.Recordset.MoveFirst
Adodc1.Recordset.CancelBatch
cn.RollbackTrans '回滚事务
DataEdited = False
DataGrid1.Refresh
Adodc1.Refresh
Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象
cn.BeginTrans '开始一个新事务
Exit Sub
errhandler:
'显示与数据库操作规则有关的错误信息
Call ShowDbRuleErrInf("学院代码、专业代码和课程代码的组合值") End Sub
Public Sub ClearData()
精品资料.为你而备
'删空当前记录集
Call DBRecordset_Delete(Adodc1.Recordset)
DataGrid1.Refresh
'设置修改标志
DataEdited = True
End Sub
Public Sub DeleteData()
'删除当前记录
'当前单元在最后一行,但没有 AddNew 操作,被挂起情况下退出该过程
If DataGrid1.AddNewMode = dbgAddNewCurrent Or
Adodc1.Recordset.RecordCount = 0 Then
Exit Sub
End If
Adodc1.Recordset.Bookmark = DataGrid1.Bookmark
Adodc1.Recordset.Delete
'设置修改标志
DataEdited = True
DataGrid1.Refresh
End Sub
'窗体卸载前查询事件
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Dim s$, b%
If DataEdited = True Then
s$ = "数据已修改,是否保存,"
b = MsgBox(s$, vbYesNoCancel + vbQuestion, "操作提示")
Select Case b
Case vbYes '保存修改
Call SaveData
Case vbNo '取消修改
Call CancelData
Case vbCancel
Cancel = True '不关闭窗体
Exit Sub
End Select
End If
'"操作"菜单、按钮禁用
Call InitMenuAndToolbars(False) End Sub
7成绩信息窗体代码:
Option Explicit
精品资料.为你而备
Dim cn As New ADODB.Connection '连接对象
Dim DataEdited As Boolean '数据已编辑标志
Dim bFirstStart As Boolean '窗体首次启动的标志
Private Sub Form_Load()
Dim msql$, mrs As ADODB.Recordset, sArray() As String
'年级组合框
njComb.ListIndex = 0 '显示第一项
'填充学院组合框
msql$ = "select distinct
institute.institute_name,lessons.institute_id from" _
& " institute,lessons where
institute.institute_id=lessons.institute_id " & _
" order by lessons.institute_id asc"
Set mrs = ExecuteSQL(msql)
Call ADDComboListRS(xyComb, mrs, False, "institute_name", "institute_id")
'填充专业组合框
sArray = Split(xyComb.Text)
msql = "select distinct major.major_name,lessons.institute_id," & _
"lessons.major_id from major,lessons where " _
& " lessons.institute_id='" & sArray(1) & "'" _
& " and lessons.institute_id=major.institute_id " _
& " and major.major_id=lessons.major_id " & _
"order by lessons.institute_id,lessons.major_id asc"
Set mrs = ExecuteSQL(msql)
Call ADDComboListRS(zyComb, mrs, False, "major_name", "institute_id", "major_id")
'班级组合框
bjComb.ListIndex = 0 '显示第一项
'学期组合框
xqComb.ListIndex = 0
'填充课程组合框
sArray = Split(zyComb.Text)
msql$ = "select distinct lesson_id,lesson_name from lessons where institute_id='" _
& sArray(1) & "'" & " and major_id='" & sArray(2) & "'" & " and
term='" _
& xqComb.Text & "'" & " order by lesson_id asc"
Set mrs = ExecuteSQL(msql)
Call ADDComboListRS(kcComb, mrs, False, "lesson_name", "lesson_id")
'设置ADO控件
Call SetAdc
End Sub
精品资料.为你而备
'设置ADO数据控件的连接属性和记录源属性
Private Sub SetAdc()
Dim szyArray() As String, skcArray() As String
szyArray = Split(zyComb.Text): skcArray = Split(kcComb.Text)
Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _
& StudentDBfile & ";Persist Security Info=False"
Adodc1.RecordSource = "select score.number as 学号,score.name as 姓
名," _
& "score.lesson_id as 课程代码," & "score.score as 成绩,score.memo
as 备注 " _
& "from score,students where score.number=students.number " _
& "and score.number like '" & njComb.Text & szyArray(1) & szyArray(2) & bjComb.Text _
& "%'" & " and score.lesson_id='" & skcArray(1) & "'" & " order by score.number asc"
End Sub
'DataGrid内部错误处理
Private Sub DataGrid1_Error(ByVal DataError As Integer, Response As Integer)
If DataError = 7007 Then
MsgBox "所输字符数超过允许输入字符最大个数,参见状态栏提示~",
_
vbCritical, "错误提示"
Response = 0
ElseIf DataError = 7008 Then
MsgBox "不允许手动添加成绩记录,要输入成绩请选择“操作”菜单下
的“建表”命令!", _
vbCritical, "错误提示"
Response = 0
End If
End Sub
'设置"建表"菜单、命令按钮的使能与否状态
Private Sub SetCreTableMenuAndButtonEn(bEn As Boolean)
StudentMIS.mOpe_CreTable.Enabled = bEn
StudentMIS.Toolbar1.Buttons("New").Enabled = bEn End Sub
'年级组合框单击事件
精品资料.为你而备
Private Sub njComb_Click()
If bFirstStart Then Exit Sub
Call SaveData
'重新初始化状态栏显示信息
StatBar.Panels(1).Text = "当前记录位置:0"
StatBar.Panels(2).Text = "记录总数:0"
StatBar.Panels(3).Text = ""
'打开更新后的记录集
Call SetAdc
Adodc1.Refresh
DataGrid1.Columns(0).Locked = True '不允许编辑学号
DataGrid1.Columns(1).Locked = True '不允许编辑姓名
DataGrid1.Columns(2).Locked = True '不允许编辑课程代码
'建表菜单当记录集为空时使能,不为空时禁止
If Adodc1.Recordset.RecordCount = 0 Then
Call SetCreTableMenuAndButtonEn(True)
Else
Call SetCreTableMenuAndButtonEn(False)
End If
Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对
象
cn.BeginTrans '开始一个新事务
End Sub
'学院组合框单击事件
Private Sub xyComb_Click()
Dim msql$, sArray() As String, mrs As New ADODB.Recordset
If bFirstStart Then Exit Sub
Call SaveData
'填充专业组合框
sArray = Split(xyComb.Text)
msql = "select distinct major.major_name,lessons.institute_id," & _
"lessons.major_id from major,lessons where " _
& " lessons.institute_id='" & sArray(1) & "'" _
& " and lessons.institute_id=major.institute_id " _
& " and major.major_id=lessons.major_id " _
& " order by lessons.institute_id,lessons.major_id asc"
Set mrs = ExecuteSQL(msql)
Call ADDComboListRS(zyComb, mrs, False, "major_name", "institute_id", "major_id")
'重新初始化状态栏显示信息
StatBar.Panels(1).Text = "当前记录位置:0"
StatBar.Panels(2).Text = "记录总数:0"
StatBar.Panels(3).Text = ""
精品资料.为你而备
'打开更新后的记录集
Call SetAdc
Adodc1.Refresh
DataGrid1.Columns(0).Locked = True '不允许编辑学号
DataGrid1.Columns(1).Locked = True '不允许编辑姓名
DataGrid1.Columns(2).Locked = True '不允许编辑课程代码
'建表菜单当记录集为空时使能,不为空时禁止
If Adodc1.Recordset.RecordCount = 0 Then
Call SetCreTableMenuAndButtonEn(True)
Else
Call SetCreTableMenuAndButtonEn(False)
End If
Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对
象
cn.BeginTrans '开始一个新事务
End Sub
'专业组合框单击事件
Private Sub zyComb_Click()
Dim msql$, sArray() As String, mrs As New ADODB.Recordset
If bFirstStart Then Exit Sub
Call SaveData
'填充课程组合框
sArray = Split(zyComb.Text)
msql$ = "select distinct lesson_id,lesson_name from lessons " _
& " where institute_id='" & sArray(1) & "'" & " and major_id='"
_
& sArray(2) & "'" & " and term='" & xqComb.Text & "'" _
& " order by lesson_id asc"
Set mrs = ExecuteSQL(msql)
Call ADDComboListRS(kcComb, mrs, False, "lesson_name", "lesson_id")
'重新初始化状态栏显示信息
StatBar.Panels(1).Text = "当前记录位置:0"
StatBar.Panels(2).Text = "记录总数:0"
StatBar.Panels(3).Text = ""
'打开更新后的记录集
Call SetAdc
Adodc1.Refresh
DataGrid1.Columns(0).Locked = True '不允许编辑学号
DataGrid1.Columns(1).Locked = True '不允许编辑姓名
DataGrid1.Columns(2).Locked = True '不允许编辑课程代码
'建表菜单当记录集为空时使能,不为空时禁止
If Adodc1.Recordset.RecordCount = 0 Then
Call SetCreTableMenuAndButtonEn(True)
精品资料.为你而备
Else
Call SetCreTableMenuAndButtonEn(False)
End If
Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对
象
cn.BeginTrans '开始一个新事务
End Sub
'班级组合框单击事件
Private Sub bjComb_Click()
If bFirstStart Then Exit Sub
Call SaveData
'重新初始化状态栏显示信息
StatBar.Panels(1).Text = "当前记录位置:0"
StatBar.Panels(2).Text = "记录总数:0"
StatBar.Panels(3).Text = ""
'打开更新后的记录集
Call SetAdc
Adodc1.Refresh
DataGrid1.Columns(0).Locked = True '不允许编辑学号
DataGrid1.Columns(1).Locked = True '不允许编辑姓名
DataGrid1.Columns(2).Locked = True '不允许编辑课程代码
'建表菜单当记录集为空时使能,不为空时禁止
If Adodc1.Recordset.RecordCount = 0 Then
Call SetCreTableMenuAndButtonEn(True)
Else
Call SetCreTableMenuAndButtonEn(False)
End If
Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对
象
cn.BeginTrans '开始一个新事务
End Sub
'学期组合框单击事件
Private Sub xqComb_Click()
Dim msql$, sArray() As String, mrs As New ADODB.Recordset
If bFirstStart Then Exit Sub
Call SaveData
'填充课程组合框
sArray = Split(zyComb.Text)
msql$ = "select distinct lesson_id,lesson_name from lessons " _
& " where institute_id='" & sArray(1) & "'" & " and major_id='"
_
& sArray(2) & "'" & " and term='" & xqComb.Text & "'" _
精品资料.为你而备
& " order by lesson_id asc"
Set mrs = ExecuteSQL(msql)
Call ADDComboListRS(kcComb, mrs, False, "lesson_name", "lesson_id")
'重新初始化状态栏显示信息
StatBar.Panels(1).Text = "当前记录位置:0"
StatBar.Panels(2).Text = "记录总数:0"
StatBar.Panels(3).Text = ""
'打开更新后的记录集
Call SetAdc
Adodc1.Refresh
DataGrid1.Columns(0).Locked = True '不允许编辑学号
DataGrid1.Columns(1).Locked = True '不允许编辑姓名
DataGrid1.Columns(2).Locked = True '不允许编辑课程代码
'建表菜单当记录集为空时使能,不为空时禁止
If Adodc1.Recordset.RecordCount = 0 Then
Call SetCreTableMenuAndButtonEn(True)
Else
Call SetCreTableMenuAndButtonEn(False)
End If
Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象
cn.BeginTrans '开始一个新事务
End Sub
'课程组合框单击事件
Private Sub kcComb_Click()
If bFirstStart Then Exit Sub
Call SaveData
'重新初始化状态栏显示信息
StatBar.Panels(1).Text = "当前记录位置:0"
StatBar.Panels(2).Text = "记录总数:0"
StatBar.Panels(3).Text = ""
'打开更新后的记录集
Call SetAdc
Adodc1.Refresh
DataGrid1.Columns(0).Locked = True '不允许编辑学号
DataGrid1.Columns(1).Locked = True '不允许编辑姓名
DataGrid1.Columns(2).Locked = True '不允许编辑课程代码
'建表菜单当记录集为空时使能,不为空时禁止
If Adodc1.Recordset.RecordCount = 0 Then
Call SetCreTableMenuAndButtonEn(True)
Else
Call SetCreTableMenuAndButtonEn(False)
End If
精品资料.为你而备
Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象
cn.BeginTrans '开始一个新事务
End Sub
'当前单元位置改变事件
Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As
Integer)
Dim dbrow As Long, s1$, s2$, s3$ '确定记录指针
On Error Resume Next
With Adodc1.Recordset
If .RecordCount = 0 Then
dbrow = .RecordCount
Else
dbrow = .AbsolutePosition
End If
s1 = "当前记录位置:" & dbrow
s2 = "记录总数:" & Adodc1.Recordset.RecordCount
s3 = "提示:" & Adodc1.Recordset.Fields(DataGrid1.Col).Name & "最多只允许输入" & _
Adodc1.Recordset.Fields(DataGrid1.Col).DefinedSize & "位字符~"
StatBar.Panels(1).Text = s1
StatBar.Panels(2).Text = s2
StatBar.Panels(3).Text = s3 End With
End Sub
'建表过程,新建成绩录入表
Public Sub CreateScoreTable()
Dim mrs As New ADODB.Recordset, msql$, szyArray() As String,
skcArray() As String, i%
szyArray = Split(zyComb.Text): skcArray = Split(kcComb.Text)
msql = "select number,name from students where number like '" &
njComb.Text _
& szyArray(1) & szyArray(2) & bjComb.Text & "%'" & " order by
number asc"
Set mrs = ExecuteSQL(msql)
If mrs.RecordCount > 0 Then
mrs.MoveFirst
For i = 1 To mrs.RecordCount
Adodc1.Recordset.AddNew
Adodc1.Recordset.Fields("学号").Value =
精品资料.为你而备
mrs.Fields("number").Value
Adodc1.Recordset.Fields("姓名").Value = mrs.Fields("name").Value
Adodc1.Recordset.Fields("课程代码").Value = skcArray(1)
mrs.MoveNext
Next i
DataGrid1.Refresh
DataEdited = True
'建表菜单和建表工具栏按钮失效
StudentMIS.mOpe_CreTable.Enabled = False
StudentMIS.Toolbar1.Buttons("New").Enabled = False
Else
MsgBox "无所选年级专业班的学生信息,请检查选定条件是否正确!", vbInformation, "提示"
End If
End Sub
Public Sub SaveData()
'保存全部修改
On Error GoTo errhandler:
If Adodc1.Recordset.RecordCount > 0 Then Adodc1.Recordset.MoveFirst
Adodc1.Recordset.UpdateBatch
cn.CommitTrans '提交事务
DataEdited = False
DataGrid1.Refresh
Adodc1.Refresh
DataGrid1.Columns(0).Locked = True '不允许编辑学号
DataGrid1.Columns(1).Locked = True '不允许编辑姓名
DataGrid1.Columns(2).Locked = True '不允许编辑课程代码
'建表菜单当记录集为空时使能,不为空时禁止
If Adodc1.Recordset.RecordCount = 0 Then
Call SetCreTableMenuAndButtonEn(True)
Else
Call SetCreTableMenuAndButtonEn(False)
End If
Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对象
cn.BeginTrans '开始一个新事务
Exit Sub
errhandler:
'显示与数据库操作规则有关的错误信息
Call ShowDbRuleErrInf("学号")
End Sub
精品资料.为你而备
Public Sub CancelData()
'还原全部修改
On Error GoTo errhandler:
If Adodc1.Recordset.RecordCount > 0 Then Adodc1.Recordset.MoveFirst
Adodc1.Recordset.CancelBatch
cn.RollbackTrans '回滚事务
DataEdited = False
DataGrid1.Refresh
Adodc1.Refresh
DataGrid1.Columns(0).Locked = True '不允许编辑学号
DataGrid1.Columns(1).Locked = True '不允许编辑姓名
DataGrid1.Columns(2).Locked = True '不允许编辑课程代码
'建表菜单当记录集为空时使能,不为空时禁止
If Adodc1.Recordset.RecordCount = 0 Then
Call SetCreTableMenuAndButtonEn(True)
Else
Call SetCreTableMenuAndButtonEn(False)
End If
Set cn = Adodc1.Recordset.ActiveConnection '获取当前记录集的连接对
象
cn.BeginTrans '开始一个新事务
Exit Sub
errhandler:
'显示与数据库操作规则有关的错误信息
Call ShowDbRuleErrInf("学号")
End Sub
Public Sub ClearData()
'删空当前记录集
Call DBRecordset_Delete(Adodc1.Recordset)
DataGrid1.Refresh
'设置修改标志
DataEdited = True
'建表菜单当记录集为空时使能,不为空时禁止
If Adodc1.Recordset.RecordCount = 0 Then
Call SetCreTableMenuAndButtonEn(True)
Else
Call SetCreTableMenuAndButtonEn(False)
End If
End Sub
Public Sub DeleteData()
'删除当前记录
'当前单元在最后一行,但没有 AddNew 操作,被挂起情况下退出该过程
精品资料.为你而备
If DataGrid1.AddNewMode = dbgAddNewCurrent Or Adodc1.Recordset.RecordCount = 0 Then
Exit Sub
End If
Adodc1.Recordset.Bookmark = DataGrid1.Bookmark
Adodc1.Recordset.Delete
'设置修改标志
DataEdited = True
DataGrid1.Refresh
'建表菜单当记录集为空时使能,不为空时禁止
If Adodc1.Recordset.RecordCount = 0 Then
Call SetCreTableMenuAndButtonEn(True)
Else
Call SetCreTableMenuAndButtonEn(False)
End If
End Sub
8标准模块代码:
Option Explicit
'数据库文件路径
Public StudentDBfile As String
'保存用户权限(是否为超级用户)
Public bolAuthority As Boolean
'>>执行SQL命令,参数为SQL语句字符串表达式,函数返回执行后的结果记录集
Public Function ExecuteSQL(ByVal sql As String) As ADODB.Recordset
Dim mycon As ADODB.Connection
Dim rst As ADODB.Recordset
Set mycon = New ADODB.Connection
mycon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=" _
& StudentDBfile & ";Persist Security
Info=False"
mycon.Open '打开连接(连接数据源)
If mycon Is Nothing Then
MsgBox "连接失败,请你检查数据库路径~"
End If
Dim sArray() As String
On Error GoTo executesql_error
sArray = Split(sql)
If InStr("INSERT,DELETE,UPDATE", UCase(sArray(0))) Then
mycon.Execute sql
精品资料.为你而备
Else
Set rst = New ADODB.Recordset
rst.Open sql, mycon, adOpenKeyset, adLockOptimistic '打开记录集对象
Set ExecuteSQL = rst
End If
executesql_exit:
Set rst = Nothing
Set mycon = Nothing
Exit Function
executesql_error:
Resume executesql_exit End Function
'>>空 Null 转换函数
Public Function TransNull(RsField As Field) As Variant
On Error Resume Next
If IsNull(RsField.Value) Then
Select Case RsField.Type
Case adBoolean
TransNull = False
Case adDate, adChar
TransNull = ""
Case adInteger, adCurrency, adSingle, adDouble
TransNull = 0
Case Else
TransNull = 0
End Select
Else
TransNull = RsField.Value
End If
End Function
'>>置窗体于屏幕中心
Public Sub ScreenCenter(fm As Form) Dim mt!, ml!
With fm
mt = (Screen.Height - .Height) * 0.5
ml = (Screen.Width - .Width) * 0.5
.Move ml, mt
End With
End Sub
'>>MDI子窗口中心定位
精品资料.为你而备
Public Sub CenterPos(parentfm As Form, childfm As Form)
With childfm
.Top = (parentfm.ScaleHeight - .Height) * 0.5
.Left = (parentfm.ScaleWidth - .Width) * 0.5 End With
End Sub
'>>关闭所有MDI子窗体
Public Function unloadChildForm() As Boolean Dim i%
unloadChildForm = True
'Forms 集合的元素代表每一个在应用程序中加载的窗体。包括MDI窗
体,MDI子窗体和非MDI窗体
'Forms 集合只有一个属性Count,指定集合中元素的数目。
If Forms.Count <= 1 Then Exit Function
For i = Forms.Count - 1 To 1 Step -1
Unload Forms(i)
Next i
If Forms.Count > 1 Then unloadChildForm = False End Function
'>>显示的错误提示信息
Public Sub ShowDbRuleErrInf(sName As String)
Select Case Err.Number
Case -2147467259 '违背主关键字唯一性和非空性的规则时
MsgBox sName & "不能出现重复值或空值~", vbCritical, "错误提示
"
End Select
End Sub
'>>删空记录集
Public Sub DBRecordset_Delete(rs As Recordset)
If rs.RecordsetCount = 0 Then Exit Sub
rs.MoveFirst
Do While rs.RecordsetCount > 0
rs.Delete : rs.MoveNext
Loop
End Sub
'为一般用户设置访问权限
If Not bolAuthority Then .mSys_User.Enabled = False
End With
End Sub
精品资料.为你而备
'>>填充组合框
Public Sub ADDComboListRS(mbox As Object,rs As Recordset,AllEnable As
Boolean,fld1Name As String,Optional fld2Name,Optional fld3Name,)
'fld1Name为要添加到ComboBox控件中的记录集字段名
'fld2Name为可选字段名,存在时将该字段作为fld1Name字段的附加信息
Dim i%
mbox.Clear
If AllEnable = True Then
mbox.AddItem "全部"
End If
If rs.RecordCount > 0 Then
For i = 1 To rs.RecordCount
If IsMissing(fld2Name) Then
mbox.AddItem rs(fld1Name)
Else
If IsMissing(fld3Name) Then
mbox.AddItem rs(fld1Name) & " " & rs(fld2Name)
Else
mbox.AddItem rs(fld1Name) & " " & rs(fld2Name) & " " &
rs(fld3Name)
End If
End If
rs.MoveNext
Next i
End If
If mbox.ListCount > 0 Then mbox.ListIndex = 0 End Sub
'>>构造学生表查询SQL语句
Public Function CreateSqlStu(sql$,Optional snj,Optional szy,Optional
sbj) As String
'说明:like为模糊查询,"_"代表任意一个单字符,"%"代表任意多个字符
Dim qrySql$
qrySql = sql
'判别年级参数snj
End Sub
精品资料.为你而备
结 束 语
本系统实现对学校学生的基本信息、课程设置信息、成绩信息等进行计算机管理。从而方便快捷的将庞大的学生信息进行管理。本系统初步完成比较简略,数据存储空间有限,还有待于进一步提高完善。
精品资料.为你而备
致 谢
感谢指导老师对我们课题的指导以及本组所有参与研究讨论的成员。
精品资料.为你而备
参 考 文 献
[1]谭浩强.Visual Basic 程序设计.北京:清华大学出版社.2006年(书)
[2]郑海春. Visual Basic 编程及实例分析教程. 北京:清华大学出版社.
2007年(书)
[3]刘淳.数据库系统原理与应用. 北京:中国水利水电出版社. 2008(书)
[4]Bob Richard Peasley,Wayne Prachniah.Visual BASIC 6 使用指南.田金兰等译.北京:电子工业出版社,2004
[5]David McMahon.rapid application development with visual basic. New
york:McGraw-hill,2002
精品资料.为你而备
附录 Visual Basic 推荐使用的控件前缀
控件类型 前缀 例子 ADO Data ado adoBiblio CheckBox chk chkReadOnly ComboBox cbo cboEnglish CommandButton cmd cmdExit Data dat datBiblio DataCombo dbc dbcAuthor DataGrid dgb dgbTitles DriveListBox drv drvTarget FileListBox fil filSource Form frm frmEntry Frame fra fraLanguage Graph gra graRevenue Grid grd grdPrices HScrollBar hsb hsbVolume Image img imgIcon Lable lbl lblMessage Menu mnu mnuFileOpen Shape shp shpCircle Slider sld sldScale TexBox txt txtLastName Timer tmr tmrAlarm Toolbar tlb tlbActions