从20世纪50年代中期开始,计算机的应用由科学研究部门扩展到企业、行政部门,数据处理迅速
上升为计算机应用的主要方面。在计算机的三大应用中(科学计算、数据处理及过程控制),数据处理所
占比重约为70%左右。在60年代末,数据库技术就是作为数据处理中的一门技术发展起来的。
第一章数据库编程基础
1.1.1基本概念和术语
1)数据(Data):是描述事物的符号记录。数据与其语义是不可分的,数据需要经过语义解释。
2)数据库(Databa,简称DB):是统一管理的相关数据的集合;能为各种用户共享,具有最小冗
余度、数据间关系密切,而又有较高的对程序独立性等特点。
3)数据库管理系统
(DataBaManagementSystem,简称为DBMS)DBMS是位于用户与操作系统间的一层数据
管理软件,它为用户或应用程序提供了访问DB的方法,包括DB的建立、查询、更新和各种数
据控件等;DBMS的目的:提供一个可以方便地、有效地存取数据库信息的环境。
4)数据库系统(DataBaSystem,DBS)DBS是实现有组织的、动态的存储大量关联数据,方便
多用户访问的计算机软件、硬件和数据资源组成的系统,即它是采用了数据库技术的计算机系统。
5)数据库技术
数据库技术是研究数据库的结构、存储、设计、管理和使用的一门软件学科。
6)数据库系统的组成如下图所示
1.1.2关系型数据库中的基本概念
在介绍关系型数据库的基本概念之前,我们先介绍一下关系模型:
关系模型(relationalmodel)是由若干个关系模式组成的集合。其主要特征是用表格结构表达实
体集,用外键表示实体间联系。关系模型由关系结构、关系操作集合和完整性约束三部分组成。
1)单一数据结构关系
2)关系模型的数据结构非常单一。在关系模型中,现实世界的实体以及实体间的各种联系均用关系
来表示。在用户看来,关系模型中数据的逻辑结构是一张二维表。
2)关系操作
关系模型中常用的关系操作包括:选择(Select)、投影(Project)、连接(Join)、并(Union)、交
(Interction)、差(Difference)等查询(Query)操作和增加(Inrt)、删除(Delete)、修改(Update)操作两大
部分。查询的表达能力是其中最主要的部分。
关系操作的特点是集合操作方式,即操作的对象和结果都是集合。这种操作方式也称为一次一
集合的方式。相应的非关系数据模型的数据操作方式为一次一记录的方式。关系操作涉及关系代数、
元组关系演算和域关系演算。另外还有一种介于关系代数和关系演算之间的语言SQL(Structurel
QueryLanguage)。
3)关系的三类完整性约束:
实体完整性、参照完整性和用户自定义完整性。其中实体完整性和参照完整性是关系模型必须满
足的完整性约束条件,应该由关系系统自动支持。
在关系型数据库中数据以行和列的形式存储,为了便于理解,我们称这一系列的行和列为表,
一组表组成了数据库。关系型数据库是根据表、记录和字段之间的关系进行组织和访问的一种数据库,
他通过若干表来存储数据,各数据项之间用关系来组织,关系(relationship)是表之间的一种连接,
通过关系,可以更灵活地表示和操纵数据库中的数据;另外,用户可以非常方便的使用查询(Query)
来检索数据库中的数据,一个Query是一个用于指定数据库中行和列的SELECT语句。关系型数据库
中通常包含如下3部分:
1)端应用程序(client)
2)数据库服务器(rver)
3)数据库(Databa)
以下我们将简要的介绍一下关系型数据库中的一些基本概念:
1)表:表是一种按行和列排列的相关信息的逻辑组,类似于工作表单。例如,在表1.1中包含了
一系列有关学生的信息。
表1.1学生基本情况表
2)记录:在表1.1中,有关学生的信息存放在表的各个行中,这些行被称为记录(Record)。一
般来说,数据库表中的记录任意两行都不能相同,不能有两个所有条件都一样的学生。例如表1.1有
4个记录,他们分别描述了四个学生的基本情况。
学号姓名性别年龄班级
0201张明丽女2002-1
0202王维男2102-1
0203李雯女2002-2
0204刘华男
2202-2
3)字段:数据库表中的每一列称作一个字段。表是由其包含的各种字段定义的,每个字段描
述他所包含的数据。创建一个数据时,为每个字段分配一个数据类型、最大长度和属性。字段可包含
各种字符、数字甚至图形。
4)关键字:关键字是表中的一个或多个字段,是为快速检索而被索引的。关键字可以是唯一的,
也可以是非唯一的,取决于是否允许重复。唯一关键字可以指定为主关键字,用来唯一标识表的每行。
例如,在上面的例子中,学号是表的主关键字,因为学号可以唯一的标识一个学生。
5)索引:为了更快的访问数据库,大多数数据库都使用索引。数据库表的索引算法是比表搜索
算法更快的排序算法,每个索引输入项指向其相关的数据库行。如果数据库在寻找记录时先浏览索引,
寻找记录将变得更容易而且数据返回得更快。
6)关系:数据库可以由多个表组成,表与表之间可以用不同的方式相互关联。例如1.2所示的学
生成绩表保存了学生的成绩,这个表中的记录可以通过学生的学号和学生基本情况表中的记录关联起
来。在表1.2中的学号字段引用了表1.1学生基本情况表中的学号字段,从而把学生的基本情况和学
生成绩联系起来了。
用来建立关系的键叫做外部键或称为外键,因为它与“外部”表“学生基本情况表”的主键关联。
表1.2学生成绩表
库、表、记录和
字段间的关系如下图所示:
数
据字段
库
记录
表
表
3
表
2
学号外语高数
物理
02017869
78
02028587
79
学号外语高数物理
目前常用的关系型数据库
目前常用的关系型数据库管理系统有:ORACLE、SYBASE、SQLSERVER、MSSQLSERVER、
IBMDB2UDB、INFORMIX等,常用的小型数据库有:Access、Pradox、Foxpro等,个人用户比较常
用的是基于中小型数据库的MSSQLSERVER和Access。这些数据库的简介见课本
1.1.3VB数据库编程中的术语
1)数据库引擎
数据库引擎存在于程序和物理数据库文件之间,将数据访问对象上的操作转换为对数据库文件自身
的物理操作,来处理所有与各种数据库接口的机制。这使用户与正在访问的特定数据库无关,不管这个
数据库是本地的VB数据库,还是所支持的其他任何数据库格式,所使用的数据访问对象和编程技术都
是相同的。
Jet数据库引擎被包含在一组动态链接库(DLL)文件中,运行时,这些文件被链结到VB程序。它把应
用程序的请求翻译成对.mdb文件或其他数据仓库的物理操作。它真正读取、写入和修改数据库,并处
理所有内部事务,如索引、锁定、安全性和引用完整性。它还包含一个查询处理器,接收并执行结构化
查询语言(SQL)查询,来实现所需要的数据库操作。另外还包含一个结果处理器,用来管理查询所返回
的结果。
2)数据表(Table)
数据表是一组相关的数据按行列来排列,可以把它想象成行列整齐的表格。每一行称作一条记录
(Record),每一列称作一个字段(Field)。
3)记录(Record)
在表中,每一行就是一条记录,它唯一描述了一个有意义的事物。一般来说,数据库表的记录创建
时任意两行都不能相同。
4)字段(Field)
在表中每一列就是一个字段,它的每一个元素描述了该元素所在行(记录)的某一个方面的性质。表
是有其包含的各种字段定义的,每个字段描述了它所含有的数据。创建一个数据库时,为每个字段分
配一个数据类型、最大长度和其他属性。字段可包含各种字符、数字甚至图形、声音、动画等多媒体
信息。
5)索引(Index)
为了加快访问数据库的速度并提高访问效率,特别赋予数据表中的某一个字段的性质,使得数据
表中的记录按照该字段的某种方式排序(升序或降序)。
6)键(Key)
键就是表中的字段(或多个字段),它(们)为快速检索而被索引。键可以是唯一的,也可以是非唯一的,
取决于它(们)是否允许重复。唯一键可以指定为主键,用来唯一标识表的每行。
7)关系(Relation)
数据库可以由多个表组成,表与表之间可以用不同的方式相互关联。
1.2VB数据库的编程方法
1.2.1VB数据库的组成
VB数据库的组成有三部分:用户界面、数据库引擎、数据库。其中数据库引擎存在于用户界面和数
据库之间,起中介作用,用户通过它与所要访问的特定数据库联系。不管这个数据库是本地的VB数据
库,还是其所支持的其他任何数据库格式,所使用的数据访问对象和编程技术都是相同的。
1.用户界面
用户界面是进行人机交互的界面,用于显示数据并允许用户查看或更新数据。驱动用户界面的是VB
编写的应用程序代码,这些代码包括用来请求数据库服务的数据访问对象和方法,如添加、删除记录和
执行查询等。
由应用程序代码所发出的服务请求是向数据库引擎提出的,而不是直接对物理数据库文件进行操
作。对物理数据库的直接操作由数据库引擎发出,并向应用程序返回所需要的结果。
2.数据库引擎
Jet数据库引擎包含在一组动态连接库(DLL)中。运行时动态连接库文件被连接到VB程序,他把
应用程序的请求翻译成对.mdb文件或其他数据库的物理操作。
Jet数据库引擎被包含在一组动态链接库(DLL)文件中,运行时,这些文件被链结到VB程序。它把应
用程序的请求翻译成对.mdb文件或其他数据仓库的物理操作。它真正读取、写入和修改数据库,并处理
所有内部事务,如索引、锁定、安全性和引用完整性。它还包含一个查询处理器,接收并执行结构化查
询语言(SQL)查询,来实现所需要的数据库操作。另外还包含一个结果处理器,用来管理查询所返回的
结果。
3.数据库
对于本地的VB或MicrosoftAccess数据库来说,就是.mdb文件,对于其他的数据库,则可能包含
其他扩展名的文件,例如:在SQLSERVER7.0中包含称为*.mdf和*.ldf的数据库。
1.2.2VB访问数据库的方法
VB提供了多种访问数据库的方法,VB可以访问的数据库类型有许多种。另外,还可以通过ODBC
访问SQL服务器,以客户/服务器的方式进行数据存取。VB访问数据库的方法有如下几种:
1)使用可视化数据管理器
2)使用DATA控件
VB工具箱中提供了一个DATA控件,他是VB开发数据库应用程序是最常用的控件之一。利用他不
需要任何编程就可以实现对数据库的访问。而所要做的工作仅仅是在窗体上添加一个DATA控件和一些
用来显示数据的约束控件,并且设置它们的属性。这是访问已有数据库的最简便的方法,在VB实现的很
巧妙。
3)使用DAO访问数据库
DAO(DataAccessObjects,DAO数据访问对象)是一种基于JET数据库引擎的面向对象的接口。使
用DAO进行数据库编程非常简单。
4)使用RDO远程数据对象
RDO(RemoteDataObjects,远程数据对象)为使用代码来创建和操作一个远程ODBC数据库系统的
各个部件提供了一个框架。
5)使用ADO数据控件
ADODATA控件使用MicrosoftActiveX对象(ADO)来快速建立数据绑定的控件和数据提供者之
间的链接,数据提供者可以是任何符合OLEDB规范的数据源。
6)使用ActiveX数据对象
ActiveX数据对象(ADO)是为Microsoft最新的强大的数据访问接口OLEDB而设计的,它是VB
支持的三种数据访问接口之一,其它两个分别为DAO和RDO。OLEDB可以为任何数据源提供高性能
的访问,这些数据源包括关系和非关系数据库、电子邮件和文件系统、文本和图形、自定义业务对象等。
1.3关系型数据库标准语言SQL
1.3.1SQL语言概述
SQL(StructuredQueryLanguage)语言是1974年由Boyce和Chamberlin提出的。1986年10月美
国国家标准局(AmericanNationalstandardInstitute,简称ANSI)的数据库委员会X3H2批准了SQL作为
关系数据库语言的美国标准。同年公布了SQL标准文本(简称SQL-86)。1987年国际标准化组织
(InternationalOrganizationforStandardization,简称ISO)也通过了这一标准。
此后ANSI不断修改和完善SQL标准,并于1989年公布TSQL-89标准。1992年又公布了SQL-
92标准(也称SQL2)。目前ANSI的99版本SQL3,也已经发布了。
我国也制定了SQL的国家标准GB12911,它等效于SQL-89版本。目前关系数据库管理系统都采用
SQL语言作为数据库语言,SQL语言成为关系数据库的核心语言。有方言,支持程度不同。
1.3.2SQL语言功能
1)数据定义(DDL):定义、删除、修改关系模式(基本表);定义、删除视图(View);定义、删除
索引(Index)
2)数据操纵(DML):数据查询;数据增、删改;
3)数据控制(DCL):用户访问权限的授予、收回;
数据查询的功能可以理解为使用“动词SELECT”对数据记录或记录集进行查询;
数据定义的功能可以理解为使用“动词”对数据库、基本表、视图和索引进行定义;
数据操纵的功能可以理解为使用“动词”对数据记录或记录集进行插入、删除和修改操
作;
数据控制的功能可以理解为使用“动词”对用户或组进行授予和收回特定权限的控制操作;
特定权限包括所有上述功能。
Select查询
数据查询是数据库应用的核心功能,是数据库的核心操作。SQL语言提供了SELECT语句进行数据
库的查询,该语句具有灵活的使用方式和丰富的功能。数据查询是对己建立的表中的数据进行检索的操
作,SELECT语句不会更改数据库的中的数据。使用SELECT-SQL命令可以选择查询表中的任意列,
它至少包括两个句子,其基本形式为:
SELECT[ALL|DISTINCT]<目标列表达式>[,<目标列表达式>]…
FROM<表名或视图名>[,<表名或视图名>]…
[WHERE<条件表达式>]
[GROUPBY<列名1>[HAVING<条件表达式>]]
[ORDERBY<列名2>[ASC|DESC]];
整个SELECT语句的含义是,根据WHERE子句的条件表达式,从FROM子句指定的基本表或视图
中找出满足条件的元组,再按SELECT子句中的目标列表达式,选出元组中的属性值形成结果表。如果
有GROUP子句,则将结果按<列名1>的值进行分组,该属性列值相等的元组为一组。通常会在每组中
使用集函数。如果GROUP子句带有HAVING短语,则只有满足指定条件的组才予以输出,如果有ORDER
子句,则结果表还要按<列名2>的值的升序或降序排序。
举例说明
lect学生基本情况表.*from学生基本情况表orderby学生基本情况表.学号
本例命令的意义为:
选取所有”学生基本情况表"内的记录及字段,并以"学号"大小,由小到大作排序。学生基本情况表.*
表示所有表中的字段
1.4数据库的建立
数据库的新建包括数据表、库、字段及字段属性的建立。再此我们将介绍几中创建数据库的方法:
1)使用可视化数据管理器创建数据库
通过VB集成开发环境下的“外接程序”菜单下的“可视化数据管理器”命令,就可以使用VB提供的一
个功能强大的数据库访问工具来创建和操纵数据库。实例导引。
2)使用DAO编程创建数据库
DAO模型是设计关系数据库系统结构的对象类集合。它提供了管理这样一个系统所需的全部操作的
属性和方法,包括创建数据库,定义表、字段和索引,建立表间关系,定位和查询数据库等工具;由于
本方法在创建数据库时较为复杂,故在此不予介绍。
3)使用MicrosoftAccess2000创建数据库
Access是一个数据库管理系统,它之所以被集成到Office中而不是VisualStudio中,是因为它与其
它数据库管理系统(如)相比更加简单易学,一个普通的计算机用户即可掌握并使用它。
注意:在离开Access之前还有一个问题必须解决,就是Access2000与VB6.0的兼容问题,用
Access2000创建的数据库不能直接被VB6.0访问,必须经过转化才行以下将给大家介绍如何使用
Access2000来创建数据库。进入Access2000
第二章数据约束控件
为数据识别控件,在数据库中通过它访问有关的数据信息。
第二章数据约束控件
VB提供了一些具有数据感知功能的控件来配合数据约束控件显示记录集中的数据内容,称
这些控件为数据绑定控件。
2.1Data控件
定义:Data控件是数据约束控件;
可与Data控件绑定的内部控件有:
CHeckBox、PictureBox、Label、
TextBox、Image、ListBox、
ComboBox及OLE控件。
2.1.1Data控件的常用属性:
1)Connect属性
该属性设置所要使用的数据库的类型,有Access、Excel等类型;
2)DataBaName属性
该属性返回或设置数据源的名称和位置;
3)RecordSource属性
该属性设置数据绑定控件的记录的来源。
2.1.2“设置绑定”
所有的数据绑定控件都有两个共同属性:
DataSource和DataField属性
DataSource用来设置数据源;DataField属性设置字段名;
2.1.2“设置绑定”
DataSource属性和DataField属性的设置必须在Data控件的属性设置完成之后进行。
2.1.2“设置绑定”
设置绑定的步骤如下:
1)在窗体上放置Data控件;
2)设置Data控件的Connect、DataBaName和RecordSource属性;
2.1.2“设置绑定”
3)在窗体上放置数据绑定控件;
4)设置绑定控件的DataSource属性和DataField属性;
5)如果需要多个数据绑定控件,重复步骤3)和4)。
几点注意
1、数据库必须为早期版本的数据库,所以要进行数据库的转换。
2、几个设置步骤缺一不可!
第三章数据访问对象(DAO)
1、Jet数据库引擎
引擎(engine)能够决定程序管理和数据操作的程序或程序段。数据库引擎就是操作数据库的一段程
序或程序段。MicrosoftJet数据库引擎和数据访问对象DAO(dataaccessobject)可以创建功
能强大的客户/服务器应用程序。
第三章数据访问对象(DAO)
Data控件几乎不需要任何代码,仅通过属性的设置就可以具有访问数据库的能力。而利用代码增强
Data控件的功能,则体现了DAO的部分功能。实际上,Data控件是在高层次上执行DAO,作为一个高
层对象,它封装了操纵Jet所需的编程任务。本章介绍DAO以及编程技术。
3.1什么是DAO
DAO是数据访问对象(DataAccessObjects)的简称,它包含了很多对象和集合,通过Jet引擎来连
接MicrosoftAccess数据库和其他数据库。
3.1什么是DAO
DAO模型为进行数据库编程提供了需要的属性和方法。利用DAO可以完成对数据库的创建,如创
建表、字段和索引,完成对记录的定位和查询以及对数据库的修改和删除等。
3.2DAO的优缺点
优点:
1)数据访问对象完全在代码中运行,使程序员可以摆脱Data控件的限制,使用代码操纵Jet引擎访
问数据库数据,能够开发出更强大更高效的数据库应用程序。
2)使用数据访问对象开发应用程序,使数据访问更有效,同时对数据的控制更灵活更全面,给程序
员提供了广阔的发挥空间。
3.2DAO的优缺点
缺点:
数据访问对象的复杂性,使其使用起来更为复杂和抽象,不如使用Data控件简单和直观,可以说,
使用DAO需要使用者具备更多的数据库操作知识。
使用时的注意事项
1、在使用DAO之前,必须确保已经引用DAO对象。如果没有引用,采用
以下操作引用DAO库:单击“工程”菜单的“引用”选项,出现引用对话框,
选中其中的“MicrosoftDAO3.5ObjectLibrary”项,单击“确定”按钮。
2、DAO也只能访问早期版本的Access数据库,所以应用时要转换。
3.3DAO可以识别的数据库类型
有三种类型:
1)桌面数据库
*.mdb数据库,即我们所讨论的Access数据库;
2)外部数据库
包括dBASEII、MicrosoftFoxProversion2.0等;
3.3DAO可以识别的数据库类型
3)ODBC数据库(开放式数据库连接)
这包括符合ODBC标准的客户/服务器数据库,如MicrosoftSQLServer。
3.4DAO中常用对象的方法和属性
1)WorkSpace(工作区)对象
Workspace对象定义了使用何种方式连接数据库。在DAO中,可以使用MicrosoftJet引擎或
ODBCDirect中的任何一种,视数据源而定,而连接方式的实现,则可以通过Workspace对象来定义。
Workspace对象还提供了事务处理,为保证数据库的完整性提供了支持。
1)WorkSpace(工作区)对象的方法
Opendataba方法
该方法用于在工作区中打开数据库。
Opendataba方法
*语法表示为
tdataba=
taba
(dbname,options,readonly,connect)
Opendataba方法
*参数说明
a)Databa参数可选,为工作区的数据库对象变量;
b)Dbname参数,用于指定要打开的数据库文件名或数据库路径名称;
opendataba方法
C)Options:参数可选,该参数对于MicrosoftJet工作区,当其值为True时,以独占的方式打开数
据库;其值为Fal(默认)时,以共享方式打开数据库;
Opendataba方法
d)readonly参数,用于设置是否以只读的方式打开数据库,当设置为True时,以只读方式打开,否
则相反,默认为Fal。
Opendataba方法
e)Connect参数,用于指定打开数据库的不同连接信息,包括口令等,该参数分为两个部分,数据
库类型与其它选项,选项间可以使用分号连接。
Opendataba方法使用举例
DimdbAsDataba
Setdb=taba("")
表示在工作区中打开名为的数据库,并建立一个数据库对象。
2)DataBa对象
即数据库对象,是用来管理一个打开的数据库连接的对象,大多数数据访问都是通过该对象进行
的,是对数据库实施操作时首先要使用的对象。
2)DataBa对象的方法
OpenRecordt方法
该方法用于创建新的记录集对
象。
OpenRecordt方法
*语法表示
trecordt=
cordt(
source,type,options,
lockedits)
OpenRecordt方法
*参数说明
a)source参数用于指定记录的来源,它的来源可以是表名字,查询名字或SQL语句返回的记录。
对于MicrosoftJet数据库,数据来源只能是数据库表。
OpenRecordt方法
b)Type可选参数,用于指定记录集的类型。通常该参数可取为:
dbopentable
dbopendynat
dbopensnapshot
c)Options可选参数,指定记录集的特性。
d)Lockedits可选参数用于指定记录集是否被锁定。
3.4DAO中常用对象的方法和属性
举例说明
DimsqlAsString
DimdbAsDataba
DimrsAsRecordt
Setdb=OpenDataba(“D口令库.mdb")
sql=“lect*from口令表where用户名='"&urname&"'"
Setrs=cordt(sql,dbOpenDynat)
在此将SQL语句作为第一个参数,生成一个动态集或快照类型的记录集。SQL语句必须写
成字符串的形式(即必须用引号括起来),这条语句被执行后,rs就代表一组满足在SQL语句中指定条件
的记录集。可以对这些记录使用Recordt对象的任何一种方法。
3.4DAO中常用对象的方法和属性
3)RecordSet对象
当数据库和表建立后,就可以对表中的记
录进行增加、删除、修改、查询和定位等
操作,在DAO中,这些操作都是通过记录
集来实现的,操作记录集主要是通过对记
录集对象RecordSet的应用来实现的。
RecordSet对象是一批记录的集合,由一系
列的记录和字段组成。
3)RecordSet对象的常用方法
1、AddNew方法
用于向数据表中增加记录,增加记录
的步骤可以分为三步:
1)调用AddNew方法
2)给字段赋值(通过数据绑定控件)
3)调用Update方法,将添加的记录保存到数据表中。
3)RecordSet对象的常用方法
2、Delete方法
用于从记录集中删除记录;
3、Edit方法
用于修改记录集的当前记录需要四个步骤:
1)定位到要修改的记录使之成为当前记录;
2)调用Edit方法
3)修改字段
4)调用Update方法,确定所作的修改
3)RecordSet对象的常用方法
4)Update方法
用来把添加的新纪录或把当前
记录的修改结果保存到数据表
中,该方法只能在Edit方法或
AddNew方法执行之后才能执行。
3)RecordSet对象的常用方法
5、Move方法
使记录指针移动的方法,有四种:
MoveNext:把记录指针移到下一条记录
MovePrevious:把记录指针移到上一条记录
MoveFirst:把记录指针移到第一条记录
MoveLast:把记录指针移到最后一条记录
3)RecordSet对象的常用方法
6、Find方法
顺序查找满足条件的某条记录
有四种:
FindFirst
FindLast
FindNext
FindPrevious
6、Find方法
应用:rst条件
其中条件为字符串,字符串存放的是
指定字段与常量或变量构成的表达式
如:
rst"学号="&"'"&s&"'"
3)RecordSet对象的常用方法
7、Refresh方法
重新读取数据库,刷新记录集。
RecordSet对象的常用属性
1、Eof和Bof
记录定位标志
如果记录指针位于第一条记录之前,Bof
属性为True,否则为Fal;
如果记录指针位于最后一条记录之后,Eof
属性为True,否则为Fal。
RecordSet对象的常用属性
2、RecordCount属性
若为表类型的记录集对象,该属性为
记录总数;
若为快照或动态集类型的记录集对象,
为访问过的所有记录的个数;
若记录集中没有记录,该属性为0。
3.5Select数据查询
数据查询是对己建立的表中的数据进行检索的操作,SELECT语句不会更改数据库的中的数
据。使用SELECT-SQL命令可以选择查询表中的任意列,它至少包括两个句子,其基本形式为:
3.5Select查询
SELECT<目标列表达式>【,<目标列表达式>】…
FROM<表名或视图名>【,<表名或视图名>】…
【WHERE<条件表达式>】
【GROUPBY<列名1>【HAVING<条件表达式>】】
【ORDERBY<列名2>【ASC|DESC】】
3.5Select查询
举例说明
lect学生基本情况表.*from学生基本情况表orderby学生基本情况表.学号
本例命令的意义为:
选取所有”学生基本情况表“内的记录及字段,并以”学号“大小,由小到大作排序。学生基
本情况表.*表示所有表中的所有字段
3.6DAO运用
系统建立步骤:
1)建立数据库
2)建立工程,添加相应的控件并将DAO引入此工程;
3)编写相应的程序代码;
4)调试程序,运行结果。
程序演示
代码说明
在模块中定义的全局变量
PublicdbAsDataba
PublicrsAsRecordt
PublicaddrecordAsBoolean
PublicmodifyrecordAsBoolean
PrivateSubForm_Load()'窗体加载程序
DimsqlAsString
addrecord=Fal
modifyrecord=Fal
initial_button'功能修饰
Setdb=OpenDataba(&"",Fal,Fal)
'表示以共享的方式打开数据库
sql="lect学生基本情况表.*from学生基本情况表orderby学生基本情况表.学号"
'按照学号顺序将学生基本情况表中的所有字段选择出来
Setrs=cordt(sql,dbOpenDynat)
'此句代表创建由SELECT命令字符串所要选取的记录形成Dynat记录形式,并将创建的结果设
置给rs(RecordSet变量)
Count>0Then
‘判断有无记录
displayrecord'若有记录,则调用显示程序显示记录
El
MsgBox"目前没有任何学生的数据",vbExclamation+vbOKOnly,""
cleardisplay
'若无记录,则提示信息并调用程序清楚文本框,将光标定位在学号的文本框中
Text1(1).SetFocus
'并要求增加记录
EndIf
EndSub
'**********************************************************************************
'移动按钮的功能设计:
'移动按钮的程序必须有判断按下哪一个按钮的功能,并且依按钮的要求,完成记录指针的移动和显
示
PrivateSubCommand1_Click(IndexAsInteger)
Constmove_first=0'定义移至最前的指示常量
Constmove_previous=1'定义移至上一组的指示常量
Constmove_next=2'定义移至下一组的指示常量
Constmove_last=3'定义移至最后的指示常量
SelectCaIndex
Camove_first'若按下移至最前,则移至最前
rst
Camove_previous'若按下移至上一组,则移至上一组
evious
n'在移至上一组时判断是否移过头了
MsgBox"这已经是第一组数据",vbOKOnly+vbExclamation,""'若移过头了,则给出提
示信息并发出警报
rst
Beep
EndIf
Camove_next'若按下移至下一组,则移至下一组
xt
n'在移至下一组时判断是否移过头了
st
MsgBox"这已经是最后一组数据",vbOKOnly+vbExclamation,""'若移过头了,则给出提示
信息并发出警报
Beep
EndIf
Camove_last'若按下移至最后一组,则移至最后一组
st
EndSelect
displayrecord‘调用显示程序,显示记录中的数据
EndSub
PrivateSubCommand5_Click()
DimsAsString
s=InputBox$("请输入学号","学号搜索","")
Ifs<>""Then
s="学号="&"'"&s&"'"
rsts
hThen
displayrecord
El
MsgBox"目前没有这个学号的任何记录",vboknoly+vbExclamation,""
EndIf
EndIf
EndSub
'添加按钮的功能包括:清除所有文本框中的内容,在将光标移至学号文本框Text1(0)
PrivateSubCommand6_Click()
cleardisplay
savecancel'功能修饰
Text1(0).SetFocus
addrecord=True
'*******************************************************************
'VB提供了一个SetFocus方法,能把焦点移动到某个控件上,将光标移动到文本框是因为Text1(0)
为第一个输入数据的地方
EndSub
PrivateSubCommand7_Click()
DimdAsInteger
initial_button'功能修饰
d=MsgBox("确定要删除这笔记录吗?",vbQuestion+vbYesNo,"删除记录")'提示信息
Ifd=vbYesThen'判断操作者是否按下是按钮?若是则删除,否则不作任何动作
'是则删除
xt'将记录移至下一个记录
Count>0Then'若有记录则显示目前记录内容
n
st
EndIf
displayrecord
El'若无记录则增加一组空白记录并清除窗体显示
cleardisplay
EndIf
EndIf
EndSub
PrivateSubCommand8_Click()'修改按钮
savecancel'功能修饰
Text1(0).SetFocus'将输入焦点移到文本框text1(0)
modifyrecord=True'置修改标志为有效,表明目前处于修改状态
EndSub
PrivateSubCommand9_Click()
initial_button'功能修饰
Ifaddrecord=TrueThen'窗体在添加状态
'添加一组空白记录
writerecord'将窗体显示登录到记录上
'将记录写至数据库
addrecord=Fal'添加结束,将标志置为无效
El
Ifmodifyrecord=TrueThen'窗体在修改状态
'修改目前记录
writerecord'将窗体显示登录到记录上
'将记录写至数据库
modifyrecord=Fal'修改结束,将标志置为无效
EndIf
EndIf
EndSub
PrivateSubCommand10_Click()'取消按钮的设计
initial_button'功能修饰
addrecord=Fal'使添加和修改的标志为无效,说明添加和修改被取消了
modifyrecord=Fal
Count>0Then'重新显示记录内容
displayrecord
El
cleardisplay
EndIf
EndSub
PrivateSubCommand11_Click()
UnloadMe'结束按钮按下时关闭本窗口
EndSub
'添加savecancel程序:其作用为将一般功能键失效,辅助激活
PublicSubsavecancel()
DimiAsInteger
Fori=0To3
Command1(i).Enabled=Fal
Nexti
d=Fal
d=Fal
d=Fal
d=Fal
d=True
d=True
d=Fal
EndSub
'加入savecancel程序的地方有添加按钮和修改按钮的command_click事件中
'添加initial_button()程序,其作用是将一般功能键按钮激活而辅助功能按钮失效
PublicSubinitial_button()
DimiAsInteger
Fori=0To3
Command1(i).Enabled=True
Nexti
d=True
d=True
d=True
d=True
d=Fal
d=Fal
d=True
EndSub
'需要加入initial_button程序的地方有:窗体加载,删除,保存和取消
'**************************************************************************************
*******************
PublicSubdisplayrecord()'将记录中的内容显示到文本框中
DimiAsInteger
Fori=0To4
IfNotIsNull((i))Then
Text1(i)=(i)'将字段内容赋给文本框显示
El
Text1(i)=""
EndIf
Nexti
'***********************************************************************************
'IsNull()函数判断是否为空白内容,若为空白内容,则返回值为True,否则返回Fal
EndSub
PublicSubcleardisplay()'如果记录中无记录,则清除所有文本框中的内容
DimiAsInteger
Fori=0To4
Text1(i)=""
Nexti
EndSub
系统登陆身份验证程序
PrivateSubCommand1_Click()'确定登录按钮的设置
DimpasswordAsString
StaticnAsInteger'限制登录的次数,以防止无限次的登录!
n=n+1
IfText1(0).Text="gly"AndText1(1).Text="888"Then'定义管理员的用户名和密码,设置其权限为
最高!
'为硬编码的方式
UnloadMe
El
Ifn>3Then
MsgBox"你已经超过允许的登录次数!应用程序将结束!",vbOKOnly+vbExclamation,"登录
验证"
End'超过最大的登录次数,发出提示信息
El
urname=Trim(Text1(0).Text)'获得用户名
password=Trim(Text1(1).Text)'获得用户密码
SelectCacheckpassword(urname,password)'调用子程序,判断用户名及密码的合法性
Ca0'用户不是系统用户
MsgBox"用户名不正确,请检查用户名是否正确!",vbOKOnly+vbExclamation,"登录验证"
Text1(0).Text=""
Text1(1).Text=""
Text1(0).SetFocus
Ca1'用户名对,但口令错误
MsgBox"口令错误,请重新输入密码!",vbOKOnly+vbExclamation,"登录验证"
Text1(1).Text=""
Text1(1).SetFocus
Ca2'登录成功
MsgBox"登录成功,欢迎使用本系统!",vbOKOnly
UnloadMe'关闭本窗口,显示用户窗口
CaEl
End
EndSelect
EndIf
EndIf
EndSub
PrivateSubCommand2_Click()'取消按钮的设置
IfMsgBox("确定退出吗?",vbYesNo+vbExclamation,"登录验证")=vbYesThen
UnloadMe
EndIf
EndSub
'子函数,用来判断用户名及密码的合法性
PrivateFunctioncheckpassword(ByValurnameAsString,ByValpasswordAsString)AsByte
DimsqlAsString
Setdb=OpenDataba("D:VB设计1028第三章系统登录身份验证密码库")'打开数据
库
sql="lect*from密码表where用户名='"&urname&"'"'建立查询条件,库中用户名和输
入的用户名相同
Setrs=cordt(sql,dbOpenDynat)
n
checkpassword=0'没有查询结果,为非法的用户
El
Ifpassword<>Trim(("密码").Value)Then
checkpassword=1'口令不正确
El
checkpassword=2'口令正确
EndIf
EndIf
EndFunction
PrivateSubCommand1_Click()
Setdb=OpenDataba("D:VB设计1028第三章系统登录身份验证密码库")
'打开数据库
sql="lect密码表.*from密码表where密码表.用户名='"&urname&"'"
Setrs=cordt(sql,dbOpenDynat)
us
<>""=en
'判断两次输入的密码是否一致?一致则将密码加入到数据库
(1)=Text1
MsgBox"请记住密码以便下次访问!",vbInformation
UnloadMe
El'不一致则重新输入密码
MsgBox"两次输入的密码不一致,请重新输入密码!",vbInformation
=""
=""
us
EndIf
EndSub
PrivateSubCommand2_Click()
UnloadMe
EndSub
本文发布于:2023-03-03 07:02:32,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/zhishi/a/1677798152120475.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:vb数据库.doc
本文 PDF 下载地址:vb数据库.pdf
留言与评论(共有 0 条评论) |