一、实验目的
1.掌握 VB 编写数据库应用程序的方法。
2.学会使用 SQL 语言实现数据查询与统计。
3.掌握多文档窗体的建立及菜单的编辑方法。
4.学会将工程构成一个完整的应用程序并生成 EXE 程序。
二、实验准备
1.了解 Visual Basic 开发数据库应用的步骤。
2.了解窗体之间的参数传递方法。
3.了解菜单编辑器的使用与菜单项的编程方法。
4.了解多文档窗体的建立及其子窗体属性设置方法。
三、实验内容及步骤
1.通过用户选择院系和班级信息,查询某班的所有学生信息。
(1)新建 VB 工程并命名为 pdb2。
(2) 创建窗体 Form1, 在窗体上添加一个 ComboBox 控件 (名称为 Combo1) 和一个 ADO
数据控件(名称为 Adodc1)。
(3)建立 Adodc1 控件与数据库 student_db 的连接并使其记录集为 D_Info 表的所有院系 信息。若设置 Adodc1.CommandType 属性为 1adCmdText,则将 Adodc1.RecordSource 属性值 设置为________。
(4)在窗体 Form1 装载时,将 Adodc1 控件记录集的 D_Name 字段值填充到 Combo1 控 件的列表中,应通过方法 AddItem 实现,可以使用如下代码:
Adodc1.Refresh
' Did 为已定义的动态字符串数组,存放 Combo1 控件列表项对应的院系编号 ReDim Did(Adodc1.Recordset.RecordCount)
i = 0
Do While _______ Adodc1.Recordset.EOF
Combo1.AddItem Adodc1.Recordset.Fields("D_Name")
分析:该段代码应放在 Form1 的哪个事件过程中?语句 Combo1.ListIndex = 0 有什么作 用?Combo1 控件是否必须与 Adodc1 控件绑定?
(5)参照 Combo1 控件的院系操作,在窗体 Form1 中再添加 ComboBox 控件(名称为 Combo2),使用 Adodc1 控件为其列表填充班级名称数据。这样,Adodc1 控件的记录集就必 须修改为 Combo1 控件选定的院系的所有班级名,应查询 St_Info 表中 St_ID 的前两个字符与 Combo1 控件当前选项对应的 Did 元素值相等的所有记录,其代码如下:
Private Sub Combo1_Click()
Adodc1.RecordSource = "SELECT DISTINCT Cl_Name FROM St_Info WHERE left(St_ID,2)='" _
& Did(Combo1.ListIndex) & "'"
Adodc1. ________ ’
Do While Not Adodc1.Recordset.EOF
Combo2.AddItem Adodc1.Recordset.Fields("Cl_Name") Adodc1.Recordset . ________ ’ Loop
End Sub
请完成该段代码并运行,其操作界面如图 19.2 所示,当用户选择“法学院”选项时班级 列表中将显示该院的所有班级名称。
图 19.2 使用组合框选择班级名称
分析: 为什么 Combo2 控件的班级查询和列表填充的操作要放在 Combo1_Click 事件过程中?
(6)在窗体 Form1 中添加一个 ADO Data 控件(名称为 Adodc2)和一个 DataGrid 控件
(名称为 DataGrid1)使 DataGrid1 控件与 Adodc2 控件绑定。将 Adodc2 控件的记录集设置为 St_Info 表中由 Combo2 控件当前选定的班级的所有学生记录,如图 19.3 所示。
图 19.3 使用数据网格控件显示选定班级的学生信息 Adodc2 控件的记录集使用以下代码设置:
Adodc2.RecordSource = "SELECT * FROM St_Info WHERE Cl_Name='" & Combo2.Text & "'"
Adodc2.Refresh
分析:该代码应放在什么事件过程中?
运行窗体 Form1,将班级名称选择为“法学 0601” ,查看 DataGrid1 控件显示的学生信息。
2.通过选择课程名称和班级名称查询某班某课程的学生成绩。要求通过组合框选择课程 名称和班组名称,使用数据网格控件显示选定课程与班级的学生成绩。
(1)在工程 pdb2 中创建窗体 Form2,参照实验内容 1 的操作步骤(1)~(3)添加控件,
其运行界面如图 19.4 所示。
图 19.4 “查询班级学生成绩”窗体
(2)在 Form_Load 事件过程中,参照实验内容 1 的步骤(4)初始化“课程”和“班级”
组合框,使其列表分别填充课程名称和班级名称,同时将课程编号存储到一个动态数组中。
(3)参照实验内容 1 的步骤(6)使数据网格控件与一个 ADO Data 控件绑定,设置其记 录集为 S_C_Info 表中被选择课程和班级的学生成绩记录。
3.在工程 pdb2 中创建窗体 Form3,当用户单击窗体 Form1 的网格控件的一个数据行时 调用 Form3,使 Form3 以网格形式显示 Form1 中被选择学生的所有成绩(包括课程名称和成 绩)并统计该学生的所修学分总数,以标签方式显示,如图 19.5 所示。
图 19.5 查询学生成绩并统计学分
提示: 当用户单击窗体 Form1 的 DataGrid1 控件的数据行时, 由于它与 Adodc2 控件绑定,
因此 Adodc2 控件的记录指针也移动到被选择学生的记录, 该学生的学号与姓名可通过 Adodc2.
Recordset.Fields("St_ID")获取,并将该学号、姓名传递给窗体 Form3。窗体 Form3 的调用由 DataGrid1_Click 事件过程来执行。
4.在工程 pdb2 中新建多文档窗体 MDIForm(名称为 MDIForm1),编辑如图 19.6 所示的 菜单使窗体 MDIForm1 成为工程 pdb2 的启动窗体,并使两个菜单项分别调用窗体 Form1 和 Form2。
图 19.6 多文档窗体及菜单界面 提示:将窗体 Form1 与 Form2 的 MDIChild 属性修改为 True。
5.将工程 pdb2 生成 pdb2.exe 执行程序并让 Windows 运行 pdb2.exe。
四、实验思考
1.若将 Form1 中的“院系”组合框与“班级”组合框使用 DataCombo 控件建立,是否 能用 AddItem 方法为其列表添加数据项?如何用 DataCombo 控件实现 Form1 的班级学生信息 查询功能?
2.若将 Form3 网格控件的标题设置为“课程名称” 、 “成绩” 、 “学分” ,应如何实现?