2k likes | 2.06k Views
数据库应用程序设计方法. 第 7 章. 7.1 成绩查询程序设计 7.1.1 任务概述 要编写一个实用的数据库程序,必须系统地学习过数据库原理的知识,并首先设计出符合用户业务需求的数据库体系,然后才能利用某种语言,开发出针对这个数据库的交互程序:数据库应用程序。. 下面以一个简化的数据库设计为例: 1. 进行数据库设计 建立一个名为 “ 成绩 ” 的数据库,其中包含三张数据表,即学习成绩表、学生情况表、课程情况表。. 创建数据库. 创建表结构. 2. 程序的主要功能
E N D
数据库应用程序设计方法 第7章
7.1 成绩查询程序设计 7.1.1 任务概述 要编写一个实用的数据库程序,必须系统地学习过数据库原理的知识,并首先设计出符合用户业务需求的数据库体系,然后才能利用某种语言,开发出针对这个数据库的交互程序:数据库应用程序。
下面以一个简化的数据库设计为例: 1.进行数据库设计 建立一个名为“成绩”的数据库,其中包含三张数据表,即学习成绩表、学生情况表、课程情况表。 创建数据库
2. 程序的主要功能 利用SQL语句完成对学生成绩表的插入、修改、删除和查询操作。比如: (1)插入记录: Insert Into 学生成绩表(学号,课程号,成绩) Values(‘001’,’001’,85) (2)删除记录 Delete From 学生成绩表 Where 学号=‘001’ And 课程号=‘001’ (3)修改记录 Update 学生成绩表 set 成绩 =90 Where 学号=‘001’ And 课程号=‘001’ (4)按学号查询 Select * From 学生成绩表 Where 学号=‘001’
在完成用户界面设计的基础上,只要将上述SQL语句“嵌入”到VB程序中,即可完成成绩查询程序的开发,这种范式通常称为嵌入式开发.在完成用户界面设计的基础上,只要将上述SQL语句“嵌入”到VB程序中,即可完成成绩查询程序的开发,这种范式通常称为嵌入式开发.
7.1.2 界面设计 1.创建工程 新建一“标准EXE”工程.工程名为“成绩查询”. 2.创建主窗体(frmMain) 设计菜单: 增加 删除 修改 查询 退出 增加学生记录 删除学生记录 增加课程记录 删除课程记录 增加成绩 删除成绩记录 增加用户 删除用户
7.1.3 代码设计 1. 连接数据库代码 步骤: (1)通过“工程—引用”菜单添加对象库: Microsoft Activex Data Objects 2.7 Library (Ado数据对象)。 (2)通过工程菜单添加一个模块(Module), 并设计以下代码。 (3)通过“工程—工程1属性”菜单,将窗体frmText过程设计设置为启动对象。
添加模块代码: '声明全局对象变量ABOcn,用于创建于数据库的连接 Public ADDcn As Connection Public Sub main() '定义数据库连接字符串 Dim strSQLServer As String '用于连接SQL Server数据库,其中: 'Server为服务器名称 'User ID为登录账号 'Password为登录口令 'Database为具体的数据库名
strSQLServer = strSQLServer = "Provider = SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=成绩;Data Source=lg" '如果还没有建立于数据库的连接,则用以下代码创建. If ADDcn Is Nothing Then Set ADDcn = New Connection AdDDcn.Open strSQLServer End If End Sub
完成本项工作后,就创建了一个全局变量ADDcn,但它是一个特殊的变量,其数据类型是数据连接对象(Connection对象)。可以把ADDcn理解成是一个虚拟的数据库。或者称为VB程序中的逻辑数据库,通过它可以非常方便地访问其中的数据。换句话说,ADDcn是VB程序的后台数据库交互的通道。完成本项工作后,就创建了一个全局变量ADDcn,但它是一个特殊的变量,其数据类型是数据连接对象(Connection对象)。可以把ADDcn理解成是一个虚拟的数据库。或者称为VB程序中的逻辑数据库,通过它可以非常方便地访问其中的数据。换句话说,ADDcn是VB程序的后台数据库交互的通道。
2.设置窗体间的调用关系 ’调用增加课程窗体 Private Sub AddCourse_Click(Index As Integer) frmAddCourse.Show End Sub ’调用增加成绩窗体 Private Sub AddGrade_Click(Index As Integer) FrmAdd.Show End Sub ’调用增加学生窗体 Private Sub AddStudent_Click(Index As Integer) FrmAddStudent.Show End Sub
2.设置窗体间的调用关系 ’调用增加用户窗体 Private Sub AddUser_Click() FrmAddUser.Show End Sub ’调用删除课程窗体 Private Sub DeleteCourse_Click() frmDeleteCourse.Show End Sub ’调用删除成绩窗体 Private Sub DeleteGrade_Click() frmDelete.Show End Sub
2.设置窗体间的调用关系 ’调用删除学生窗体 Private Sub DeleteStudent_Click() frmDeleteStudent.Show End Sub ’调用删除用户窗体 Private Sub DeleteUser_Click() frmDeleteUser.Show End Sub ’调用成绩查询窗体 Private Sub Query_Click() frmQuery.Show End Sub
2.设置窗体间的调用关系 ’调用修改成绩窗体 Private Sub Update_Click() FrmUpdate.Show End Sub 调用退出程序 Private Sub Exit_Click() End End Sub
3.frmAddStusent窗体的代码设计: (1)在Load事件中,进行初始化工作,代码如下: Private Sub Form_Load() Main '声明一个记录集对象 Dim ADOrs As New Recordset '初始化文本框控件 Text1.Text = "" Text2.Text = "" End Sub
3.frmAddStusent窗体的代码设计: (2)’Command1_Click()(”确定”按钮)事件代码 Private Sub Command1_Click() Dim strSQL As String '声明一个记录集对象 Dim ADOrs As New Recordset '与ADOcn连接对象关联 ADOrs.ActiveConnection = ADOcn If Text1.Text = "" Then MsgBox "未输入学号,请重新输入数据!", vbCritical + vbOKOnly Exit Sub End If
3.frmAddStusent窗体的代码设计: ’Command1_Click()(”确定”按钮)事件代码 If Text2.Text = "" Then MsgBox “未输入姓名,请重新输入数据!”, vbCritical + vbOKOnly Exit Sub End If '首先查询表中是否存在关键字相同的记录 strSQL = "select * from 学生情况表" strSQL = strSQL & " Where 学号='" + Text1.Text + " '" strSQL = strSQL & " and 姓名='" + Text2.Text + "'" ADOrs.Open strSQL
3.frmAddStusent窗体的代码设计: ’Command1_Click()(”确定”按钮)事件代码 '如果关键字重复,则退出 If Not ADOrs.EOF Then MsgBox "该记录已经存在,不能继续增加", vbCritical + vbOKOnly Exit Sub End If
3.frmAddStusent窗体的代码设计: ’Command1_Click()(”确定”按钮)事件代码 '拼写Insert插入语句 strSQL = "Insert Into 学生情况表(学号,姓名)" strSQL = strSQL + " Values('" + Text1.Text + "'," strSQL = strSQL + "'" + Text2.Text + "'" + ")" '执行Insert语句 ADOcn.Execute strSQL MsgBox "已成功添加新记录", vbQuestion + vbOKOnly End Sub
3.frmAddStusent窗体的代码设计: (3)’Command2_Click()(”返回”按钮)事件代码 Private Sub Command2_Click() Unload Me frmMain.Show End Sub
frmAddCourse窗体的代码设计: (1)在Load事件中,进行初始化工作,代码如下: Private Sub Form_Load() Main '声明一个记录集对象 Dim ADOrs As New Recordset '初始化文本框控件 Text1.Text = "" Text2.Text = "" End Sub
frmAddCourse窗体的代码设计: (1)在Load事件中代码 Dim strSQL As String '声明一个记录集对象 Dim ADOrs As New Recordset '与ADOcn连接对象关联 ADOrs.ActiveConnection = ADOcn If Text1.Text = "" Then MsgBox “未输入课程号,请重新输入数据!”, vbCritical + vbOKOnly Exit Sub End If
frmAddCourse窗体的代码设计: (1)在Load事件中,进行初始化工作,代码如下: If Text2.Text = "" Then MsgBox "未输入课程名,请重新输入数据!", vbCritical + vbOKOnly Exit Sub End If '首先查询课程情况表中是否存在关键字相同的记录 strSQL = "select * from 课程情况表" strSQL=strSQL &" Where 课程号='" + Text1.Text + " '" strSQL=strSQL & " and 课程名='" + Text2.Text + "'" ADOrs.Open strSQL
(1)在Load事件代码 '如果关键字重复,则退出 If Not ADOrs.EOF Then MsgBox "该记录已经存在,不能继续增加", vbCritical + vbOKOnly Exit Sub End If '拼写Insert插入语句 strSQL = "Insert Into 课程情况表" strSQL = strSQL + " Values('" + Text1.Text + "'," strSQL = strSQL + "'" + Text2.Text + "'" + ")" '执行Insert语句 ADOcn.Execute strSQL MsgBox "已成功添加新记录", vbQuestion + vbOKOnly End Sub
frmAddCourse窗体的代码设计: (1)在Load事件中,进行初始化工作,代码如下: '如果关键字重复,则退出 If Not ADOrs.EOF Then MsgBox "该记录已经存在,不能继续增加", vbCritical + vbOKOnly Exit Sub End If '拼写Insert插入语句 strSQL = "Insert Into 课程情况表" strSQL = strSQL + " Values('" + Text1.Text + "'," strSQL = strSQL + "'" + Text2.Text + "'" + ")" '执行Insert语句 ADOcn.Execute strSQL MsgBox "已成功添加新记录", vbQuestion + vbOKOnly End Sub Private Sub Command2_Click() Unload Me frmMain.Show End Sub
(2)双击“确认”按钮后,添加如下代码: Private Sub Command1_Click() Dim strSQL As String '声明一个记录集对象 Dim ADOrs As New Recordset '与ADOcn连接对象关联 ADOrs.ActiveConnection = ADOcn '首先查询表中是否存在关键字相同的记录 strSQL = "select * from 学生情况表" strSQL = strSQL & " Where 学号='" + Text1.Text + " '" strSQL = strSQL & " and 姓名='" + Text2.Text + "'" ADOrs.Open strSQL
'如果关键字重复,则退出 If Not ADOrs.EOF Then MsgBox "该记录已经存在,不能继续增加", vbCritical + vbOKOnly Exit Sub End If '拼写Insert插入语句 strSQL = "Insert Into 学生情况表(学号,姓名)" strSQL = strSQL + " Values('" + Text1.Text + "'," strSQL = strSQL + "'" + Text2.Text + "'" + ")" '执行Insert语句 ADOcn.Execute strSQL MsgBox "已成功添加新记录", vbQuestion + vbOKOnly End Sub
双击“返回”按钮后,添加如下代码: Private Sub Command2_Click() Unload Me frmMain.Show End Sub
5.frmAdd(增加成绩)窗体的代码设计: (1)在Load事件中,进行初始化工作,代码如下: Private Sub Form_Load() Main '声明一个记录集对象 Dim ADOrs As New Recordset Dim ADOrs1 As New Recordset '与ADOcn连接对象关联 ADOrs.ActiveConnection = ADOcn ADOrs1.ActiveConnection = ADOcn '对Combo1组合框进行初始化 ADOrs.Open "Select 学号 From 学生情况表 Order By 学号" Combo1.Clear Do While Not ADOrs.EOF '添加"学号"字段值 Combo1.AddItem Trim(ADOrs.Fields("学号")) '取下一条记录 ADOrs.MoveNext Loop
5.frmAdd(增加成绩)窗体的代码设计: (1)Load事件代码 '对Combo2组合框进行初始化 ADOrs.Close ADOrs.Open "select 课程号 from 课程情况表 Order By 课程号" Combo2.Clear Do While Not ADOrs.EOF '添加"课程号"字段值 Combo2.AddItem Trim(ADOrs.Fields("课程号")) '取下一条记录 ADOrs.MoveNext Loop ADOrs.Close '初始化文本框控件 Text1.Text = "" Text2.Text = "" Text3.Text = "0" End Sub
5.frmAdd(增加成绩)窗体的代码设计: (2) Command3_Click 事件代码 Private Sub Command3_Click() '声明一个记录集对象 Dim ADOrs As New Recordset '与ADOcn连接对象关联 ’如果输入了学号,则把姓名显示在Text1.Text ADOrs.ActiveConnection = ADOcn strSQL = "select * from 学生情况表" strSQL = strSQL + " Where 学号='" + Combo1.Text + " '" ADOrs.Open strSQL Text1.Text = ADOrs.Fields("姓名")
5.frmAdd(增加成绩)窗体的代码设计: (2) Command3_Click 事件代码 ‘如果输入了课程号,则把课程名显示在Text2.text '声明一个记录集对象 Dim ADOrs1 As New Recordset '与ADOcn连接对象关联 ADOrs1.ActiveConnection = ADOcn strSQL = "select * from 课程情况表" strSQL=strSQL+" Where 课程号='" + Combo2.Text + " '" ADOrs1.Open strSQL Text2.Text = ADOrs1.Fields("课程名") End Sub
5.frmAdd(增加成绩)窗体的代码设计: (3) Command1_Click(确认) 事件代码 Private Sub Command1_Click() Dim strSQL As String '声明一个记录集对象 Dim ADOrs As New Recordset '与ADOcn连接对象关联 ADOrs.ActiveConnection = ADOcn If Combo1.Text = "" Or Combo2.Text = "" Then MsgBox "输入数据不全,请重新输入数据!", vbCritical + vbOKOnly Exit Sub End If