学生档案管理系统项目应用开发
数据库应用程序的开发始终算得上是VB编程中的难点,这是因为你不仅要熟悉VB中关于数据库编程方面的知识(当然这是十分简单的)还要了解数据库的知识。本系统主要用来实现学生基本情况和学生成绩的录入、修改、查询、删除和打印等功能。通过本系统,可以了解如何使用Visual Basic来开发一个比较完整的数据库应用程序。用到的数据库控件有DATA、ADO,添加的一个数据环境。
一、系统结构图本系统主要包括学生基本情况更新,学生基本情况维护和学生成绩维护3个大的模块,各个模块的具体功能如图所示:
图1-1 应用程序的功能模块结构图二、数据库的建立本系统用到的数据库是用Visual Basic的外加工具Visual Data Manager(可视化数据管理器)创建,名为student.mdb(是access数据库),其中用到两个表,分别为:基本情况表和学生成绩表。两表的结构如下所示:
表1-1
字段名
类型
宽度
学号
Text
6
姓名
Test
10
性别
Text
2
班级
Text
20
出生年月
Data/Time
8
政治面貌
Text
4
家庭住址
Text
20
电话
Text
8
E_mail
Text
20
照片
Binary
0
表1-2
字段名
类型
宽度
学号
Text
6
课程
Test
8
成绩
Long
4
学期
Integer
制作过程如下:
选择VB外接程序菜单中的可视化数据管理器,进入可视化数据管理器;
在可视化数据管理器中选择文件菜单中的新建选项建立数据库文件,然后从数据库厂家列表中选择要创建的数据库类型(本例选择Microsoft Access中的Version MDB 2.0版本);
在选择要创建的Microsoft Access数据库对话框中,输入数据库名student,按确定按钮进入数据库窗口;
在数据库窗口中单击鼠标右键并从弹出式菜单中选择新建表来创建student.mdb数据库中的两个表(基本情况表和学生成绩表)。
三、各个窗体的设计与实现主窗体的设计与实现首先在VB中新建一个标准工程并起名为成绩管理,在标准工程中添加一个MDI窗体并起名为Frmmain。主窗体的设计界面如图1-2所示:

图1-2 主窗体的设计界面
在主窗体中主要应用了菜单、工具栏和状态栏。下面分别介绍这些组成部分的功能。
菜单的设计菜单是Windows应用程序中的重要组成部分,这里将对每个菜单项及其子菜单的功能进行简单介绍,如表1-1所示。
表1-3 应用程序的菜单项列表主菜单名
子菜单项
菜单功能
数据维护(Repair)
情况表更新(Edit)
显示学生情况表更新窗体
情况表维护(Cedit)
显示学生情况表维护窗体
成绩表维护(Cjwh)
显示学生成绩表维护窗口
退出本系统(Quit1)
退出应用程序
帮助(Help)
关于系统(Absystem)
显示关于系统窗体
系统帮助(Abhelp)
显示系统帮助窗体
退出(Exit)
推出本系统(Quit)
退出应用程序
MID应用程序中,父窗体可以有自己的菜单,子窗体也可以有属于自己的菜单。这些菜单的创建都可以利用Menu Editor来进行创建。
Imagelist控件程序包括一个Imagelist控件,它用来为工具栏提供图片。在程序的基本控件中没有此项控件,添加此控件的方法是在基本控件的空白处点击鼠标右键,在出现的快捷菜单中选择部件,之后在部件对话框中的部件选项卡中选择Microsoft Windows common controls 6.0控件,确定即可。在窗体中添加一个Imagelist控件,名为默认的Imagelist1,再为此控件添加几个图标。
3、工具栏设计工具栏提供了便捷的操作方式来完成应用程序常用的操作。在现在的Windows应用程序中,工具栏已经成为非常主要的组成部分。本例工具栏的设计步骤为:首先在窗体中添加一个toolbar控件,之后为此控件添加6个按钮,并把每个按钮分别和Imagelist1控件的图片绑定。
4、状态栏设计在主窗体上添加一个Statusbar控件,用鼠标右键点击此控件,在属性页的对话框中为窗体添加6个窗格,分别放置窗口信息和显示当前日期和时间。
5、主窗体界面的代码实现
菜单的Click事件代码:
Private Sub CEDIT_Click()
Unload Frmjbgx
Unload frmcj
Unload FrmHELP
Unload Frmwelcome
Unload frmabout
Load Frmjbwh
Frmjbwh.Show
End Sub
Private Sub cjwh_Click()
Unload Frmjbgx
Unload Frmjbwh
Unload FrmHELP
Unload Frmwelcome
Unload frmabout
Load frmcj
frmcj.Show
End Sub
Private Sub EDIT_Click()
Unload Frmjbwh
Unload frmcj
Unload FrmHELP
Unload Frmwelcome
Unload frmabout
Load Frmjbgx
Frmjbgx.Show
End Sub
Private Sub Absystem_Click()
Unload Frmjbgx
Unload frmcj
Unload Frmjbwh
Unload Frmwelcome
Unload frmabout
Load FrmHELP
FrmHELP.Show
End Sub
Private Sub Ahelp_Click()
Unload Frmjbgx
Unload frmcj
Unload FrmHELP
Unload Frmwelcome
Unload Frmjbwh
Load frmabout
frmabout.Show
End Sub
Private Sub quit_Click()
Frmmain.Hide
Unload Frmmain
End Sub
Private Sub quit1_Click()
Frmmain.Hide
Unload Frmmain
End Sub
窗体的Load事件代码:
Private Sub MDIForm_Load()
Load Frmwelcome
Frmwelcome.Show
End Sub
工具栏的Buttonclick事件代码,
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
Select Case Button.Index
Case 1
Unload Frmjbwh
Unload frmcj
Unload FrmHELP
Unload Frmwelcome
Unload frmabout
Load Frmjbgx
Frmjbgx.Show
Case 2
Unload Frmjbgx
Unload frmcj
Unload FrmHELP
Unload Frmwelcome
Unload frmabout
Load Frmjbwh
Frmjbwh.Show
Case 3
Unload Frmjbgx
Unload Frmjbwh
Unload FrmHELP
Unload Frmwelcome
Unload frmabout
Load frmcj
frmcj.Show
Case 4
Unload Frmjbgx
Unload frmcj
Unload FrmHELP
Unload Frmwelcome
Unload Frmjbwh
Load frmabout
frmabout.Show
Case 5
Unload Frmjbgx
Unload frmcj
Unload Frmjbwh
Unload Frmwelcome
Unload frmabout
Load FrmHELP
FrmHELP.Show
Case 6
Frmmain.Hide
Unload Frmmain
End Select
End Sub
(二)学生基本情况更新窗体的设计与实现首先在工程中添加一个标准窗体并起名为Frmjbgx。再在基本空间上添加一个通用对话框控件,方法是在基本控件的空白处按鼠标右键,选择部件,在部件对话框中选择Microsoft Common Dialog Control 6.0控件,按确定按钮。然后在窗体上添加各种控件,如图1-3设计屏幕,然后添加程序代码。在图中,其主要控件、主要属性、控件说明(一些次要控件如按钮、标签,次要属性如Height、Width除非特别,否则将不特别说明,读者可以根据具体情况来设定)如表1-4所示:

图1-3 基本情况更新设计界面
表1-3 控件、主要属性、控件说明表控件名称
主要控件属性名称
属性值
功能说明
Frmjbgx
Caption
基本情况更新
名称
frmjbgx
BorderStyle
2 – Sizable
Mdichild
True
把此窗体作为子窗体
Windowstate
Maximized
运行是最大化
Frame
名称
Frame1
Caption
基本情况更新
CommonDialog
名称
Commondialog1
Data
名称
Data1
Connect
Access
选择Access数据源
Databasename
Student.mdb
选择数据源的名称
Recordsource
基本情况
和数据表进行绑定
Image
名称
Image1
Stretch
True
调整图片大小以适应该控件
Enabled
False
初始状态为不可用
Text
名称
Text1—Text9
text1_text9和数据库Student.mdb的基本情况表的各个字段进行绑定
Datasource
Data1
Datafield
学号—E_MAIL
Enabled
False
初始状态为不可用
Command
名称
Command4
Caption
放弃
Enabled
False
初始状态为不可用
Command
名称
Command10
Caption
添加照片
Enabled
False
初始状态为不可用
注意:在设置Data1的Databasename属性时,不要student.mdb之前的路径,这样可以不限制应用程序的路径。
窗体的运行结果如图1-4所示:

图1-4 基本情况更新窗体的运行结果基本情况更新设计代码实现
添加按钮的Click事件代码:
Private Sub Command1_Click()
On Error Resume Next
‘点击此按钮时,除放弃和添加照片按钮外,其他均不可用
Command2.Enabled = Not Command2.Enabled
Command3.Enabled = Not Command3.Enabled
Command4.Enabled = Not Command4.Enabled
Command5.Enabled = Not Command5.Enabled
Command6.Enabled = Not Command6.Enabled
Command7.Enabled = Not Command7.Enabled
Command8.Enabled = Not Command8.Enabled
Command9.Enabled = Not Command9.Enabled
Command10.Enabled = Not Command10.Enabled
If Command1.Caption = "添 加" Then
Text1.Enabled = True
Text2.Enabled = True
Text3.Enabled = True
Text4.Enabled = True
Text5.Enabled = True
Text6.Enabled = True
Text7.Enabled = True
Text8.Enabled = True
Text9.Enabled = True
Image1.Enabled = True
Command1.Caption = "确 定"
‘添加一条空白记录
Data1.Recordset.AddNew
Text1.SetFocus
Else
Text1.Enabled = False
Text2.Enabled = False
Text3.Enabled = False
Text4.Enabled = False
Text5.Enabled = False
Text6.Enabled = False
Text7.Enabled = False
Text8.Enabled = False
Text9.Enabled = False
Image1.Enabled = False
‘把数据真正添加到表中
Data1.Recordset.Update
Data1.Recordset.MoveLast
Command1.Caption = "添 加"
End If
End Sub
删除按钮的Click事件代码:
Private Sub Command2_Click()
On Error Resume Next
Data1.Recordset.Delete
Data1.Recordset.MoveNext
If Data1.Recordset.EOF Then Data1.Recordset.MoveLast
End Sub
修改按钮的Click事件代码:
Private Sub Command3_Click()
On Error Resume Next
Command1.Enabled = Not Command1.Enabled
Command2.Enabled = Not Command2.Enabled
Command4.Enabled = Not Command4.Enabled
Command5.Enabled = Not Command5.Enabled
Command10.Enabled = Not Command10.Enabled
If Command3.Caption = "修 改" Then
Text1.Enabled = True
Text2.Enabled = True
Text3.Enabled = True
Text4.Enabled = True
Text5.Enabled = True
Text6.Enabled = True
Text7.Enabled = True
Text8.Enabled = True
Text9.Enabled = True
Image1.Enabled = True
Data1.Recordset.EDIT
Text1.SetFocus
Command3.Caption = "确 定"
Else
Command3.Caption = "修 改"
Data1.Recordset.Update
Text1.Enabled = False
Text2.Enabled = False
Text3.Enabled = False
Text4.Enabled = False
Text5.Enabled = False
Text6.Enabled = False
Text7.Enabled = False
Text8.Enabled = False
Text9.Enabled = False
Image1.Enabled = False
End If
End Sub
放弃按钮的Click事件代码:
Private Sub Command4_Click()
On Error Resume Next
Command1.Caption = "添 加"
Command3.Caption = "修 改"
Command1.Enabled = True
Command3.Enabled = True
Command4.Enabled = False
Command5.Enabled = True
Command6.Enabled = True
Command7.Enabled = True
Command8.Enabled = True
Command9.Enabled = True
Data1.UpdateControls
Data1.Recordset.MoveLast
Text1.Enabled = False
Text2.Enabled = False
Text3.Enabled = False
Text4.Enabled = False
Text5.Enabled = False
Text6.Enabled = False
Text7.Enabled = False
Text8.Enabled = False
Text9.Enabled = False
Image1.Enabled = False
End Sub
查询按钮的Click事件代码:
Private Sub Command5_Click()
Dim MNO As String
MNO = InputBox$("请输入学号","查询窗")
Data1.Recordset.FindFirst "学号='" & MNO & "'"
If Data1.Recordset.NoMatch Then MsgBox "无此学号",,"提示"
End Sub
上一个按钮的Click事件代码:
Private Sub Command6_Click()
On Error Resume Next
Data1.Recordset.MovePrevious
If Data1.Recordset.BOF Then Data1.Recordset.MoveFirst
End Sub
下一个按钮的Click事件代码:
Private Sub Command7_Click()
On Error Resume Next
Data1.Recordset.MoveNext
If Data1.Recordset.EOF Then Data1.Recordset.MoveLast
End Sub
第一个按钮的Click事件代码:
Private Sub Command8_Click()
Data1.Recordset.MoveFirst
End Sub
最后一个按钮的Click事件代码:
Private Sub Command9_Click()
Data1.Recordset.MoveLast
End Sub
添加照片按钮的Click事件代码:
Private Sub Command10_Click()
‘调用通用对话框
CommonDialog1 = 1
On Error Resume Next
If CommonDialog1.FileName = "" Then Exit Sub
Image1.Picture = LoadPicture(CommonDialog1.FileName)
‘返回应用程序所在路径
ChDrive Mid(App.Path,1,1)
End Sub
窗体的Load事件代码:
Private Sub Form_Load()
‘是Frame1框架在窗体加载时水平居中
Frame1.Left = Frmjbgx.Width / 2 - Frame1.Width / 2
‘初始化通用对话框
CommonDialog1.FileName = "*.bmp"
CommonDialog1.Filter = "pictures(*.bmp)|*.bmp|pictures(*.jpg)|*.jpg|all files(*.*)|*.*"
CommonDialog1.FilterIndex = 1
End Sub
窗体的Resize事件代码:
Private Sub Form_Resize()
‘窗体的尺寸改变是,Frame1始终水平居中
Frame1.Left = Frmjbgx.Width / 2 - Frame1.Width / 2
End Sub
(三)学生基本情况维护窗体的设计与实现首先在工程中添加一个标准窗体并起名为Frmjbwh。再在工程中添加一个数据环境,数据环境设计器为创建编程的运行时数据访问提供了一个交互的、设计时环境。在设计时,您可以设置 Connection 和 Command 对象的属性值、编写代码响应 ActiveX(R) Data Object (ADO) 事件、执行 Command、创建合计和层次结构。您也可以将 DataEnvironment 对象拖动到窗体或报表中来创建数据绑定控件。
使用数据环境设计器,您可以完成下面的工作,
添加一个数据环境设计器到一个 Visual Basic 工程中。
创建 Connection 对象。
基于存储过程、表、视图、同义词和 SQL 语句创建 Command 对象。
基于 Command 对象的一个分组,或通过与一个或多个 Command 对象相关来创建 command 的层次结构。
为 Connection 和 Recordset 对象编写和运行代码。
从数据环境设计器中拖动一个 Command 对象中的字段到一个 Visual Basic 窗体或数据报表设计器。
本例设置数据环境的方法是:选择工程菜单中的添加Data Environment,出现数据环境对话框如图1-5所示。

图1-5 数据环境对话框在图1-5中,用鼠标右键单击Dataenvironment1下的Connection1选择属性,出现数据连接属性对话框,如图1-6所示。

图1-6 数据连接属性对话框
在图1-6中,在提供程序选项卡中选择数据引擎Microsoft Jet 3.51 OLE DB Provider,按下一步按钮,进入连接选项卡如图1-7所示。

图1-7 数据连接属性的连接选项卡在图1-7中,在选择和输入数据库名称下边的文本框中,选择数据库Student.mdb,注意把student.mdb前边的路径删除掉,这样可以不限制应用程序的路径。
按确定按钮后,回到数据环境对话框,再用鼠标右键单击Connection1,在弹出的快捷菜单中选择添加命令选项,结果如图1-8所示。

图1-8 添加一个命令后的窗口在图1-8中,用鼠标右键单击Command1,在弹出的快捷菜单中选择属性,出现Command1属性对话框,如图1-9所示。

图1-9 Command1属性对话框在入1-9中,在数据源下边数据库对象后的下拉表中选择表,在对象名称后的下拉表中选择基本情况。再在高级选项卡中,把锁定类型设成3-开放式,以便数据环境可以进行修改和删除操作。之后,按确定按钮,回到数据环境对话框。在用鼠标右键点击Command1,在出现的快捷菜单中选择添加子命令,结果如图1-10所示。

图1-10 添加子命令后窗口在图1-10中,再设置command2的属性,方法同设置Command1属性,把Command2的数据对象设为学生成绩表。在关联选项卡中设置用学号同父命令对象相关联。结果如图1-11所示。

图1-11 和父命令对象关联窗口数据环境建立完成后,回到Frmjbwh窗体中,在基本控件中添加一个DataGrid 控件,方法是在基本控件的空白处按鼠标右键,选择部件,在部件对话框中选择Microsoft DataGrid Control 6.0(OLEDB)控件,按确定按钮。DataGrid 控件是一种类似于电子数据表的绑定控件,可以显示一系列行和列来表示 Recordset 对象的记录和字段。可以使用 DataGrid 来创建一个允许最终用户阅读和写入到绝大多数数据库的应用程序。DataGrid 控件可以在设计时快速进行配置,只需少量代码或无需代码。当在设计时设置了 DataGrid 控件的 DataSource 属性后,就会用数据源的记录集来自动填充该控件,以及自动设置该控件的列标头。然后您就可以编辑该网格的列;删除、重新安排、添加列标头、或者调整任意一列的宽度。
在窗体上添加各种控件,如图1-12设计屏幕。在图中,其主要控件、主要属性、控件说明如表1-4所示:

图1-12 学生基本情况维护设计界面表1-4 控件、主要属性、控件说明表控件名称
主要控件属性名称
属性值
功能说明
Frmjbwh
Caption
基本情况维护
名称
Frmjbwh
BorderStyle
2 – Sizable
Mdichild
True
把此窗体作为子窗体
Windowstate
Maximized
运行是最大化
Datagrid
名称
Datagrid1
Datasource
Dataenvironment1
把数据环境设成数据源
Datamember
Command1
数据成员设成数据环境中的Command1命令
窗体的运行结果如图1-13所示:

图1-13 学生基本情况维护的运行结果基本情况维护设计代码实现
在通用区域声明一个全局变量key,以便在选择专业时使用:
Public key As String
选择班级按钮的Click事件代码:
Private Sub selzy_Click()
Me.key = " "
‘把对话框窗体Dialog设置成显示模式
Dialog.Show vbModal
‘按Dialog窗体的key变量的返回值进行筛选
If Me.key <> " " Then
DataEnvironment1.rsCommand1.Filter = "班级='" & key & "'"
Adodc1.Refresh
DataGrid1.AllowUpdate = False
End If
Unload Dialog
End Sub
修改按钮的Click事件代码:
Private Sub Comup_Click()
DataGrid1.AllowUpdate = True
DataGrid1.SetFocus
End Sub
添加按钮的Click事件代码:
Private Sub Comadd_Click()
DataGrid1.AllowUpdate = True
‘添加操作
DataEnvironment1.rsCommand1.AddNew
DataGrid1.SetFocus
End Sub
删除按钮的Click事件代码:
Private Sub Comdel_Click()
‘设置DataGrid1为可删除状态
DataGrid1.AllowDelete = True
DataEnvironment1.rsCommand1.Delete
DataEnvironment1.rsCommand1.MoveNext
If DataEnvironment1.rsCommand1.EOF = True Then DataEnvironment1.rsCommand1.MoveLast
DataGrid1.SetFocus
End Sub
打印按钮的Click事件代码:
Private Sub Comprint_Click()
‘显示并打印报表
DataReport1.Show
End Sub
窗体的Resize事件代码:
Private Sub Form_Resize()
‘使frame1始终居中
Frame1.Left = Frmjbwh.Width / 2 - Frame1.Width / 2
Frame1.Top = Frmjbwh.Height / 2 - Frame1.Height / 2
End Sub
窗体的Unload事件代码:
Private Sub Form_Unload(Cancel As Integer)
‘恢复数据环境的筛选
DataEnvironment1.rsCommand1.Filter = adFilterNone
End Sub
(四)学生基本情况维护中班级选择对话框的设计与实现:
首先,在工程中添加一个对话框起名为Dialog.frm,再在基本控件中添加一个ADO Data控件,方法是在基本控件的空白处按鼠标右键,选择部件,在部件对话框中选择Microsoft ADO Data Control 6.0控件,按确定按钮。这时,基本控件上就出现了ADO Data控件。ADO Data 控件使用 Microsoft ActiveX 数据对象(ADO) 来快速建立数据绑定的控件和数据提供者之间的连接。数据绑定控件是任何具有“数据源”属性的控件。数据提供者可以是任何符合 OLEDB 规范的数据源。使用 Visual Basic 的类模块也可以很方便地创建子集的数据提供者。它还有作为一个图形控件的优势(具有“向前”和“向后”按钮),以及一个易于使用的界面,使您可以用最少的代码创建数据库应用程序。
然后,在窗体上添加各种控件,如图1-14设计屏幕。在图中,其主要控件、主要属性、控件说明如表1-5所示:

图1-14 班级选择窗体设计图表1-5 控件、主要属性、控件说明表控件名称
主要控件属性名称
属性值
功能说明
Dialog
Caption
班级选择对话框
名称
Dialog
Adodc
名称
Adodc1
Connectionstring
Student.mdb
和数据表进行绑定
Recordsource
select * from 基本情况 group by 班级
用SQL语句设置记录原并按班级分组
Visible
False
运行时不可见
Datagrid
名称
Datagrid1
Datasource
Adodc1
把Adodc1设成数据源
代码实现:
选择按钮的Click事件代码:
Private Sub Command1_Click()
‘获取key值
Frmjbwh.key = Me.DataGrid1.Text
Me.Hide
End Sub
取消按钮的Click事件代码:
Private Sub Command2_Click()
Frmjbwh.key = " "
Me.Hide
End Sub
(五)学生成绩维护窗体的设计与实现:
首先在工程中添加一个标准窗体并起名为Frmcjwh。再在窗体上添加一个Frame控件,并使用默认名称Frame1。之后用鼠标双击工程资源管理器中的数据环境Dataenvironment1,用鼠标把Command1拖到窗体的Frame1中来,因为默认Command2默认使用的是MSflexGrid网格不适用本例中,所以把它替换成DataGrid网格,DataGrid网格的使用如前。再把照片字段去掉,添加一个Image控件,并和Command1中的照片字段绑定。最后,添加几个命令按钮。窗体的设计如图1-15所示。在图中,其主要控件、主要属性、控件说明如表1-6所示:

图1-15 学生成绩维护窗体设计图表1-5 控件、主要属性、控件说明表
控件名称
主要控件属性名称
属性值
功能说明
Frmcjwh
Caption
学生成绩维护
名称
Frmcjwh
BorderStyle
2 – Sizable
Mdichild
True
把此窗体作为子窗体
Windowstate
Maximized
运行是最大化
Datagrid
名称
Datagrid1
Datasource
Dataenvironment1
把数据环境设成数据源
Datamember
Command2
数据成员设成数据环境中的Command2命令
Image
名称
Image1
Stretch
True
调整图片大小以适应该控件
Enabled
False
初始状态为不可用
窗体的运行结果如图1-16所示:

图1-16 学生成绩维护运行窗体
学生成绩维护设计代码实现:
在通用区域声明两个全局变量findxhstr和findbjstr,以便查找时使用:
Public findxhstr As String
Public findbjstr As String
第一个按钮的Click事件代码:
Private Sub Command1_Click()
DataEnvironment1.rsCommand1.MoveFirst
End Sub
上一个按钮的Click事件代码:
Private Sub Command2_Click()
DataEnvironment1.rsCommand1.MovePrevious
If DataEnvironment1.rsCommand1.BOF Then
DataEnvironment1.rsCommand1.MoveFirst
End If
End Sub
下一个按钮的Click事件代码:
Private Sub Command3_Click( )
DataEnvironment1.rsCommand1.MoveNext
If DataEnvironment1.rsCommand1.EOF Then
DataEnvironment1.rsCommand1.MoveLast
End If
End Sub
最后一个按钮的Click事件代码:
Private Sub Command4_Click()
DataEnvironment1.rsCommand1.MoveLast
End Sub
添加成绩按钮的Click事件代码:
Private Sub Command5_Click()
DataGrid1.AllowAddNew = True
End Sub
查找按钮的Click事件代码:
Private Sub Command6_Click()
Me.findxhstr = " "
Me.findbjstr = " "
Dialog1.Show vbModal
‘用Dialog1窗体的返回值还过滤数据环境
If Me.findxhstr <> " " Then
DataEnvironment1.rsCommand1.Filter = "学号 = '" & findxhstr & "'"
End If
If Me.findbjstr <> " " Then
DataEnvironment1.rsCommand1.Filter = "班级 = '" & findbjstr & "'"
End If
Unload Dialog1
End Sub
打印按钮的Click事件代码:
Private Sub Command7_Click()
DataReport2.Show
End Sub
DataGrid1的LostFocus事件代码:
Private Sub DataGrid1_LostFocus()
‘在DataGrid1失去焦点时,使其进入不添加状态
DataGrid1.AllowAddNew = False
End Sub
窗体的Load事件代码:
Private Sub Form_Load()
‘使Frame1在窗体装载时就处于水平居中
Frame1.Left = frmcj.Width / 2 - Frame1.Width / 2
End Sub
窗体的Resize事件代码:
Private Sub Form_Resize()
‘使Frame1在窗体的大小发生改变时处于水平居中
Frame1.Left = frmcj.Width / 2 - Frame1.Width / 2
End Sub
(六)学生成绩维护中查找对话框的设计与实现:
此模块的实现和学生基本情况维护中班级选择对话框基本相似,在此只给出各个控件的主要属性和程序代码。
窗体的设计如图1-17所示:

图1-17 查找对话框的设计图其主要控件、主要属性、控件说明如表1-7所示:
控件名称
主要控件属性名称
属性值
功能说明
Dialog
Caption
查找对话框
名称
Dialog1
Adodc
名称
Adodc1
Connectionstring
Student.mdb
和数据表进行绑定
Recordsource
select * from 基本情况 group by 班级
用SQL语句设置记录原并按班级分组
Datagrid
名称
Datagrid1
Datasource
Adodc1
把Adodc1设成数据源
Label
名称
Label1
Caption
请出入学生学号:
此对话框运行结果如图1-18所示:

图1-18 对话框的运行结果
此对话框运行时点击查找个人单选按钮时的结果如图1-19所示:

图1-19 选择查找个人的运行结果
此对话框运行时点击查找班级单选按钮时的结果如图1-20所示:

图1-20 选择查找班级的运行结果
查找对话框代码实现:
窗体的Load事件代码:
Private Sub Form_Load()
Text1.Visible = False
DataGrid1.Visible = False
Label1.Visible = False
End Sub
确定按钮的Click事件代码:
Private Sub OKButton_Click()
If Option1.Value And Text1.Text <> "" Then
frmcj.findxhstr = Trim(Text1.Text)
Me.Hide
End If
If Option2.Value Then
frmcj.findbjstr = Me.DataGrid1.Text
Me.Hide
End If
End Sub
取消按钮的Click事件代码:
Private Sub CancelButton_Click()
Me.Hide
End Sub
查找个人单选按钮的Click事件代码:
Private Sub Option1_Click()
Text1.Visible = True
Label1.Visible = True
DataGrid1.Visible = False
Text1.SetFocus
End Sub
查找个人单选按钮的Click事件代码:
Private Sub Option2_Click()
Text1.Visible = False
Label1.Visible = False
DataGrid1.Visible = True
DataGrid1.SetFocus
End Sub
(七)报表Datareport1的设计与实现:
DataReport 对象与 Visual Basic 窗体类似,DataReport 对象同时具有一个可视的设计器和一个代码模块。可以使用设计器创建报表的布局。也可以向设计器的代码模块添加代码,以采用编程方式调整设计器中包含的控件或部分的格式。运行时,使用Show方法显示数据报表。
本例的报表实现的步骤如下:
选择工程菜单中的添加Data Report,添加一个数据报表,名称使用默认的Datareport1;
设定DataReport对象的DataSource属性为数据源为Environment1;
设定DataReport对象的DataMember属性为数据成员为Command1;
右键单击设计器,并单击“检索结构”;
向相应的节添加相应的控件;
报表Datareport1的设计界面如图1-21所示:

图1-21 报表的设计图报表Datareport1的运行界面如图1-22所示:

图1-22 报表的运行界面
报表的结束(Terminate)事件代码:
Private Sub DataReport_Terminate()
‘因为报表结束时,指针指到数据表的开始标志,所以在报表结束时,让指针指到第一条记录
DataEnvironment1.rsCommand1.Movefirst
End Sub
(八)报表Datareport2的设计与实现:
报表Datareport2的设计方法同Datareport1基本相同,此处就不在叙述。在此,只给出设计界面和运行界面。
报表Datareport2的设计界面如图1-23所示:

图1-23 报表的设计界面报表Datareport2的运行界面如图1-24所示:

图1-24 报表的运行界面
(九)关于系统和系统帮助窗体的设计与实现:
由于这两个窗体的设计很简单,所以在此只给出窗体的运行结果。
关于系统窗体的运行窗体如图1-25所示:

图1-25 关于系统的运行窗体系统帮助窗体的运行窗体如图1-26所示:

图1-26 系统帮助的运行窗体