270 likes | 426 Views
Visual Basic 程序设计教程. 第 12 章 数据库功能. 12.1 数据库的基本概念 12.1.1 关系数据库 12.1.2 数据访问对象模型 12.1.3 结构化查询语言 SQL 12.1.4 数据库的分类 12.2 数据管理器的使用 12.2.1 建立一个数据库 12.2.2 添加数据表 12.2.3 数据的增、删、改 12.2.4 查询 12.2.5 数据窗体设计器 12.2.6 数据控件与数据感知控件. 12.3 ADO 数据对象访问技术
E N D
第12章 数据库功能 12.1数据库的基本概念 12.1.1 关系数据库 12.1.2 数据访问对象模型 12.1.3 结构化查询语言SQL 12.1.4 数据库的分类 12.2数据管理器的使用 12.2.1 建立一个数据库 12.2.2 添加数据表 12.2.3 数据的增、删、改 12.2.4 查询 12.2.5 数据窗体设计器 12.2.6 数据控件与数据感知控件 12.3ADO数据对象访问技术 12.3.1 ADO编程模型简介 12.3.3 使用ADO控件 12.3.4 使用数据环境设计器 12.3.5 创建数据报表 习题十二
12.1 数据库的基本概念 12.1.1 关系数据库 1.数据表 2. 记录与字段 3. 关键字 4. 索引 12.1.4 数据库的分类 VB可以访问的数据库有以下3类: (1) Jet数据库:数据库由Jet引擎直接生成和操作,不仅灵活而且速度快,Microsoft Access和VB使用相同的Jet数据库引擎。 (2) ISAM数据库:索引顺序访问方法(ISAM)数据库。有几种不同的形式,如Dbase、FoxPro、Text Files和Paradox。在VB中可以生成和操作这些数据库。 (3) ODBC数据库:开放数据库连接。这类数据库包括遵守ODBC标准的客户∕服务器数据库,如Microsoft SQL Server、Oracle、Sybase等,VB可以使用任何支持ODBC标准的数据库。
12.2 数据管理器的使用 12.2.1 建立一个数据库 1. 启动数据管理器 启动数据管理器有两种方法: (1) 在VB集成环境中启动数据管理器:单击“外接程序”菜单下的“可视化数据管理器”命令,即可打开可视化数据管理器“VisData”窗口,如图12-1所示。 (2) 直接执行VisData程序:可不进入VB环境,直接运行VB安装目录下的VisData.exe程序文件来启动可视化数据管理器。
12.2.2 添加数据表 建立数据表结构 数据表的建立步骤如下: (1) 打开已经建立的Access数据库 (2) 在“表名称”文本框中输入表名,如“职工工资”。 (3) 单击“添加字段”按钮打开“添加字段”对话框 (4) 单击“表结构”对话框中的“添加索引”按钮,打开“添加索引”对话框。 (5) 在“表结构”对话框中,单击“生成表”按钮生成表,关闭“表结构”对话框,在数据库窗口中可以看见生成的数据表结构。
2. 修改数据表结构 • 操作如下: • 打开要修改的数据表的数据库。 • (2) 在快捷菜单中选择“设计”,将打开“表结构”对话框 • 12.2.3 数据的增、删、改 • 工具栏 • 2. 数据记录的输入、修改与删除
12.2.4 查询 • 建立一个查询 • 2. SQL语句简介其语法为 • Select〈字段名表〉From〈表名〉Where〈条件〉 • (2) Update语句的语法。 其语法为 • Update〈表名〉Set〈字段〉=〈表达式〉[,〈字段〉=〈表达式〉] Where〈条件〉 • (3) Delete语句的语法。 其语法为 • Delete From〈表名〉Where〈条件〉 • (4) Insert语句的语法其语法为 • Insert Into〈目标表名〉Select〈字段1〉[,〈字段2〉…] From〈源表名〉 • (5) Select Into语句的语法。其语法为 • Select〈字段名表〉Into〈新表名〉From〈源表名〉
12.2.5 数据窗体设计器 使用数据窗体设计器建立数据操作窗体的步骤为 (1) 新建一个标准EXE工程。 (2) 在可视化数据管理器中,从“实用程序”菜单中选择“数据窗体设计器”命令,打开“数据窗体设计器”对话框,如图12-19左所示。 (3) 单击“生成窗体”按钮,在工程中添加一个数据窗体,建立的数据窗体如图12-19右所示。 图12-19 使用“数据窗体设计器”建立的数据窗体
12.2.6 数据控件与数据感知控件 • 数据控件的常用属性、方法和事件 • 2. 数据绑定控件 • 3. 示例分析 • 【例12-1】通过手工方式建立一个简单的工资管理系统,如图12-20所示。 图12-20 一个简单的工资管理系统
设计步骤如下: (1) 建立应用程序用户界面与设置对象属性。 (2) 编写代码。 编写命令按钮控件数组Command1()的Click事件代码: Private Sub Command1_Click(Index As Integer) n = Index Select Case n Case 0 Data1.Recordset.AddNew Case 1 Data1.Recordset.Delete Data1.Recordset.MoveNext Case 2 Unload Me End Select End Sub
为了在改变工资数据时能够计算实发工资,编写Text1()的Validate事件代码:为了在改变工资数据时能够计算实发工资,编写Text1()的Validate事件代码: Private Sub text1_Validate(Index As Integer, Cancel As Boolean) Dim a(3 To 8) As Single Select Case Index Case 3 To 8 For i = 3 To 8 a(i) = Val(text1(i).Text) Next text1(9).Text = a(3) + a(4) + a(5) + a(6) - a(7) - a(8) End Select End Sub 为了能即时反映记录指针的移动情况,编写Data1的事件代码: Private Sub Data1_Reposition() On Error Resume Next Data1.Caption = "记录:" & (Data1.Recordset.AbsolutePosition + 1) End Sub
12.3 ADO数据对象访问技术 12.3.1 ADO编程模型简介 : 1.连接(Connection)对象 2. 命令(Command)对象 3. 记录集(Recordset)对象 编写代码。 首先在窗体的通用段声明对象变量: Dim cnn As New ADODB.Connection Dim rst As New ADODB.Recordset 在窗体的Load事件代码中建立ADO的Connection对象和Recordset对象: Private Sub Form_Load() s = "Provider = Microsoft.Jet.OLEDB.3.51; Persist Security Info = False;" _ & "Data Source = d:\VB6lx\rsgl.mdb" cnn.CursorLocation = adUseClient cnn.Open s Set rst = New Recordset
rst.Open "职工工资", cnn, adOpenStatic, adLockOptimistic For Each aa In text1 Set aa.DataSource = r ' 绑定所有文本框到记录源 Next Combo1.AddItem “全体” ' 初始化组合框 Combo1.AddItem "保卫" Combo1.AddItem "财务" Combo1.AddItem "技术" Combo1.AddItem "生产" Combo1.AddItem "供销" Combo1.Text = Combo1.List(0) End Sub 编写命令按钮控件数组Command1()的Click事件代码: Private Sub Command1_Click(Index As Integer) n = Index Select Case n Case 0
rst.MoveFirst Case 1 ' 上一个 rst.MovePrevious If rst.BOF Then rst.MoveFirst Case 2 ' 下一个 rst.MoveNext If rst.EOF Then rst.MoveLast Case 3 ' 末一个 rst.MoveLast End Select End Sub 编写组合框Combo1的Click事件代码: Private Sub Combo1_Click() t = Combo1.Text If t = "全体" Then rst.Filter = "" Else rst.Filter = "部门 = '" & t & "'" ' 设置“筛选”条件 End If rst.Resync adAffectAllChapters End Sub
12.3.3 使用ADO控件 • 添加ADO Data控件 • 2. ADO Data控件的属性 • ADO Data控件对数据的操作 • 4. 使用ADO Data控件 • 【例12-3】使用ADO Data控件建立的工资管理数据窗体,如图12-25所示。 图12-25 使用ADO Data控件
设计步骤如下: (1) 建立应用程序用户界面。 (2) 设置对象属性。 (3) 编写代码。 编写命令按钮组Command1的Click事件代码: Private Sub command1_Click(Index As Integer) Select Case Index Case 0 ' 添加∕确定按钮 If command1(0).Caption = "添加(&A)" Then command1(0).Caption = "确定(&O)" command1(1).Caption = "取消(&C)" Adodc1.Recordset.AddNew aa (False) Else command1(0).Caption = "添加(&A)"
Adodc1.Recordset.UpdateBatch adAffectAll aa (True) End If Case 1 ' 编辑∕取消按钮 If command1(1).Caption = "编辑(&E)" Then command1(0).Caption = "确定(&O)" command1(1).Caption = "取消(&C)" aa (False) Else command1(0).Caption = "添加(&A)" command1(1).Caption = "编辑(&E)" Adodc1.Recordset.CancelUpdate Adodc1.Refresh aa (True) End If
Case 2 ' 删除按钮 Adodc1.Recordset.Delete Adodc1.Recordset.MoveNext Case 3 ' 关闭按钮 Unload Me End Select End Sub 其中调用了通用Sub过程aa: Private Sub aa(l As Boolean) Dim oTxt As TextBox For Each oTxt In text1 oTxt.Locked = l Next command1(2).Visible = l command1(3).Visible = l End Sub
为文本框控件组Text1编写计算“实发工资”的过程代码:为文本框控件组Text1编写计算“实发工资”的过程代码: Private Sub text1_Validate(Index As Integer, Cancel As Boolean) Dim a(3 To 8) As Single Select Case Index Case 3 To 8 For i = 3 To 8 a(i) = Val(text1(i).Text) Next text1(9).Text = a(3) + a(4) + a(5) + a(6) - a(7) - a(8) End Select End Sub 为显示当前记录位置,编写adodc1的MoveComplete事件代码: Private Sub adodc1_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset) Adodc1.Caption = "记录:" & (Adodc1.Recordset.AbsolutePosition) End Sub
12.3.4 使用数据环境设计器 1. 向工程中添加数据环境 2. 创建连接对象 3. 创建命令对象 4. 使用数据环境 【例12-4】在例12-2的数据查看窗体中使用数据环境。 设计步骤如下: (1) 建立应用程序用户界面。 (2) 建立数据环境。 (3) 修改属性设置。
(4) 修改代码。 修改窗体的Load事件代码: Private Sub Form_Load() Combo1.AddItem "全体" Combo1.AddItem "保卫" Combo1.AddItem "财务" Combo1.AddItem "技术" Combo1.AddItem "生产" Combo1.AddItem "供销" Combo1.Text = Combo1.List(0) End Sub
修改命令按钮的事件代码: Private Sub command1_Click(Index As Integer) Select Case Index Case 0 DataEnvironment1.rsCommand1.MoveFirst Case 1 DataEnvironment1.rsCommand1.MovePrevious If DataEnvironment1.rsCommand1.BOF() Then DataEnvironment1.rsCommand1.MoveFirst End If Case 2 DataEnvironment1.rsCommand1.MoveNext If DataEnvironment1.rsCommand1.EOF() Then DataEnvironment1.rsCommand1.MoveLast End If Case 3 DataEnvironment1.rsCommand1.MoveLast
End Select End Sub 修改组合框的事件代码: Private Sub Combo1_Click() t = Combo1.Text If t = "全体" Then DataEnvironment1.rsCommand1.Filter = "" Else DataEnvironment1.rsCommand1.Filter = "部门 = '" & t & "'" End If End Sub
12.3.5 创建数据报表 • 设计数据环境 • 2. 添加DataReport • 在属性窗口中设置DataReport1对象的属性: • DataSource属性改为:DataEnvironment1 • DataMember属性改为:Command1_分组 • 3. 设计报表中界面 • 4. 编写代码 • 编写DataReport1的Initialize事件代码: • Private Sub DataReport_Initialize() • DataReport1.Title = "大江电机厂" & Month(Date) & "月份工资报表" • End Sub • 5. 运行报表
字段名称 类 型 字段长度 索 引 学号 Text 8 主索引 姓名 Text 4 班级 Text 8 性别 Boolean 2 语文 Integer 2 外语 Integer 2 数学 Integer 2 总分 Integer 2 习题十二 12.1 在VB中可以访问哪些类型的数据库? 12.2 VB访问数据库有哪几种不同的方法? 12.3 建立成绩管理数据库。其中包含学生成绩表,其结构如表12-21所示。
12.4 如何在记录集内移动、定位、编辑、删除和添加数据? 12.5 简述将ADO控件连接到数据源的步骤。 12.6 利用Data控件说明如何将一个表中的字段绑定到一个文本框中? 12.7 利用ADO控件编写学生成绩管理程序(数据表为习题12.3建立的学生成绩表)。程序具有增加、删除、修改记录的功能。 12.8 为习题12.7的学生成绩管理程序增加菜单,实现按班级、姓名查找记录的功能。 12.9 为习题12.8的学生成绩管理程序增加统计功能。分别统计语文、外语、数学平均分数,并统计各科不及格的人数。 12.10 为习题12.9的学生成绩管理程序增加一个“数据表格”控件DataGrid,实现对数据的浏览。
12.11 简述建立数据环境(Data Environment)的步骤。 12.12 改写习题12.10,使用数据环境代替ADO数据控件。 12.13 编写一个应用程序:工资管理系统。 工资管理的主要任务是根据本单位当月在册职工,按各有关工资项目的数据分别求出每人的实发工资。为了财会管理的需要,每月还要打印出各种必要的工资报表。为完成上述任务,本系统应当满足以下需求: (1) 能够储存每个职工当月的工资信息,包括部门、编号、姓名、基本工资、岗位津贴、职务补贴、奖金、房租、水电、实发工资等数据。 (2) 应当具备增加人员、删除人员、修改数据、报表打印及退出系统等功能。