《Visual_Basic_6.0程序设计》第12章:数据库访问技术_第1页
《Visual_Basic_6.0程序设计》第12章:数据库访问技术_第2页
《Visual_Basic_6.0程序设计》第12章:数据库访问技术_第3页
《Visual_Basic_6.0程序设计》第12章:数据库访问技术_第4页
《Visual_Basic_6.0程序设计》第12章:数据库访问技术_第5页
已阅读5页,还剩136页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第12章 数据库访问技术,时间:4次课,8学时,第12章 数据库访问技术,Visual Basic 6.0 引入了功能强大的ADO作为存储数据的新标准,并提供了新的数据环境设计器,使数据访问更为灵活和简便。Visual Basic可以访问下列数据库: Jet数据库(Visual Basic自带的数据库),即Microsoft Access数据库,是Visual Basic 6.0处理的默认数据库。 ISAM数据库(外部数据库),如DBASE,FoxPro和TextFiles等。 ODBC数据库(凡是遵循ODBC标准的客户/服务器数据库),如Microsoft SQL Server和Oracle

2、等,第12章 数据库访问技术,12.1 数据库的概念 12.2 用可视化数据管理建立和维护数据库 12.3 使用数据控件访问数据库 12.4 结构化查询语言 12.5 ADO数据控件 12.6 数据报表 12.7 习 题,12.1 数据库的概念,12.1.1 数据库 12.1.2 关系型数据库的结构,12.1.1 数据库,1. 什么是数据库 数据库是指以一定的组织形式存放在计算机存储介质上的相互关联的数据的集合。例如,把一个学校的学生、教师和课程等数据有序地组织起来,存储在计算机磁盘上,可以构成一个数据库。此后用户可随时查询到该数据库的有关信息。 2. 数据库的特点 具有最小的冗余度,即数据尽

3、可能功能不重复。 资源共享性,即以最优的方式服务于一个或多个应用程序。 数据独立性,即数据的存储尽可能独立于使用它的应用程序。 安全可靠。 保密性能好,12.1.1 数据库,3. 数据库管理系统 数据库管理系统(DBMS)是对数据库进行管理的系统软件,是用户与数据库之间的接口。它提供了用户对数据库进行操作的各种命令、工具及方法,包括数据的建立和记录的输入、修改、检索、显示、删除和统计等。例如,DB2、Informix、Oracle、Sybase、SQL Server、Access、Visual FoxPro等均为数据库管理系统。 4. 数据库的类型 按数据的组织方式不同,数据库可以分为3种类型

4、:网状数据库、层次数据库和关系型数据库。其中应用最普遍的是关系型数据库,12.1.2 关系型数据库的结构,关系型数据库是以关系模型为基础的数据库,是根据表、记录和字段之间的关系进行组织和访问的一种数据库,它通过若干个二维表(Table)来存储数据,并且通过关系(Relation)将这些表联系在一起。关系型数据库提供了称为结构化查询语言(SQL)的标准接口,该接口允许使用多种数据库工具和产品。 1. 表(Table) 将相关的数据按行和列的形式组织成二维表格的形式即为表。关系数据库包含一个或多个表,表是数据的集合,它是由行和列组成的。表是一种数据对象,它可以有许多属性,这些属性构成了表的结构。

5、2. 字段(Record)的基本属性 数据库表中的每一列称为字段。字段是标记实体属性的符号集。表是由其包含的各个字段定义的,字段规定了数据的特征。创建一个数据库表时,要设置每个字段的数据类型、最大长度和其他一些属性。字段可以包含各种字符、数字或图形,表12.1 学生基本情况表,12.1.2 关系型数据库的结构,表12.2 学生成绩表,12.1.2 关系型数据库的结构,12.1.2 关系型数据库的结构,1)字段的基本属性有: 字段名(Field Name) 每一个字段必须有一个名字,称为“字段名”,用以在表中标识该字段。字段名一般要与其对应的实体的属性名相同或相近。例如“姓名”列的字段名可以取为

6、“姓名”或Xingming或XM等,即字段名可以是汉字,也可以是字母。 (2)字段的类型(Type) 表中的每个字段都有特定的数据类型。不同的数据类型的表示和运算的方法不一样。指定数据类型是为了计算机方便地处理这些数据。常用的字段类型有: 文本型:可以是字母、汉字符号和数字型文字。 数值型:可以是整数或小数。 逻辑型:表示真或假。 日期/时间型:表示日期和时间。 备注型:不定长的一段文字,12.1.2 关系型数据库的结构,3)字段宽度(Witdh) 字段宽度是指该字段所能容纳数据的最大字节数。其中系统日期型为8个字节,逻辑型为1个字节,备注型为4个字节。 (4) 小数位数(Decimal) 对

7、于数值型数据,字段的宽度=整数部分的宽度+小数点1位+小数位宽度。 3. 记录(Record) 对于关系型数据库,表中的每一行称为记录,记录是多个字段的集合。记录是一组用于存储数据的相关字段的有序集合。 4. 关键字 如果表中的某个字段或多个字段的组合能够惟一地确定一个记录,则称该字段或多个字段组合为候选关键字,12.1.2 关系型数据库的结构,5. 表间的关系 关系就是定义两个表如何相互联系的方式。数据库可以由多个表组成,表与表之间可以用不同的方式相互关联。在定义一个关系时,必须说明相互联系的两个表中的共用字段。 6. 外部键 实现与另一个表之间沟通的字段称为外部键,也就是两个表的公共字段。

8、通过外部键可以结合两个表的数据,进而筛选和过滤出所需要的数据。实际上,外部键通常是在一对多表中出现。 7. 索引 为了提高存储效率,大多数数据库都使用索引。索引根据表中关键字提供一个数据指针,并以特定的顺序记录在一个索引文件上,该索引文件仅列出全部关键字的值及其相应记录的地址,12.2 用可视化数据管理器建和 维护数据库,12.2.1 启动可视化数据管理器 12.1.2 关系型数据库的结构,12.2 用可视化数据管理器建立和维护数据库,在Visual Basic中提供了一个非常方便的数据操作工具,即可视化数据管理器(Visual Data Manager),使用可视化数据管理器可以方便地建立数

9、据库和添加表以及对表进行修改、添加记录、删除记录和查询记录等操作。 用数据库技术进行应用程序设计的步骤,首先是数据库设计,然后是表设计,再往下是进行有关的数据操作设计,如记录的修改和查询等,12.2.1 启动可视化数据管理器,Visual Basic所支持的不同类型的数据库可以通过相关的数据库管理系统来建立,例如,在Visual FoxPro管理系统中可以直接建立数据库。也可以使用Visual Basic的数据库管理器来建立和管理数据库。 Visual Basic的数据库管理器的启动方法是:在Visual Basic开发环境内选择【外接程序】|【可视化数据管理器】命令或在操作系统桌面上运行Vi

10、sual Basic系统目录中的Visdata.exe,都可以打开可视数据管理器,它的主屏幕窗口如图12.2所示。数据管理器【文件】菜单中的命令功能描述如表12.3所示,图12.2 可视化数据管理器VisData窗口,12.2.1 启动可视化数据管理器,表12.3 【文件】菜单中的命令,12.2.1 启动可视化数据管理器,表12.4 【实用程序】菜单中的命令,12.2.1 启动可视化数据管理器,12.2.2 新建数据库,一个数据库的建立主要包括新建数据库、添加表及录入数据。利用Visual Basic的可视化数据管理器可以很容易地建立一个新的数据库。操作步骤如下: (1)选择【文件】 | 【新

11、建】命令,在子菜单中选择要建立的数据库类型,如选择Microsoft Access,再从子菜单中选择Version 7.0 MDB(7)命令,如图12.3所示。 (2) 在打开的对话框中选择要建立的数据库所在的文件夹和数据库文件的名称。这里指定为D:Xsgl文件夹,文件名为XSK,如图12.4所示。 (3) 单击【保存】按钮保存数据库,这时,在VisData窗口中将打开两个子窗口,如图12.5所示。左边的是数据库窗口,当单击Properties项左边的(+)标记,可以看到数据库的常用属性。如图12.6所示,在右边的SQL语句窗口中可以输入SQL语句对数据库进行操作,并马上得到SQL语句的执行结

12、果。有关SQL的知识请参见12.4节,12.2.2 新建数据库,图12.3 在Visual Basic窗口中新建数据,12.2.2 新建数据库,图12.4 保存数据库对话框,12.2.2 新建数据库,12.2.2 新建数据库,12.2.3 打开数据库,如果要打开一个已存在的数据库,可以在可视化数据管理器窗口中选择【文件】|【打开数据库】| Microsoft Access命令,将显示【打开Microsoft Access数据库】对话框。在对话框中选择要打开的数据库,单击【打开】按钮即可,12.2.4 建立数据库的表,下面以建立表XS为例介绍操作步骤: (1) 右击管理器中的【数据库窗口】,从弹

13、出的快捷菜单中选择【新建表】命令。 (2) 弹出【表结构】对话框,如图12.7所示(添加字段以后的结果)。 在这个对话框中,可以建立表的结构(包括指定字段名、字段的数据类型、字段的大小等),也可建立索引。 【表结构】对话框中主要内容如下: 表名称:为当前的表取一个名字,【表名称】一项必须输入,因为表必须有一个名称。在本例中,输入了XS作为新建表的名称。 字段列表:显示当前表中已经包含的字段名。 名称:显示或修改当前在字段列表中选择的字段名称。 类型:显示当前在字段列表中选择的字段类型,12.2.4 建立数据库的表,大小:显示当前在字段列表中选择的字段的最大长度,以字节为单位。 固定长度:选中时

14、表示当前的字段长度是固定的。只对Text类型的字段起作用。 可变长度:选中时表示当前的字段长度是可变的。只对Text类型的字段起作用。 自动增加:对于类型为Long的字段,如果选中该复选框,当向表中添加新记录时,本字段内容会在上一条记录的基础上自动增加1。 允许零长度:选中时将零长度字符串视为有效的字符串。 必要的:选中时表示字段必须是非Null值。 顺序位置:确定字段的相对位置。 验证文本:用户输入的字段值无效时,应用程序将显示的消息文本。 验证规则:确定字段可以添加什么样的数据。如“=0 And =100”表示字段值必须在0100之间。 缺省值:在输入字段内容时,如果不输入该字段内容,则使

15、用该值作为字段内容,12.2.4 建立数据库的表,添加字段】按钮:单击该按钮将显示一个【添加字段】对话框。在该对话框中输入新添加的字段的有关信息,如新字段的名称、类型、长度等。 【删除字段】按钮:单击该按钮删除当前在字段列表中选中的字段。 索引列表:列出当前已经建立的索引。 名称:用于显示或修改索引名。 主键:选中时表示当前索引为表的主索引。一个表只能有一个主索引。主索引的字段值应是惟一的且不能为空值。 唯一的:选中时表示当前的索引字段应具有惟一的值,否则可以有多个相同的字段值出现在索引字段中。 外部的:选中时表示当前的索引字段是表的外部键。 必要的:选中时表示索引必须是非Null值,12.2

16、.4 建立数据库的表,忽略空值:选中时表示含有Nul值的字段不包括在索引之中。 (3) 单击【添加字段】按钮,出现【添加字段】对话框。利用该对话框可以设置各项的相关属性,表12.5 XS表结构,12.2.4 建立数据库的表,4) 单击【添加索引】按钮打开如图12.9所示的【添加索引】对话框。通过这个交互界面可以将某些字段设置为索引,以加快查找速度。要在【名称】文本框中设置索引名称,该名称可以与字段名相同,也可以自己再定义一个其他名称。 (5) 从【可用字段】列表中选择索引字段名。对于主索引,应选中【主要的】和【唯一的】复选框,单击【确定】按钮即可把所定义的索引加入到图12.7的【索引列表】中,

17、而在图12.9所示对话框中定义的索引信息也显示在图12.7所示【索引列表】的右侧。 (6) 完成各字段的定义并添加完索引之后,单击图12.7中的【生成表】按钮,就在数据库中添加了一个新表,不过,该表现在还没有数据。 (7) 当一张表建立好以后,可以再建立另一张表。读者可以根据表12.6,再建立一个【学生成绩表】,表名定义为CJ,以便后面的内容使用。CJ表中必须要有一个“学号”字段,使其能与XS表建立关联,12.2.4 建立数据库的表,表12.6 学生成绩表,图12.10 数据库窗口中显示当前添加的表的信息,12.2.4 建立数据库的表,8) 这时在数据库窗口中显示了当前已添加的所有表的名称,如

18、图12.10(a)所示。单击表名左侧的“+”可以展开表的有关信息,图12.10(b)列出了XS表中的字段信息。 如果要修改表结构,可以在数据库窗口中右击表名,从快捷菜单中选择【设计】命令,即可打开【表结构】对话框。请注意,对于表中字段的修改方法是先删除再重新建立。 与新建表不同的是,对于已存在的表,再次以【设计】方式打开时,该对话框底部没有【生成表】按钮,取而代之的是一个【打印结构】按钮,该按钮用于打印当前的表结构,可以打印出当前表所在的数据库名称、表名称、各字段的名称、类型、长度及索引等信息,12.2.5 记录集,记录集是一种浏览数据库的工具。一个Recordset对象代表一个数据库表里的记

19、录,或运行一次查询所得到的记录的结果。用户可以根据需要,通过记录集对象选择数据。记录集对象提供了24种方法和26种属性,利用它们可以对数据库中的记录进行各种处理。记录集共有3种类型:表、动态集和快照,它们之间有明显的区别。 1. 表(Table)类型 表类型的Recordset对象是表格的直接显示数据。以这种方式打开的记录集直接对应于单个的数据库表,而不能用于连接或者联合查询中的表。此种方式对记录集所进行的增加、删除和修改等操作都将直接 更新表中的数据。 2. 动态集(DynaSet)类型 这是Visual Basic的默认类型。它是一个记录的动态集合,代表从一个数据库表或包含一个或多个表中取

20、出的字段的查询结果。动态集类型是最灵活的Recordset类型,也是功能最强的,不过它的搜索速度与其他操作的速度不及表,12.2.5 记录集,3. 快照(SnapShot)类型 快照类型的Recordset对象是静态的显示数据(只读)。这种类型记录集的数据是由表或查询返回的数据组成,即是一个静态的副本,仅供读取,不能修改,它反映了在产生快照的一瞬间数据库的状态。SnapShot是最缺少灵活性的记录集,但它所需要的内存开销最少。如果只是浏览记录,可以使用SnapShot类型。 SnapShot类型还有一个变形的SnapShot类型,有时被称为“仅向前快照”或者“向前滚动快照”。与快照类似,从Mi

21、crosoft Jet数据库引擎得到的仅向前类型的Recordset对象是不可更新的。另外,仅向前的快照只允许在记录集中向前移动,而不能向相反的方向移动。这种类型的Recordset对象不能被复制,但是通常可以达到最快的速度。 记录集类型的使用方法,可以在数据管理器窗口工具栏中用工具按钮设置,也可以在代码中设置,12.2.6 数据管理器窗口工具栏,1. 记录集类型按钮组 表类型记录集。 动态集类型记录集。 快照类型记录集。 2. 数据显示按钮组 数据显示按钮组用于控制在数据编辑窗口中显示数据的形式。各按钮功能如下,图12.11 VisData窗口工具栏中按钮,12.2.6 数据管理器窗口工具栏

22、,在新窗体上使用Data控件:在数据编辑窗口中使用Data控件来控制记录集的滚动。 在新窗体上不使用Data控件:在数据编辑窗口中不使用Data控件,而是使用滚动条来控制记录集的滚动。 在新窗体上使用DBGrid控件:在数据编辑窗口中使用DBGrid控件显示数据。 3. 事物方式按钮组 所谓事物是指对数据库所做的一系列改变。 开始事物:开始一个新事物。 回滚当前事物:撤消自开始事物以来所做的一切改变。 提交当前事物:确认自开始事物以来对数据库所做的修改,原有数据将不能恢复,12.2.7 在数据管理器中对数据库的操作,在数据库窗口中右击表名,在快捷菜单中选择【打开】命令,打开Dynaset(动态

23、集)窗口,如图12.12所示,12.2.7 在数据管理器中对数据库的操作,1) 【排序】:打开一个对话框,在对话框中指定要排序的字段名称,单击【确定】按钮后,记录集按指定的字段排序。如果要指定按多个字段排序,可以指定一个字段表达式。例如要按学生的学号排序,对于学号相同的记录,再按姓名排序,则字段表达式可以写成:学号+姓名。排序只影响记录集在当前窗口的显示次序,而不改变记录在磁盘上存储的物理位置。 (2) 【过滤器】:用于过滤满足条件的记录。单击该按钮显示一个对话框,要求给当前记录集放置一个过滤器。过滤器实际上是一个条件,该条件用来限制要显示的记录。例如要显示姓名为“李立”的记录,可以设置过滤器

24、为:姓名=李立;要显示专业为“计算机”的所有男同学的记录,可以设置过滤器为:专业=计算机 And 性别=男;要显示所有学号大于990201的记录,则应设置过滤器为:学号990201 (设学号为Text类型)。 (3) 【移动】:用于将当前记录定位到指定的位置。单击该按钮显示一个【移动】对话框,该对话框用于设置查找条件。 (4) 【查找】:用于查找满足条件的记录。单击该按钮显示一个【查找记录】对话框,该对话框用于设置查找条件,12.2.8 数据窗体设计器,创建数据窗体可按如下步骤进行: 在可视化数据管理器中,选择【实用程序】|【数据窗体设计器】命令,打开【数据窗体设计器】对话框。如图12.13所

25、示。 (2)在【窗体名称】文本框中输入要创建的窗体名称,可输入“学生情况”。Visual Basic在输入的窗体名称前会自动加上frm前缀作为实际生成的窗体名称。 (3)在【记录源】下拉列表框中选择合适的表。这里选择XS表,这时该表的字段被列到【可用的字段】列表框中。用户也可以从该列表选择一个查询或输入SQL语句,12.2.8 数据窗体设计器,4)选择要出现在窗体中的字段,再单击列表右边的“”按钮,将其添加到【包括的字段】列表中。也可以用“”按钮,将该字段从【包括的字段】列表中移回到【可用的字段】列表。 (5) 重复步骤(4)的操作,直到选好所需字段。 (6) 单击字段和上、下箭头,使字段按所

26、需的顺序排列。 (7) 单击【生成窗体】按钮,在Visual Basic中就建立了数据窗体,并自动加入到了当前的工程中。 (8) 单击【关闭】按钮,结束数据窗体的建立,12.2.8 数据窗体设计器,图12.14 “学生情况”窗体界面,12.2.9 数据库维护,维护数据库可分为两大方面:维护数据和维护数据库结构。 1. 维护数据 维护数据是经常进行的工作。可在数据管理器中通过双击表名打开相应的表,直接对其记录进行修改和删除等操作;也可利用数据窗体对相关表进行记录的修改、添加和删除等数据维护工作。 2. 维护数据库结构 建好数据库后,并不是说它就是一成不变的了,相反,在大多数情况下都有可能对表结构

27、进行修改。例如,删除或添加字段、修改某个字段的类型和大小等。修改的方法是:右击该表,从快捷菜单中选择【设计】命令,弹出【表结构】对话框,然后便可在其中添加或删除字段了。一般对字段属性的修改,如改变字段的大小和类型,不能直接进行,必须先删除这个字段再重新建立它方可。这一点不及专门的数据库管理系统方便,所以一般对库结构的更改,都在Microsoft Access环境下进行,12.3 使用数据控件访问数据库,12.3.1 数据控件属性 12.3.2 数据绑定控件 12.3.3 数据控件的事件 12.3.4 数据控件的常用方法 12.3.5 记录集的属性与方法 12.3.6 用数据控件实现记录的增删改

28、操作,12.3 使用数据控件访问数据库,数据控件Data是Visual Basic访问数据库的一个利器,它通过Microsoft Jet数据库引擎接口实现数据访问。在Visual Basic 6.0的工具箱中提供了Data控件,用户在设计窗体时,要利用数据控件返回数据库中记录的集合,应先在窗体上画出Data控件,再通过它的3个基本属性Connect、DatabaseName和RecordSource设置要访问的数据资源,就能对数据库进行大部分操作。 但是数据控件本身不能直接显示数据,必须使用Visual Basic控件中的数据绑定控件与数据控件一起来完成对所访问的数据库操作的任务,12.3.1

29、 数据控件属性,1. Connect属性 Visual Basic可识别的数据库有: (1)Microsoft Access的MDB文件(默认值)。 (2)Borland dBASE、Microsoft FoxPro的DBF文件(文件内只包含一张表)。 (3)Borland Paradox的DB文件(文件内只包含一张表)。 (4)Novell Btrieve的DDF文件。 (5)Microsoft Excel的XLS文件。 (6)Lotus的WKS文件。 Open DataBase Connectivity(ODBC)数据库。 2. DatabaseName属性 DatabaseName属性指

30、定具体使用的数据库文件名,包括所有的路径名。如果连接的是单表数据库,则DatabaseName属性应设置为数据库文件所在的子目录名,而具体文件名放在RecordSource属性中,12.3.1 数据控件属性,3. RecordSource属性 RecordSource确定具体可访问的数据,这些数据构成记录集对象Recordset。该属性值可以是DatabaseName数据库中的单个表名,一个存储查询,也可以是使用SQL查询语言的一个查询字符串。 4. Recordset属性 返回或设置由Data控件所确定的Recordset对象,或由现有的Recordset对象所定义的Recordset对象。

31、该属性实际上是一个对象类型,可以像使用其他Recordset对象一样使用Recordset属性,表12.7 RecordType属性的设置,12.3.1 数据控件属性,5. RecordsetType属性 RecordsetType属性可以返回或设置一个值。其语法为: Object.RecordsetType =value 6. RedaOnly属性 ReadOnly可以返回或设置一个值,确定数据库的数据是否为只读。 7. EofAction和BofAction属性 当记录指针指向Recordset对象的开始(第1个记录前)或结束(最后一个记录后)时,数据控件的EofAction和BofAct

32、ion属性的设置或返回值决定了数据控件要采取的操作。属性的取值如表12.8所示。 8. Exclusive属性 Exclusive属性返回或设置一个值,指定被打开的数据库是否允许被其他应用程序共享,12.3.1 数据控件属性,表12.8 EofAction和BofAction属性设置,12.3.2 数据绑定控件,要使绑定控件能被数据库约束,必须在设计或运行时对这些控件的两个属性进行设置。 1. DataSource属性 DataSource属性返回或设置一个数据源,通过该数据源,数据绑定控件被绑定到一个数据库。可通过属性窗口设置,也可在运行时利用语句来设置。 2. DataField属性 Da

33、taField属性返回或设置数据库绑定控件将被绑定的字段名。 绑定控件、数据控件和数据库三者的关系如图12.15所示,图12.15 绑定控件、数据控件和数据库三者的关系,12.3.2 数据绑定控件,例12.1 设计一个窗体,用以显示在12.2.4小节中建立的XSK.mdb数据库中XS表的记录内容。 具体操作步骤如下: (1)建立一个工程,利用Visual Basic的标准工具箱,按如图12.16所示窗体,设置一个数据控件(控件名称自动默认为Data1)、5个文本框和5个标签控件。 (2)置标签的标题:5个标签控件分别给出相关的字段提示说明。 (3)置数据控件的属性:数据控件Datal的Conn

34、ect属性指定Access数据库类型,DatabaseName属性连接数据库XSK.mdb,RecordSource属性设定为XSK.mdb数据库中的XS表。 (4)置文本框的属性:5个文本框控件TextlText5的DataSource属性都设置成Datal,图5.2 输入界面,12.3.2 数据绑定控件,12.3.2 数据绑定控件,例12.2 用一个数据网格控件MSFlexGrid显示XSK.mdb数据库中XS表的内容。 操作步骤如下: (1) 工具箱中右击,选择【部件】命令,然后选中【控件】选项卡中的Microsoft FlexGrid Control 6.0复选框,将网格控件加入工具箱

35、。 (2) 工程:在窗体中加入数据控件、网格控件及一个命令按钮(用于退出),如图12.17所示。 (3) 控件属性:在属性窗口中按表12.9设置相关控件的属性。 (4) 在图12.18所示窗体中,右击MSFlexGrid网格控件,会弹出快捷菜单,选择【属性】命令,在【允许调整大小】下拉列表中选择1-Columns命令,以便在窗体运行时可以调整列的宽度,12.3.2 数据绑定控件,5) 双击【退出】按钮激活代码窗口,输入下面代码: Private Sub Command1_Click() End End Sub (6) 设置完成后,窗体启动。这时可以将鼠标指针置于两列的边界处,鼠标指针变为横向的

36、双箭头,拖动鼠标,调整列宽到合适的位置。显示结果如图12.18所示,12.3.2 数据绑定控件,表12.9 控件属性设置,12.3.2 数据绑定控件,12.3.2 数据绑定控件,图12.18 用网格控件显示学生数据的效果,12.3.3 数据控件的事件,1. Reposition事件 Reposition事件发生的一条记录成为当前记录后,只要改变记录集的指针使其从一条记录移到另一条记录,会产生Reposition事件。通常,可以在这个事件中显示当前指针的位置。例如,在例12.1的Datal_Reposition事件中加入如下代码: Private SubData1_Reposition() Da

37、ta1.Caption=记录号: +str(Data1.Recordset.AbsolutePosition+1) End Sub 这里,Recordset为记录集对象,AbsolutePosition属性指示当前指针值(从0开始)。当单击数据控件对象上的箭头时,数据控件的标题区会显示记录的序号,如图12.19所示。 2. Validate事件 当要移动记录指针前,修改与删除记录前或卸载含有数据控件的窗体之前触发Validate事件。Validate事件检查被数据控件绑定的控件内的数据是否发生变化,12.3.3 数据控件的事件,图12.19 显示当前记录号,表12.10 Validate事件的

38、Action参数,12.3.3 数据控件的事件,一般可用Validate事件来检查数据的有效性。例如在例12.1中,如果不允许用户在数据浏览时清空“学号”数据,可使用下列代码: Private Sub Datal_Validate(Action As Integer, Save As Integer) If Save And Len(Trim(Text1)=0 Then Action=0 End Sub 3. Error事件 通常在代码中为运行时错误提供错误处理功能。然而没有代码运行时,也会发生错误,如果有一个错误出自上述操作,则产生Error事件。用户可以利用Error事件编写事件过程,否则

39、,Visual Basic将显示与该错误相关的信息,12.3.4 数据控件的常用方法,1. Refresh方法 Private Sub Form_Load0 Datal.DatabaseName=D:XsglXSK.mdb 连接数据库 Datal.RecordSource=XS 构成记录集对象 Datal.Refresh 激活数据控件 EndSub 2. UpdateControls方法 UpdateControls方法可以将数据从数据库中重新读到被数据控件绑定的控件内。因而可使用UpdateControls方法终止用户对绑定控件内数据的修改,12.3.4 数据控件的常用方法,如果要放弃对当前

40、数据项的修改,可以在窗体中设置一个【放弃】按钮,在其Click事件中加入代码:Datal.UpdateControls,就可实现放弃对记录修改的功能。 3. UpdateRecord方法 当对绑定控件内的数据修改后,数据控件需要移动记录集的指针才能保存修改。如果使用UpdateRecord方法可强制数据控件将绑定控件内的数据写入到数据库中而不再触发 Vaildate事件。在代码中可以用该方法来确认修改,12.3.5 记录集的属性与方法,由RecordSource确定的具体可访问的数据构成的记录集Recordset也是一个对象,下面列出记录集常用的属性和方法。 1. AbsolutPostion

41、属性 AbsolutePosition属性返回当前指针值,如果是第一条记录,其值为0,该属性为只读属性。 2. Bof和Eof属性 Bof判定是否在首记录之前,若Bof为True,则当前位置位于记录集的第1条记录之前。与此类似,Eof判定是否在末记录之后。Bof和Eof属性具有以下特点: (1)如果记录集中没有记录,则Bof和Eof的值都是True。 (2)当Bof或Eof的值成为True之后,只有将记录指针移动到实际存在的记录上,Bof或Eof属性值才会变为False。 (3)若Bof或Eof为False,而且记录集中惟一的记录被删除掉,那么属性将保持False,直到试图移到另一个记录为止,

42、这时Bof和Eof属性都将变为True,12.3.5 记录集的属性与方法,4)当创建或打开至少含有一个记录的记录集时,第1条记录将成为当前记录,而且Bof和Eof均为False。 3. Bookmark属性 Bookmark属性的值采用字符串类型,用于设置或返回当前指针的标签。在程序中可以使用Bookmark属性重定位记录集的指针,但不能使用AbsoloutPostion属性。 4. NoMatch属性 在记录集中进行查找时,如果找到相匹配的记录,则Recordset的NoMatch属性为False,否则为True。该属性常与Bookmark属性一起使用。 5. RecordCount属性 R

43、ecordCount属性对Recordset对象中的记录计数,该属性为只读属性。在多用户环境下,RecordCount属性值可能不准确,为了获得准确值,在读取RecordCount属性值之前,可使用MoveLast方法将记录指针移至最后一条记录上,12.3.5 记录集的属性与方法,6. Move方法 使用Move方法可代替对数据控件对象的4个箭头的操作遍历整个记录集中的记录。5 种Move方法是: (1)MoveFirst 方法移至第1条记录。 (2)MoveLast 方法移至最后一条记录。 (3)MoveNext 方法移至下一条记录。 (4)MovePrevious方法移至上一条记录。 (5

44、)Move n 方法向前或向后移n条记录,n为指定的数值。 当n为正数时表示向后移动,n为负数时表示向前移动。例如,如果当前记录为第6条记录,则执行了Data1.Recordset.Move 2后,当前记录变为第4条记录。 对于表类型、动态集类型和快照类型的Recordset对象,可以使用上述所有的方法。对于仅向前类型的记录集,只能使用MoveNext和Move方法。若要对仅向前类型的记录集可使用Move方法,那么指定移动行数的参数必须为正整数,12.3.5 记录集的属性与方法,例12.3 在窗体上用命令按钮代替例12.1数据控件对象,实现记录的前后移动。 设计界面如图12.20(a)所示,运

45、行时不显示Data控件,如图12.20(b)所示,12.3.5 记录集的属性与方法,首记录】按钮Command1的Click事件代码: Private Sub Command1_Click() Data1.Recordset.MoveFirst 记录指针移到第一条记录上 Command1.Enabled = False Command2.Enabled = False Command3.Enabled = True Command4.Enabled = True End Sub 【上一条】按钮Command2的Click事件代码: Private Sub Command2_Click() Da

46、ta1.Recordset.MovePrevious Command3.Enabled = True Command4.Enabled = True If Data1.Recordset.BOF Then 当记录超过上界时 Data1.Recordset.MoveFirst 记录指针恢复到第一条记录 Command1.Enabled = False Command2.Enabled = False Command3.SetFocus 焦点设置到【下一条】按钮 End If End Sub,12.3.5 记录集的属性与方法,下一条】按钮Command3的Click事件代码: Private Su

47、b Command3_Click() Data1.Recordset.MoveNext Command1.Enabled = True Command2.Enabled = True If Data1.Recordset.EOF Then 当记录超过下界时 Data1.Recordset.MoveLast 记录指针恢复到末条记录 Command3.Enabled = False Command4.Enabled = False Command2.SetFocus 焦点设置到【上一条】按钮 End If End Sub 【末记录】按钮Command4的Click事件代码: Private Sub

48、 Command4_Click() Command1.Enabled = True Command2.Enabled = True Command3.Enabled = False Command4.Enabled = False Data1.Recordset.MoveLast End Sub,12.3.5 记录集的属性与方法,7. Update方法 保存对Recordset对象的当前记录所做的修改。 8. Find方法 使用Find方法可在指定的Dynaset或Snapshot类型的Recordset对象中查找与指定条件相符的一条记录,并使之成为当前记录。如果要在表类型记录中查找,要使用S

49、eek方法。4种Find方法是: (1)FindFirst :在记录集中查找满足条件的第一条记录。 (2)FindLast :在记录集中查找满足条件的最后一条记录。 (3)FindNext :从当前记录开始查找满足条件的下一条记录。 (4)FindPrevious :从当前记录开始查找满足条件的上一条记录。 4种Find方法的语法格式相同,语法为: 数据集合.Find,12.3.5 记录集的属性与方法,9. Seek方法 Seek方法用于在表类型的记录集中查找满足条件的记录,使用Seek方法之前必须打开表的索引,要查找的内容必须为索引字段,当找到与其匹配的第1个记录时,记录指针就定位到该记录,

50、并使之成为当前记录。其语法格式为: 数据表对象.Seek comparison,关键字1,关键字2 在使用Seek方法定位记录时,必须通过Index属性设置索引。注意,若在同一个记录集中多次使用同样的Seek方法(参数相同),那么找到的总是同一条记录。 例如,假设XS表中内索引字段为学号,索引名称为“学号”,查找学号为990102的记录,可使用以下代码: Datal.RecordsetType=0 设置记录集类型为Table Datal.RecordSource=XS 打开XS表 Datal.Refresh 激活数据控件 Datal.Recordset.Index=学号 打开名称为学号的索引

51、Datal.Recordset.Seek =, 990102,12.3.6 用数据控件实现记录的增删改操作,Data控件本身只能解决浏览表格并编辑表格的问题,而新记录的添加或删除需要编写代码来完成。Visual Basic的记录集提供了Add、New、Delete、Edit、Update和Refresh方法,专门用于记录的增删改操作。 它们的语法格式为:数据控件.记录集.方法名 1. 增加记录 AddNew方法 AddNew方法在记录集中添加一条新记录。在调用AddNew方法后,新记录将成为当前记录。增加记录的操作分为3步: (1)调用AddNew方法。 (2)给各字段赋值。给字段赋值格式为:

52、Recordset.Fields(字段名)值。 (3)调用Update方法,确定所做的添加,将缓冲区内的数据写入数据库。 如果在使用AddNew方法添加新记录之后,但是没有使用Update方法而移动到其他记录,或者关闭了记录集,那么所做的输入将全部丢失,而且没有任何警告。 例如,给XS表添加一条新记录,可以写成: Data1.Recordset.AddNew Data1.Recordset.Fields(学号) = 991105,12.3.6 用数据控件实现记录的增删改操作,Data1.Recordset.Fields(姓名) = 李建国 Data1.Recordset.Fields(性别)

53、= 男 Data1.Recordset.Fields(出生日期) = #11/18/1983# Data1.Recordset.Fields(专业) = 自控 Data1.Recordset.Update 2. 删除记录 Delete方法 Delete方法是删除当前记录,且不加任何的警告或提示。删除一条记录后,在移动到其他记录之前,已删除的记录将保持为当前状态,记录指针不会自动移到下一条记录上。因此,在删除一条记录后,记录指针必须移至记录集的另一条记录上,一般移至下一条记录。如果被删除的记录为最后一条记录,应该检查Eof属性。 根据这种特性,要从记录集中删除记录的操作应分为3步: (1)定位被

54、删除的记录使之成为当前记录。 (2)调用Delete方法。 (3)移动记录指针,12.3.6 用数据控件实现记录的增删改操作,编辑记录 Eidt方法 操作分为4步: (1)定位要修改的记录使之成为当前记录。 (2)调用Edit方法。 (3)给各字段赋值。 (4)调用Update方法,确定所做的修改。 例如,把当前记录的“专业”字段的内容改成“电子技术”,代码如下: Data1.Recordset.Edit Data1.Recordset.Fields(专业) = 电子技术 Data1.Recordset.Update图12.21 用按钮编程实现数据的,12.3.6 用数据控件实现记录的增删改操

55、作,例12.4 在例12.1的基础上增加6个按钮:【添加】(Command1)、【删除】(Command2)、【修改】(Command3)、【放弃】(Command4)、【查找】(Command5)和【退出】(Command6),通过对前5个按钮的编程建立增删改和找查功能。 (1) 添加Command1 Private Sub Command1_Click() On Error Resume Next Command2.Enabled = Not Command2.Enabled Command3.Enabled = Not Command3.Enabled Command4.Enabled

56、= Not Command4.Enabled Command5.Enabled = Not Command5.Enabled,12.3.6 用数据控件实现记录的增删改操作,If Command1.Caption = 添加 Then Command1.Caption = 确认 Data1.Recordset.AddNew Text1.SetFocus Else Command1.Caption = 添加 Data1.Recordset.Update Data1.Recordset.MoveLast End If End Sub (2) 命令按钮Command2_Click事件调用Delete方法

57、删除当前记录。 Private Sub Command2_Click() Dim pros As String On Error Resume Next,12.3.6 用数据控件实现记录的增删改操作,pros = MsgBox(是否确认删除?, vbOKCancel + vbExclamation) Select Case pros Case vbOK Data1.Recordset.Delete Data1.Recordset.MoveNext If Data1.Recordset.EOF Then Data1.Recordset.MoveLast End Select End Sub (3

58、) 命令按钮Command3_Click事件。 Private Sub Command3_Click() On Error Resume Next Command1.Enabled = Not Command1.Enabled Command2.Enabled = Not Command2.Enabled Command4.Enabled = Not Command4.Enabled,12.3.6 用数据控件实现记录的增删改操作,Command5.Enabled = Not Command5.Enabled If Command3.Caption = 修改 Then Command3.Capt

59、ion = 确认 Data1.Recordset.Edit Text1.SetFocus Else Command3.Caption = 修改 Data1.Recordset.Updata End If End Sub (4) 命令按钮Command4_Click事件。 Private Sub Command4_Click() On Error Resume Next,12.3.6 用数据控件实现记录的增删改操作,Command1.Caption = 添加: Command3.Caption = 修改 Command1.Enabled = True: Command2.Enabled = True Command3.Enabled = True: Command4.Enabled = False Command5.Enabled = True Data1.UpdateControls Data1.Recordset.MoveLast End Sub (5) 命令按钮Command5_Click。 Private Sub Command5_Click() Dim inp As String inp = InputBox$(请输入学号, 查找) Data1.Recordset.FindFirst 学号 = & _ data source=D:XsglXSK.mdb Mycon.Ope

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论