530 likes | 680 Views
Visual Basic 6.0 可视化编程应用. 四川达县职业中学 周龙江. 四川达县职业中学 周龙江. 第 7 章 数据库管理. 学习目标: 了解数据库的相关概念 掌握数据管理器的使用 掌握 VB 对数据库的三种访问技术 掌握应用 SQL 对数据库进行查询. 第 7 章 数据库管理. 教学内容: 7.1 VB 数据库 技术基础 7.2 可视化数据管理器 7.3 数据控件 ( Data) 7.4 应用 SQL 进行 数据库查询 7.5 数据访问对象 ( DAO ) 7.6 ADO 数据 控件. 返回目录.
E N D
Visual Basic 6.0可视化编程应用 四川达县职业中学 周龙江 四川达县职业中学 周龙江
第7章 数据库管理 学习目标: • 了解数据库的相关概念 • 掌握数据管理器的使用 • 掌握VB对数据库的三种访问技术 • 掌握应用SQL对数据库进行查询
第7章 数据库管理 教学内容: 7.1 VB数据库技术基础 7.2 可视化数据管理器 7.3 数据控件(Data) 7.4 应用SQL进行数据库查询 7.5 数据访问对象(DAO) 7.6 ADO数据控件
返回目录 7.1 VB数据库技术基础-基本概念 1. 数据库和数据表 • 数据库(DateBse)是许多相关数据根据一定的原则构成的数据集合。一个数据库由一个或多个数据表(Table)组成。 • 数据表中的一列称为一个字段或域(Field),表中的一行数据称为一条记录(Record)。 • 同一个表中字段名不允许重名 • 表中同一字段的数据类型相同 • 所有记录具有同样的字段
返回目录 7.1 VB数据库技术基础-基本概念 2. VB可访问的数据库 VB默认的数据库格式与Access97格式相同,其默认的数据库文件(.mdb)称为内部数据库。 除此之外,在VB中还可以访问: • 外部数据库,如dBASE、FoxPro、Paradox等ISAM(索引顺序访问方法)数据库,以及Lotus123和Excel等电子表格数据列表 • ODBC(开放式数据互接)数据库,如SQLServer等
返回目录 7.1 VB数据库技术基础-数据库访问技术 1. VB数据库应用程序的组成 用户界面、数据库引擎和数据库 (VB提供的是Microsoft Jet数据库引擎) 2. 应用程序与Jet数据库引擎的接口 • Data控件:提供无需编程就能访问数据库的 能力。实际应用时,还需绑定其它控件,并编 写简单的程序代码。 • 数据访问对象(DAO):供了一个由一系列对象和集合组成的分层结构模型,可方便地访问和处理数据库。 3. ActiveX数据对象(ADO) 建立在被称为OLE DB的最新数据访问接口之上的高性能的、统一的数据访问对象。
返回目录 7.2 可视化数据管理器-建立数据库 1. 启动数据管理器 “外接程序→可视化数据管理器” 2. 建立数据库的表结构 建立数据库→新建数据表→确定数据表的字段以及字段名、类型和长度等信息
返回目录 7.2 可视化数据管理器-建立数据库 [例7.1] 建立一个students.mdb数据库,在该库中新建一个名为student的数据表。 操作步骤: 建立数据库→新建数据表→建立表索引(可选) →生成表
返回目录 7.2 可视化数据管理器-编辑数据表 1. 修改表结构 “数据库窗口”快捷菜单中“设计”命令 2. 输入、编辑、删除记录 在“数据库窗口”中双击数据表
返回目录 7.3 数据控件(Data)-Data控件使用基础 1. 窗体上添加Data控件 2. 三个重要属性 • Connect:指定所连接的数据库类型,默认为Access • DatabaseName:选择要访问的数据库文件 • RecordSource:确定要访问的数据来源(数据表或SQL查询语句) 3. 其它常用属性 • RecordSetType:设置记录集的类型,见教材表7.3 • ReadOnly:设置是否以只读方式打开数据库 记录集是Data控件能访问的所有记录的集合
返回目录 7.3 数据控件(Data)-Data控件使用基础 4. 常用方法与事件 • Refresh方法:刷新Data控件的属性设置 例如,若重新设置了控件的Connect、DatabaseName、RecordSouce、ReadOnly等属性值后,必须调用Refresh方法使所作的更改生效。 • Reposition事件:重定位事件 例如,当记录集指针从一条记录(假设为A记录)移到另一条记录(假设为B记录)时,将发生该事件(当前记录是B记录)。
返回目录 7.3 数据控件(Data)-Data控件使用基础 例,如下的事件响应代码可在数据控件Data1上显示记录集中当前记录的记录号及记录总数: Private Sub data1_Reposition() DataId = Data1.Recordset.AbsolutePosition + 1 DataCount = Data1.Recordset.RecordCount Data1.Caption = Str(DataId) & “/” & Str(DataCount) End Sub 注: • 记录集(Recordset)是Data控件所有可访问记录的集合 • AbsolutePosition属性表示当前记录指针的位置 • RecordCount属性表示记录集的记录总数
返回目录 7.3 数据控件(Data)-Data的绑定控件 绑定:通过对普通控件的属性设置,使得这些控件与Data控件记录集中的字段建立链接关系。 1. Data的绑定控件 具有DataSource和DataField属性的控件可以和Data控件进行绑定,如标签、文本框等。 2. 绑定控件的属性设置 • DataSource:选择所绑定的Data控件 • DataField:确定需显示或更新的数据表字段,即Data控件连接的数据表字段
返回目录 7.3 数据控件(Data)-Data的绑定控件 [例7.2]建立Xs.vbp:通过如下窗体显示students.mdb数据库中student表的内容。
返回目录 7.3 数据控件(Data)-Data的绑定控件 [例7.2的操作步骤] (1) 设计窗体:启动VB,新建一个工程,然后设计窗体。 (2) 设置Data控件的属性,见教材表7.4 (3) 设置文本框的绑定属性,见表7.5 (4) 编写 “结束”按钮的Click事件响应代码 Private Sub Cmd_exit_Click() End End Sub (5)保存:Xs.Vbp、FrmXs.frm (6)运行:单击Data控件上的前后四个按 钮可遍历student数据表中的内容。
返回目录 7.3 数据控件(Data)-Data控件的记录集 • 记录集(Recordset)是Data控件所有可访问记录的集合 • 对数据库内容的编辑操作主要通过记录集对象来进行 1.浏览记录 • Bof 和 Eof 属性 Bof为True:记录指针指向首记录前 Eof为True:记录指针指向末记录后 • AbsolutePosition属性 返回当前记录指针的位置(0对应第一条记录) • RecordCount属性 返回记录集的记录总数 若Bof和Eof的属性值都为True,则记录集为空
返回目录 7.3 数据控件(Data)-Data控件的记录集 • BookMark属性:设置或返回记录的书签 • LastModified属性:返回最近一次改过的记录书签值 • Move方法组:用于移动记录指针 • MoveFirst:移至第一条记录 • MoveLast:移到最后一条记录 • MovePrevious:记录指针前移一条记录 • MoveNext:记录指针后移一条记录
返回目录 7.3 数据控件(Data)-Data控件的记录集 [例7.3]在例7.2的基础上进行修改: 用Move方法组实现Data控件四个 按钮的相应功能,并在Data1控件上 显示当前记录号。 [操作步骤] (1) 在窗体上添加4个命令按钮: 分别命名为Cmd_Move(0)~ Cmd_Move(3) 设置相应的Caption属性 (2) 编写Cmd_Move命令按钮数组的Click事件响应代码 (3) 编写Data1控件重定位事件(Reposition)响应代码
返回目录 7.3 数据控件(Data)-Data控件的记录集 2.增加、修改和删除记录 • 相关方法 • AddNew:数据表中添加一条空记录 • Edit:将当前记录的内容调入缓冲区 • Delete:删除当前记录 • Update:将缓冲区中的内容写入数据库 • CancelUpdate:缓冲区中的内容不写入数据库 • 增加新记录 ① 调用AddNew方法:在数据表中添加一条空记录 ② 对新记录的各字段进行赋值 ③ 调用Update方法:更新数据表内容
返回目录 7.3 数据控件(Data)-Data控件的记录集 • 修改记录 ① 调用Edit方法:将当前记录的内容调入缓冲区 ② 修改当前记录 ③ 调用Update方法:将修改的内容写入数据表 注:若在绑定控件上修改当前字段值后移动记录指针,则系统自动将所作的修改更新到数据库中。 • 删除记录 ① 调用Delete方法:删除当前记录 ② 移动记录指针:避免记录指针指向无效数据 注:记录一经删除,就不可恢复。删除记录必须慎重。
返回目录 7.3 数据控件(Data)-Data控件的记录集 [例7.4]在例7.3的基础上进行修改: 在窗体上添加“增加记录”、“修改记录”和“删除记录”三个按钮,通过调用AddNew、Edit、Delete方法实现对数据库的相关操作。 [操作步骤] (1) 在窗体上添加3个命令按钮: Cmd_Add、Cmd_Update、 Cmd_Dele (2) 编写上述按钮的Click事件 响应代码
返回目录 7.3 数据控件(Data)-Data控件的记录集 “增加记录”按钮的Click事件响应代码流程图
返回目录 7.3 数据控件(Data)-Data控件的记录集 3.查找记录 • Find方法组(适用于Dynaset和SnapShot类型的记录集) • FindFisrt:查找满足条件的第一条记录 • FindLast:查找满足条件的最后一条记录 • FindPrevious:当前记录起往前找满足条件的第一条记录 • FindNext:当前记录起往后找满足条件的第一条记录 语法格式:记录集.<Find方法> 条件表达式 例如,Data1.Recordset.FindFirst "class= '网络技术'" Data1.Recordset.FindNext "name Like'王*'" 注:如果条件中包含变量,则必须使用字符串连接符& className=“网络技术” Data1.Recordset.FindFirst "class=" & "'" & className & "'"
返回目录 7.3 数据控件(Data)-Data控件的记录集 • NoMatch属性 用Find方法组进行查询时,如果未找到符合条件的记录,则该属性的值为True,否则为False。 例如: Data1.Recordset.FindNext "name Like'王*'" If Data1.Recordset.NoMatch Then MsgBox "没有姓王的学生" End If
返回目录 7.3 数据控件(Data)-Data控件的记录集 • Seek方法(适用于Table类型记录集) 格式:记录集.seek 比较运算符,<索引字段的取值> Seek方法是通过索引字段快速找到符合条件的记录,所以在使用该方法前必须先打开其相关的索引。 例如: Data1.DatabaseName = "students.mdb " Data1.RecordSource = "student" Data1.RecordType = 0 '设置记录集类型为表类型 Data1.Refresh Data1.Recordset.Index = "stuid " '打开名称为stuid的索引 Data1.Recordset.Seek "=" , "013002"
返回目录 7.3 数据控件(Data)-Data控件的记录集 [例7.5]在例7.4的基础上进行修改: 增加一个登录窗体FrmLog, 只有当用户输入user表中正确的 用户名和相应的密码后,才可以 进入FrmXs(学生情况)窗体。 [操作步骤] (1)在数据库中增加user数据表:
返回目录 7.3 数据控件(Data)-Data控件的记录集 (2) 添加新窗体,保存为FrmLog。 属性设置见教材表7.6 (3) 执行“工程→属性”命令, “启动对象”选FrmLog (4) 编写 “确定”按钮的Click事件响应代码 验证用户名是否为空 验证密码是否为空 查找用户名是否存在 若不存在,给出“非法用户”的提示信息 如果存在还需判断密码是否正确 不正确提示重新输入;正确则显示FrmXs窗体
返回目录 7.4 应用SQL进行查询-SELECT语句 SELECT语句的语法: Select 字段1,字段2 ...,字段n From 表名 Where 查询条件 Group By 分组字段 Order By 字段[Asc|Desc] 例如: Select * from student Select name,id,class from student where sex= '女' Select name from student where sex='女' and class= '网络技术'
返回目录 7.4 应用SQL进行查询-多表查询 多表查询:查询时将两个以上表中的内容通过相关字段连接在一起。各字段名前应加上相应的表名:表名.字段名 例如: Select student.* , class.classname From student , class Where student.classid = class.classid [例7.9]以例7.5为基础对Xs.Vbp工程进行修改,要求: • 用Select语句描述数据源:连接student和class表中的数据 • 多表查询的结果通过FrmXs窗体显示,并且不允许用户对显示的数据进行修改 • 新增一个FrmEdit窗体,在该窗体中完成增加记录或修改记录的操作
返回目录 7.4 应用SQL进行查询-多表查询 [操作步骤] (1) 修改Students.mdb数据库 • 根据教材表7.10修改student数据表: 删除class字段;增加classid字段,宽度为2, “顺序位置”为2 • 在student数据表各记录的classid字段中输入代码: 01 (表示“网络技术”班级),02 (表示“汽车营销”班级) • 根据表7.11新建class数据表,并输入相应记录
返回目录 7.4 应用SQL进行查询-多表查询 (2) 打开Xs.Vbp,对FrmXs窗体上的控件进行属性设置: • 设置Data1控件的RecordSource属性: Select student.*, class.classname From student, class Where student.classid = class.classid • 设置Txt_class的DateField 属性:classname • 将各文本框控件的Locked 属性设置为True
返回目录 7.4 应用SQL进行查询-多表查询 (3) 新增FrmEdit窗体(在该窗体中完成新增或修改操作) • “性别”字段采用单选按钮控件数组Opt_sex • 班级通过下拉列表(Cmd_class)选择 • Data1:DatabaseName设为Students.mdb,RecordSource选student,Visible设为False • Data2:DatabaseName设为Students.mdb,RecordSource选class,Visible设为False • 编写以下事件的响应代码: 窗体Load事件 窗体Activate(激活)事件 “确定”按钮的Click事件 “返回”按钮的Click事件
返回目录 7.4 应用SQL进行查询-多表查询 (4) 修改FrmXs窗体中部分控件的事件响应代码 Private Sub Cmd_add_Click() flag = 1 : FrmEdit.Show 1 End Sub Private Sub Cmd_Dele_Click() MsgBox "该功能有待开发!", , "删除记录" End Sub Private Sub Cmd_Update_Click() flag = 2 : FrmEdit.Show 1 End Sub (5) 添加var.bas模块(定义全局变量) Public flag As Integer
返回目录 7.4 应用SQL进行查询-使用MSFlexGrid控件 1. 添加MsFlexGrid控件 (1) 执行“工程→部件”命令 (2) 选“Microsoft FlexGrid Control 6.0” 2. MSFlexGrid控件的常用属性 • AllowUserResizing:设置是否允许对行列大小进行调整 • Col、Row:设定或访问当前单元格 • Cols、Rows:返回或设置控件中的列和行的总数 • ColSel、RowSel :设置选中的列或行 • Clip:返回或设置控件选定区域中的内容 • ColWidth、RowHeight:返回或设置某列的列宽或某行的行高 • ColAlignment:返回或设置某一列的对齐格式 • Sort:根据设定的属性值排序所选择的行
返回目录 7.4 应用SQL进行查询-使用MSFlexGrid控件 3. MSFlexGrid控件的常用方法 • AddItem:在控件中添加一行 例如,以下代码将数据添加到第1行(原第1行变成第2行): MSFlexGrid1.AddItem “何君” & Chr(9) & “男” & Chr(9) & “上海”, 1 注:如果代码最后的1省略,则数据将被添加到最后一行 • Clear:清除控件中的所有内容(不清除行和列) • RemoveIte:删除控件中指定的行。 注:固定行(即呈灰色的行)不可删除。例如,执行以下代码将报错“不能在固定行上使用RemoveItem”的对话框: MSFlexGrid1.RemoveItem 0
返回目录 7.4 应用SQL进行查询-使用MSFlexGrid控件 [例7.10]以例7.9为基础对Xs.Vbp工程进行修改,要求: • 新增FrmBrowse窗体,在该窗体中完成按班级的查询操作 • 在FrmXs窗体上增加可进入查询窗体的“查询记录”按钮 [操作步骤] (1) 打开Xs.Vbp,新增FrmBrowse窗体: • 设计窗体界面,属性设置见教材表7.12
返回目录 7.4 应用SQL进行查询-使用MSFlexGrid控件 • 编写窗体激活事件的响应代码Form_Activate( ) 默认查询全部记录
返回目录 7.4 应用SQL进行查询-使用MSFlexGrid控件 • 编写的“选择查询班级”组合框的Click事件响应代码 Cmb_class_Click( ) • 编写“返回” 按钮的Click事件响应代码Cmd_exit( )
返回目录 7.4 应用SQL进行查询-使用MSFlexGrid控件 (2) 在FrmXs窗体上增加可进入查询窗体的“查询记录”按钮 Cmd_Browse,并编写相应的事件响应代码: Private Sub Cmd_Browse_Click() FrmBrowse.Show 1 End Sub
返回目录 7.5 数据访问对象(DAO) DAO:Data Access Objects(数据访问对象) 1. 使用DAO的前提 “工程”→引用”,选中Microsoft DAO 3.51 Object Library”
返回目录 7.5 数据访问对象(DAO) 2. 创建工作区 确定引用库之后,可利用数据库引擎对象(DBEngine)创建工作区对象(WorkSpace对象): Set workspace对象变量 = CreateWorkspace(name, user, password, type) 注: 缺省的工作区对象是Jet类型的DBEngine.WorkSpaces(0),对于简单的数据库应用程序来说,无需创建WorkSpace对象,可直接使用系统缺省工作区的属性和方法。
返回目录 7.5 数据访问对象(DAO) 3. 打开数据库 利用WorkSpace对象的OpenDatabase方法,常用格式: Set 数据库对象 = 工作区对象.OpenDatabase (dbname, options) 其中: dbname:需打开的数据库名称,包含路径。 Options:对于Jet类型的Workspace对象,该参数用来指定数据库的打开方式。取值为False(默认值)时,为共享方式;否则为独占方式。 例如, Set db = DBEngine.Workspaces(0).OpenDatabase("testdb.mdb")
返回目录 7.5 数据访问对象(DAO) 4. 创建记录集 利用数据库对象的OpenRecordset方法,常用格式: Set 记录集对象 = 数据库对象.OpenRecordset (source, type) 其中: source:指定记录集内容(数据表名、查询名或SQL语句) type:指定记录集类型,默认打开表型记录集 例如, Set db = DBEngine.Workspaces(0).OpenDatabase("testdb.mdb") Set rsSele = db.OpenRecordset("TestSeleDb")
返回目录 7.5 数据访问对象(DAO) 5. 记录集对象的属性与方法 大多与Data控件的Recordset对象的属性及方法一致 [例7.11]从TestDB.mdb(考试题库)中随机动态抽取指定数目的选择题和填充题到Test.mdb(学生考试库) 注:数据库结构见教材 [操作步骤] (1) 新建工程 • 设计窗体 • 工程存为TestSele.vbp 窗体存为FrmSele.frm
返回目录 7.5 数据访问对象(DAO) (2) 引用DAO对象库 “工程”→引用”,选中Microsoft DAO 3.51 Object Library” (3) 编写程序代码 • 使用DAO打开题库和学生考试库 • 清空学生考试库 • 打开进行查询的相关的索引 • 生成考试库中的选择题表 • 生成考试库中的填充题表 • 关闭试题库和学生考试库, 并给出选题完成的提示信息
返回目录 7.6 ADO数据控件-ADO使用基础 ADO:ActiveX Data Objects(ActiveX数据对象) 1. 使用ADO数据控件 (1) “工程”→部件” (2) 点击工具箱中 在窗体上画出ADO对象
返回目录 7.6 ADO数据控件-ADO使用基础 (3) 设置窗体上ADO对象的ConnectionString属性
返回目录 7.6 ADO数据控件-ADO使用基础
返回目录 7.6 ADO数据控件-ADO使用基础 (4) 设置窗体上ADO对象的RecordSource属性 选择数据表为记录源 由SQL查询来确定记录源
返回目录 7.6 ADO数据控件-ADO使用基础 [例7.12]用ADO控件对TestDB.mdb中的TestseleDb表进行增加、修改、删除、跳转等操作。 [操作步骤] (1) 新建工程 • 设计窗体 • 设置Adodc控件的属性 • 设置绑定控件的属性 • 工程存为TestManage.vbp 窗体存为FrmManage.frm (2) 编写事件响应代码 • 窗体Load事件 • 各按钮的Click事件