• 沒有找到結果。

Visual FoxPro程序设计教程 - 万水书苑-出版资源网

N/A
N/A
Protected

Academic year: 2021

Share "Visual FoxPro程序设计教程 - 万水书苑-出版资源网"

Copied!
36
0
0

加載中.... (立即查看全文)

全文

(1)

第 3 章 数据库与表

本章学习目标  了解数据库、自由表和数据库的概念和联系。  掌握数据表内容的编辑方法。  了解数据库字典的概念,掌握数据表记录属性的设置及永久关系的建立的方法。 在 Visual FoxPro 中,一个具体的关系模型,由若干个关系(表)组成,表用来组织和管 理数据。而数据库(DataBase)则是一个包容器,它提供了存储数据的一种结构,用来组织相 互之间存在联系的多个表。同时,还有一种独立于数据库而存在的表,在数据库理论中,把数 据库中包含的表称为数据库表,把独立于数据库的表称为自由表。 不管是自由表还是数据库表,对它们的操作都是关系模型最基本的操作,只不过数据库 表比自由表的操作要更丰富些。 数据库与表(Table)是两个不同的数据实体,数据库可以管理表、视图等数据实体。此 外,数据库还提供了数据字典、各种数据保护和数据管理功能。 视图(View):一个保存在数据库中的、由引用一个或多个表、或其他视图的相关数据组 成的虚拟表,可以是本地的、远程的或带参数的。 存储过程(Stored Procedure):是保存在数据库中的一个过程。该过程能包含一个用户自 定义函数中的任何命令和函数。 创建数据库时系统自动生成三个文件:数据库文件(.dbc);数据库备注文件(.dct);数 据库索引文件(.dcx)。 在数据库中,除表是以独立文件存储的外,其他数据库对象的信息,则均存储在数据库 中。图 3-1 给出了 Visual FoxPro 中数据库的信息结构。 图 3-1 数据库的基本结构 本章主要介绍数据库与表的基本操作。 表文件

(.dbf) (Connection) 连接定义 (Data Dictionary) 数据字典

本地视图(Local View)

远程视图(Remote View) (Store Procedure) 存储过程 数据库文件

(2)

3.1 数据库的建立、打开、修改与删除

数据库由一个以上相互关联的数据表组成。要想把数据表放入数据库中,必须首先建立 一个新的数据库,然后加入需要处理的表,并定义它们之间的关系。 创建数据库可通过菜单方式、项目管理器方式和命令方式等三种方式进行。数据库在使 用时需要打开,不使用时则应及时关闭。 3.1.1 创建数据库 数据库是表的集合,要想把数据表放入数据库,必须首先建立一个新的数据库,然后加 入需要处理的表,并定义它们之间的关系。用户可通过菜单方式、项目管理器方式和命令方式 来完成数据库的建立。 1.菜单方式 下面以创建数据库“教学管理.dbc”为例,来说明利用菜单方式创建数据库操作的主 要步骤。 【例 3-1】利用菜单方式,创建一个文件名为“教学管理.dbc”的数据库。 利用菜单方式创建数据库的操作步骤如下: (1)打开“文件”菜单,选择“新建”命令,打开“新建”对话框,并在“新建”对话 框中选定“数据库”单选按钮,如图 3-2 所示。 (2)单击“新建文件”图标按钮,打开“创建”对话框,如图 3-3 所示。 图 3-2 “新建”对话框 图 3-3 “创建”对话框 (3)在“创建”对话框中,在“数据库名”文本框中输入要创建的数据库名“教学管理”。 (4)在“保存在”下拉列表框中选择要保存的文件夹,这里选择 DATA 子文件夹(或在 “创建”对话框双击某文件夹,如 DATA)。 (5)单击“保存”按钮,系统就生成了名为“教学管理.dbc”的数据库文件,然后显示 “数据库设计器”窗口,同时将显示数据库设计工具栏,如图 3-4 所示。 此时,空数据库文件“教学管理.dbc”创建完成,同时自动建立了与之相关的数据库备注 ② ① ③ ④ ⑤

(3)

文件“教学管理.dct”和数据库索引文件“教学管理.dcx”。 图 3-4 “数据库设计器”窗口 在数据库设计器中,用户可进行以下一系列操作:建立新表;添加表到数据库中;浏览 数据库中的表;修改数据库中的表;移去数据库的表;建立新的本地或远程视图;建立连接; 编辑存储过程;编辑参照完整性等。 “数据库设计器”是专门用来设计数据库的操作界面,可以在它里面创建或修改表及参 照关系等。数据库设计器工具栏的图标功能从左向右依次如表 3-1 所示。 表 3-1 “数据库设计器”工具栏图标含义 名称 用途 新建表 创建新表 添加表 把已有的表添加到数据库中 移去表 将数据库表转移到数据库外,使之成为自由表,也把选定的表从数据库中彻底地删除 新建远程视图 建立远程视图 新建本地视图 建立本地视图 修改表 在浏览窗口中显示选定的表进行编辑 浏览表 在浏览窗口中显示表的内容 编辑存储过程 在编辑窗口中显示一个 Visual FoxPro 存储过程 连接 加入、删除和修改表 2.项目管理器方式 采用项目管理器创建数据库的方法是:新建或打开一个项目文件,屏幕出现“项目管理 器”,单击项目管理器中的“全部”或“数据”选项卡,选中“数据库”单选按钮,单击“新 建”图标按钮,其余步骤基本同上。 3.命令方式 下面介绍创建数据库的命令 CREATE DATABASE,该命令的使用格式如下: CREATE DATABASE [DatabaseName|?]

创建一个以<DatabaseName>为名字的数据库文件.dbc。其中参数“?”,将显示“创建”对 话框,提示在对话框中指定要创建的数据库名称。

说明:

(4)

 不管 SET EXCLUSIVE 命令的设置如何,当使用 CREATE 命令创建数据库时,数据 库都将以独占方式打开。

 使用 CREATE DATABASE 命令不能自动地将数据库添加到一个项目中。即使项目管 理器是打开的,用户也必须明确地添加数据库到应用项目中。

【例 3-2】用数据库创建命令创建一个文件名为“jxgl.dbc”的数据库。 SET DEFAULT TO d:\jxgl\data &&设置文件保存的默认文件夹

CREATE DATABASE jxgl && 或 CREA DATA jxgl 3.1.2 打开数据库、设置当前数据库与关闭数据库 刚建立的数据库是空的,要想在已建立的数据库中创建数据库表或使用数据库表,必须 首先打开数据库,使用完毕后应关闭该数据库。 打开、关闭、删除数据库都是指数据库文件。以后在不产生混淆的情况下,一律将数据 库文件简称为数据库,甚至库。 1.打开数据库 (1)在项目管理器中选择相应的数据库。单击“打开”按钮 ,该数据库将被打 开。当打开某数据库时,建立的表隶属于该数据库。 (2)通过菜单方式打开数据库。在菜单方式下打开 “教学管理.dbc”数据库的操作步骤 如下: 1)选择“文件”菜单中的“打开”命令(或单击“常用”工具栏中的“打开”按钮 ), 弹出“打开”对话框,如图 3-5 所示。 图 3-5 “打开”对话框 2)在“打开”对话框中,选择需要打开的数据库文件名“教学管理.dbc”,然后单击“确 定”按钮,打开指定的数据库文件,进入“数据库设计器”窗口。 (3)使用命令方式打开数据库。可以使用 OPEN 命令打开数据库,OPEN 命令的语法格 式如下:

OPEN DATABASE [FileName | ?] [EXCLUSIVE | SHARED] [NOUPDATE] [VALIDATE]

该命令的功能是:打开一个已有的数据库。如果多次使用,则表示打开多个数据库。 说明:

 EXCLUSIVE:以独占方式打开数据库。当数据库是以独占方式打开时,则不允许其 他用户访问它。

(5)

并未使用 EXCLUSIVE 或 SHARED 关键字,则命令 SET EXCLUSIVE ON|OFF 将决 定数据库以独占或共享方式打开。  NOUPDATE:以只读方式打开数据库,不能对数据库进行更改。缺省 NOUPDATE 时,则数据库以读/写方式打开。  VALIDATE:确保对数据库的引用是正确有效的。Visual FoxPro 将检查要引用的表 及其索引在磁盘上的数据库中是否有效。同时检查要引用的字段和索引标识在表和索 引文件中是否存在。 注意:  当数据库打开时,库所指向的表并未打开。  当本库内的表名和库外的表同名时,执行表操作命令时,本库表优先。 【例 3-3】以 NOUPDATE 方式打开数据库 jxgl.dbc。

OPEN DATABASE jxgl NOUPDATE 2.打开数据库设计器

当使用 OPEN 命令打开某数据库后,Visual FoxPro 工作区并不显示任何内容,要使数据 库内的内容得以显示,还得使用数据库修改命令 MODIFY DATABASE 打开数据库设计器,然 后对该数据库进行修改。命令 MODIFY DATABASE 的语法格式如下:

MODIFY DATABASE [DatabaseName | ?] [NOWAIT] [NOEDIT]

该命令的功能是:打开数据库设计器,以便对当前数据库进行交互操作。 说明:  NOWAIT:NOWAIT 在打开数据库设计器后继续执行程序,即不必等待数据库设计 器关闭,而是继续执行该命令之后的程序行。若在程序中使用 MODIFY DATABASE 时省略 NOWAIT,则打开数据库设计器后,程序暂停执行,直到关闭数据库设计器。 NOWAIT 仅在程序中有效,在命令窗口中使用时无效。  NOEDIT:禁止修改数据库。 【例 3-4】用命令打开数据库设计器及数据库 jxgl.dbc。 MODIFY DATABASE jxgl 也可使用以下命令打开数据库 jxgl.dbc 文件,并显示数据库设计器。 OPEN DATABASE jxgl MODIFY DATABASE 此时,数据库 jxgl.dbc 是一个不包含任何内容的空库。 除使用命令打开数据库设计器窗口之外,用户还可以通过项目管理器和使用菜单等方法 来打开,具体操作方法是: (1)通过项目管理器打开数据库设计窗口。在项目管理器中,选择要修改的数据库,然 后单击“修改”按钮 便可。 (2)使用菜单方法打开数据库设计窗口。选择“文件”菜单下的“打开”命令或单击“常 用”工具栏中的“打开”按钮 ,选择要打开的数据库,会自动打开数据库设计器窗口。 3.设置当前数据库 当打开多个数据库时,存在一个当前操作是针对哪个数据库进行的问题。为此,Visual FoxPro 引进了当前数据库的概念。要设置某个数据库为当前数据库,可使用以下命令:

SET DATABASE TO [DatabaseName]

该命令的功能是:在同时打开多个数据库的条件下,设置某个数据库为当前数据库或非 当前数据库。

(6)

说明:  DatabaseName:要指定为当前库的库名。缺省时或者被指定为一个空字符串,都指 将当前库设置为非当前库。  可以从“常用”工具栏上的数据库下拉列表框中,选择一个打开的数据库作为当前数 据库,如图 3-6 所示。 图 3-6 从“常用”工具栏的“数据库”下拉列表框中选择当前数据库 注意:  当执行查询或表单时,Visual FoxPro 可以自动打开数据库。  SET DATABASE 在当前数据工作期有效。 【例 3-5】将“教学管理.dbc”设置为当前数据库。 SET DATABASE TO 教学管理 4.关闭数据库 和 Windows 关闭文件的操作方法相同,用户可用菜单方式关闭当前打开的数据库设计器, 但不能关闭数据库。 要关闭已打开的数据库,可用以下命令: CLOSE [ALL | DATABASES [ALL]]

该命令的功能是:关闭当前数据库和表。若没有当前数据库,则关闭所有工作区内所有 打开的自由表、索引和格式文件,并选择工作区 1。

说明:

 ALL:关闭所有文件,选择 1 号工作区为当前工作区。

 DATABASES [ALL]:无 ALL 关键字时,关闭当前数据工作期内的当前数据库及其 表文件。如果无当前数据库,则关闭所有工作区中的自由表、索引和格式文件,并且 选择 1 号工作区。有 ALL 关键字时,指定关闭当前的和所有非当前数据工作期中打 开的数据库和表、自由表、所有工作区的索引和格式文件,选定 1 号工作区。  如果项目管理器在打开时,须用项目管理器中的“关闭”按钮,关闭已打开的数据库。 【例 3-6】设置 jxgl.dbc 为当前数据库,然后关闭该数据库。 SET DATABASE TO jxgl CLOSE DATABASES 5.删除数据库 删除数据库指将数据库文件从磁盘上删掉。删除一个数据库可以通过项目管理器或使用 命令两种方式进行。 (1)在项目管理器中删除数据库。在项目管理 器中,选择要删除的数据库,然后单击“移去”按 钮 ,或选定数据库后按下 Delete 键,将弹 出如图 3-7 所示系统的提示对话框。  移去:指把数据库从项目中移出,但并不 从磁盘中删除。 图 3-7 系统提示对话框

(7)

 删除:指把数据库从项目中移出,并从磁盘中删除。

(2)通过命令方式删除数据库。使用命令也可以删除一个数据库,删除数据库的命令格 式如下:

DELETE DATABASE DatabaseName | ? [DELETETABLES] 该命令的功能是:从磁盘上删除一个数据库。 说明:  DatabaseName:指定要从磁盘上删除的数据库名称(可以包含指定数据库的路径和 数据库名),指定的数据库必须关闭。  ?:显示“打开”对话框,从该对话框中可以指定要从磁盘上删除的数据库名。  DELETETABLES:从磁盘上删除包含在数据库中的表和包含表的数据库。缺省时, 仅删除数据库而将所指向的表释放为自由表。 说明:与其他文件操作工具不同,例如,Windows 的“文件管理器”,使用 DELETE DATABASE 命令从磁盘上删除一个数据库时,可以从数据库的表中删除对数据库的引用。

如果 SET SAFETY 设置为 ON,Visual FoxPro 会提示是否要删除指定的数据库。如果 SET SAFETY 设置为 OFF,则自动从磁盘上删除数据库。

【例 3-7】不提示删除数据库 jxgl.dbc。 SET SAFETY OFF

DELETE DATABASE jxgl

3.2 创建表

表是用来组织和管理数据,是存储数据的基本单位,不含表的数据库无实际用处。在 Visual FoxPro 中,表分为数据库表和自由表,数据库表具有自由表所没有的一些特性。 本节介绍数据库表和自由表的特性与创建方法。 3.2.1 分析和设计表的结构 数据表主要由两部分组成:一是结构部分;二是记录部分。记录部分也就是表的数据。 1.分析表结构 在 Visual FoxPro 中,一个关系对应一张二维表。表的结构对应于二维表的结构。二维表 中的每一列称为一个字段,每个字段都有一个名字,即字段名。二维表中的每一行有若干个数 据项,这些数据项构成了一个记录。下面以表 3-2 所示的“学生”表为例,从分析二维表的格 式入手来讨论表结构。 表 3-2 “学生”表 学号 姓名 性别 出生日期 系别 总分 团员 简历 照片 s1101101 樱桃小丸子 女 1991.10.23 01 520 F (略) (略) s1101102 茵蒂克丝 女 1992.08.12 02 518 F (略) (略) s1101103 米老鼠 男 1993.01.02 02 586 T (略) (略) s1101104 花仙子 女 1994.07.24 03 550 F (略) (略) s1101105 向达伦 男 1992.05.12 03 538 T (略) (略)

(8)

续表 学号 姓名 性别 出生日期 系别 总分 团员 简历 照片 s1101106 雨宫优子 女 1993.12.12 04 564 T (略) (略) s1101107 小甜甜 女 1994.11.07 01 506 F (略) (略) s1101108 史努比 男 1995.09.30 05 521 T (略) (略) s1101109 蜡笔小新 男 1995.02.15 05 592 T (略) (略) s1101110 碱蛋超人 男 1993.03.18 04 545 F (略) (略) s1101111 黑杰克 男 1993.05.21 06 616 T (略) (略) s1101112 哈利波特 男 1992.10.20 06 578 T (略) (略) 在上面的表格中,有 9 个栏目,每个栏目有不同的栏目名,如“学号”、“姓名”等。同 一栏目的不同行的数据类型完全相同,而不同栏目中存放的数据类型可以不同。如“姓名”栏 目是“字符型”,而“总分”栏目是“数值型”。每个栏目的数据宽度有一定的限制。例如,“学 号”的数据宽度是 8 个字符,“性别”的数据宽度是 2 个字符。对数值型的栏目一般还可规定 小数的位数,如“总分”栏目可规定小数位数为 2。 在表文件中,表格的栏目称为字段。字段的个数和每个字段的名称、类型、宽度等要素 决定了表文件的结构。定义表结构就是定义各个字段的属性。表的基本结构包括字段名、字段 类型、字段宽度和小数位数。 (1)字段名。字段名即关系的属性名或表的列名。自由表字段名最长为 10 个字符。数 据库表字段名最长为 128 个字符。字段名必须以字母或汉字开头。字段名可以由字母、汉字(1 个汉字占 2 个字符)、数字和下划线“_”组成。但字段名中不能包含空格,如学号、BH、客 户_1、地址、dz 等都是合法的字段名。 (2)字段类型和宽度。表中的每一个字段都有特定的数据类型。可将字段的数据类型设 置为字符型、数值型等数据类型的一种,具体类型参照表 2-2 所示。字段宽度规定了字段的值 可以容纳的最大字节数。例如,一个字符型字段最多可容纳 254 个字节。日期型、逻辑型、备 注型、通用型等类型的字段宽度则是固定的,系统分别规定为 8、1、4、4 个字节。 2.设计表结构 在 Visual FoxPro 系统中,一张二维表对应一个数据表,称为表文件。一张二维表由表名、 表头、表内容三部分组成,一个数据表则由数据表名、数据表结构、数据表记录三要素构成。 定义数据表的结构,就是定义数据表的字段个数、字段名、字段类型、字段宽度及是否以该字 段建立索引等。下面以“学生”表为例,介绍表结构的设计。 “学号”、“姓名”、“性别”字段显然应是字符型,根据实际情况设定相应的长度。“出生 日期”用日期型表示。为了减少数据冗余,“系别”字段存放的是系别专业的编号,而不是系 别名称。虽然“系别”字段由数字组成,但不参加算术运算,所以采用字符型。“总分”用数 值型表示,宽度为 5,小数位数为 1。“团员”只有两种状态,即“是”和“不是”,可以使用 逻辑型数据来表示。例如,逻辑真.T.表示是团员,逻辑假.F.表示不是团员。“简历”表示学生 的简要经历信息,是不定长的文本信息,因此采用备注型。“照片”字段存放学生的照片,采 用通用型字段。学生情况表的结构如表 3-3 所示。 按照同样的方法,可以设计“通讯.dbf”、“课程.dbf”、“成绩.dbf”、“系名.dbf”、“教 师.dbf”、“授课.dbf”等其他表的结构。“通讯”等表的结构如下:

(9)

表 3-3 学生情况表的结构 字段名 类型 宽度 小数位 学号 字符型 8 姓名 字符型 10 性别 字符型 2 出生日期 日期型 8 系别 字符型 2 总分 数值型 5 1 团员 逻辑型 1 简历 备注型 4 照片 通用型 4 通讯:学号 C(8),宿舍 C(8),联系 QQ C(9),家庭详细通讯地址 C(20),个人电话 C(11), 家长姓名 C(16),家长电话 C(11),备注 M 课程:课程号 C(4),课程名 C(20),学时 N(3),学分 N(2),是否必修 L 成绩:学号 C(8),课程号 C(4),成绩 N(5,1) 系名:系号 C(2),系名 C(20) 教师:教师号 C(5),姓名 C(8),性别 C(2),系别 C(2),职称 C(10),工资 N(8,2),津贴 L 授课:教师号 C(5),课程号 C(4) 3.2.2 创建数据库表与结构 创建表与结构时,打开“表设计器”的方法主要有 3 种:菜单方式、在一个项目中建立和 命令方式。为了以后编程方便,建议用户使用命令方式。这里为用户介绍后两种方法,至于用 菜单方式创建表的结构方法可参照在项目建立的方法,其过程大致相同。 设置新表时,需注意以下 4 点:  字段的数据类型应与将要存储在其中的数据类型相匹配。  字段的宽度足够容纳将要显示的数据内容。  为“数值型”、“浮点型”或“双精度型”字段设置正确的小数位数。  如果想让字段接受空值,则选中 NULL。 要在数据库中建立新表及其结构,主要有以下两种方法: (1)有项目管理器方式和菜单方式两种。 (2)在数据库打开的情况下,可以使用菜单方式、通过“数据库设计器”工具栏方式和 命令方式。 下面介绍项目管理器方式、通过“数据库设计器”工具栏方式和命令 3 种方式,来创建 数据库表和结构。 1.在项目管理器中创建数据库表与结构 下面以在“教学管理.dbc”数据库中,创建“学生.dbf”表为例,说明在项目管理器中创 建数据库表与结构的方法和步骤。 【例 3-8】通过项目管理器方式,在数据库“教学管理.dbc”中创建“学生.dbf”数据表。 (1)打开 jxgl 项目,在打开的项目管理器中,单击“全部”或“数据”选项卡。 (2)单击“数据库”图标前的“+”号,再展开“教学管理”,并选择“表”选项,如图

(10)

3-8 所示。 图 3-8 “jxgl.pjx”项目管理器对话框 (3)单击“右侧”的“新建”按钮 ,弹出“新建表”对话框,如图 3-9 所示。 (4)在“新建表”对话框,单击“新建表”图标按钮,弹出“创建”对话框,如图 3-10 所示。 图 3-9 “新建表”对话框 图 3-10 “创建”对话框 (5)在“创建”对话框中,在“保存在”下拉列表框中选择要保存的文件夹,这里是“DATA”, 在“输入表名”文本框中输入要创建和保存的数据表名称,这里是“学生.dbf”。单击“保存” 按钮,将打开“表设计器”对话框,如图 3-11 所示。 图 3-11 “表设计器-学生.dbf”对话框 ① ② ③

(11)

(6)接下来,在“表设计器”的“字段”选项卡中,按照表 3-3 的要求,依次设置“学 生”数据表所需要的“字段名”、“类型”和“宽度”。如果是数值型、货币型、浮点型或双精 度型字段,尚需输入“小数位数”。 在“表设计器”中,“NULL”选项表示是否允许字段值为空值。空值表示没有确定的值, 不同于零、空串或空格。如果选定 NULL 按钮,会显示“√”号,表示该字段可接受 NULL 值。 一般来说,作为关键字的字段不允许 NULL,可暂缺内容的字段允许为 NULL。 由于数据库表的信息登录在数据字典中,所以创建数据库表时还需要设置表的属性、字段 属性、字段规则和记录规则等,具体内容和操作可参见 3.3 节,这里不予介绍。 (7)最后,单击“确定”按钮完成表的设计,系统弹出“现在输入数据记录吗?”提示 信息对话框,如图 3-12 所示。 (8)在图 3-12 所示的对话框中,单击“否”按钮,不进入记录编辑界面;单击“是”按 钮,系统进入记录编辑界面,如图 3-13 所示。 图 3-12 系统提示信息对话框 图 3-13 记录编辑窗口 (9)记录录入完毕后,按下 Ctrl+W(或按下 Ctrl+End,或单击编辑窗口右上角的“关闭” 按钮 )组合键,关闭编辑窗口并保存录入的记录数据;如果按下 Esc 键(或按下 Ctrl+Q 组 合键),则表示放弃已录入的记录数据。 说明:在输入各字段的内容时,字符型、数值型字段的数据输入与修改比较简单;日期 型默认按格式 mm/dd/yyyy 输入日期;逻辑型可输入 T(或 Y)、F(或 N),默认值为 F;备注 型与通用型字段显示“memo”与“gen”标志,输入数据时,按 Ctrl+PgDn 键或双击“memo” (或“gen”)打开备注型字段(或通用型字段)编辑窗口,输入或修改信息。输入或修改完毕, 按下 Ctrl+W 组合键或单击窗口的“关闭”按钮关闭备注型字段编辑窗口。这时,字段标志首 字母显示为大写即“Memo”或“Gen”。 2.通过“数据库设计器”工具栏创建数据库表与结构 下面以在“教学管理.dbc”数据库中,通过向导来创建“学生”表为例,说明使用“数据 库设计器”工具栏命令按钮创建数据表与结构的方法和步骤。 【例 3-9】使用习题二中的上机操作第 11 题所建立的“课程 1.dbf”,利用“向导”,在数 据库“教学管理.dbc”中创建“课程.dbf”数据表。 操作方法和步骤如下: (1)在命令窗口中输入以下命令,打开数据库设计器窗口,如图 3-14 所示。

(12)

MODIFY DATABASE 教学管理 注:打开数据库设计器窗口,也可使用项目方式或菜单方式。 (2)单击“数据库设计器”工具栏的“新建表”按钮 ,弹出“新建表”对话框,如图 3-9 所示。 (3)如果单击“新建表”按钮,以下的方法和步骤与上面“在项目管理器中创建数据库 表”的方法和步骤一样,这里不再赘述。这里单击“表向导”按钮,系统将弹出“表向导”对 话框,如图 3-15 所示。 图 3-14 “数据库设计器-教学管理”窗口 图 3-15 “表向导”对话框之步骤 1-字段选取 (4)单击对话框左下角的“加入”按钮,选取“课程 1.dbf”加入到“样表”列表框中。 在“样表”列表框中选择“课程 1.dbf”。单击“全部移动”按钮 ,将“可用字段”列表框 中的所有字段移动到“选定字段”列表框中。 如果单击“移动”按钮 ,可将“可用字段”列表框中选定的字段移动到“选定字段” 列表框中,反之单击“移出 或全部移出 ”按钮,可将“选定字段”列表框中的字段移出。 (5)单击“下一步”按钮,系统弹出如图 3-16 所示的对话框。 图 3-16 “表向导”对话框之步骤 1a-选择数据库 (6)选中“将表添加到下列数据库”单选按钮,然后单击 或 按钮,在下拉列表框(或 在弹出的“打开”对话框)中选择将表添加到的数据库。 在“表名”文本框中输入创建的数据库表名,这里是“课程”。单击“下一步”按钮,弹 出如图 3-17 所示的对话框。

(13)

图 3-17 “表向导”对话框之步骤 2-修改字段设置 (7)在如图 3-17 所示的对话框中,可以修改选定字段的字段名、类型、宽度和小数位数等。 (8)在接下来的操作中,由于涉及表索引和建立关系,这里不需要,则直接单击“完成” 按钮,弹出如图 3-18 所示的对话框。 (9)在图 3-18 所示的对话框中,选中“保存表以备将来使用”单选按钮,再次单击“完 成”按钮,弹出如图 3-19 所示的“另存为”对话框。 图 3-18 “表向导”对话框之步骤 4-完成 图 3-19 “另存为”对话框 (10)在“另存为”对话框中,选择要保存文件的文件夹 DATA;在“输入表名”文本框 中输入要保存的表文件名“课程”。 最后,单击“保存”按钮,完成数据表“课程.dbf”的创建。 3.通过命令方式创建数据库表与结构 利用命令的方式创建表结构的方法有两个:第一个是 Visual FoxPro 的专用命令,该命令 以打开表设计器来创建表及结构;第二个是通过 SQL 命令来创建,这实际上是由 SQL 的数据 定义语言 DDL 来完成的。 (1)使用 CREATE 命令创建表用结构。 创建表结构 CREATE 命令的语法格式如下: CREATE dbf_Name|? 该命令的功能是:启动表设计器,创建表结构。其中,参数“dbf_Name”指定要创建的 表名;“?”显示“创建”对话框,提示用户为正在创建的表命名。 【例 3-10】用 CREATE 命令方式,创建表文件“系名.dbf”,该表的结构如下: 系名.DBF:系号 C(4),系名 C(20) 具体操作步骤如下:

(14)

1)利用创建表命令打开表设计器,在命令窗口中依次输入: OPEN DATABASE 教学管理 CREATE 系名 2)弹出如图 3-11 所示的“表设计器”对话框。在“字段”选项卡中,根据表结构输入相 应的字段名、字段类型和宽度(有 N 型字段,还将设置小数位数)等。各字段输入完后,单 击“确定”按钮将表及结构保存,并添加到相应位置。 (2)利用 CREATE_SQL 创建表结构。创建表最快的方法是使用 CREATE_SQL 命令来创 建表结构,它属于 SQL 的 DDL 范畴。这里介绍它的最简命令格式。命令格式如下:

CREATE TABLE | DBF TableName [FREE]

(FieldName1 FieldType [(nFieldWidth [, nPrecision])] … ,FieldName2…) 功能是:在不打开表设计器的情况下创建表及其结构。

说明:

 TableName:要创建的表名称。  FREE:表示创建的表为自由表。

 FieldName FieldType [(nFieldWidth [, nPrecision])] …:要创建的表的字段的名称、类 型、长度、精确度等。 【例 3-11】用 CREATE_SQL 命令创建“成绩.dbf”。表结构如下: 成绩.DBF:学号 C(8),课程号 C(4),成绩 N(5,1) 在命令窗口中依次输入: OPEN DATABASE 教学管理 CREATE TABLE 成绩 (学号 C(8),课程号 C(4),成绩 N(5,1)) 命令执行后,“成绩.dbf”数据表创建成功并添加到“教学管理.dbc”中。 3.2.3 创建自由表 当未打开数据库时,建立的表就是自由表。自由表可以单独使用,但因存在于数据库之 外,在应用时需个别处理。自由表不支持长表名等属性设置。 1.将数据库表从数据库中移出 可以将数据库表从数据库中移出使之成为自由表,但这样做会使数据表丢失原来设置的 属性,如长表名等。 将一个数据库表从原数据库移出时,将出现如图 3-20 所示的对话框供用户确认。 图 3-20 移出数据库表时出现的信息提示对话框 2.创建自由表 用户可以通过项目管理器创建自由表,也可以通过菜单方式或命令方式创建自由表。 如果通过的“表设计器”创建自由表时,用户会发现创建自由表时的“表设计器”与创 建数据库表出现的“表设计器”不同。对自由表来说,“表设计器”下部分窗口不能使用,如 图 3-21 所示。

(15)

图 3-21 自由表设计器界面 【例 3-12】用 CREATE_SQL 命令分别创建“教师.dbf”、“授课.DBF”和“通讯.dbf”三 个数据表,三个表的表结构如下: CREATE TABLE 教师.DBF:教师号 C(5),姓名 C(8),性别 C(2),职称 C(10),工资 N(8,2), 津贴 L 在命令窗口中依次输入: SET DEFAULT TO DATA

CREATE TABLE 教师 FREE (教师号 C(5),姓名 C(8), ; 性别 C(2),职称 C(10),工资 N(8,2),津贴 L) CREATE TABLE 授课 FREE (教师号 C(5),课程号 C(4))

CREATE TABLE 通讯 FREE (学号 C(8),宿舍 C(8),联系 QQ C(9),家庭地址 C(20), ; 个人电话 C(11),家长姓名 C(16),家长电话 C(11),备注 M) 3.2.4 将自由表添加到数据库 创建好的自由表也可以添加到数据库中,使之成为数据库表。自由表一旦成为数据库表, 该表将拥有更多的属性。 将自由表添加到数据库中的方法有:通过项目管理器添加;使用菜单方式添加;在数据 库设计器已打开的情况下,用户也可使用工具栏按钮添加;用命令方式添加。 向库中添加表时必须注意,只有自由表才能向数据库中添加,一个表只能隶属于一个数 据库,一个数据库可以包含多个表。当表已经属于某个数据库时,要想将它添加到另一个数据 库中,就必须先将该表从原数据库中移出使它成为自由表,然后再添加到希望的数据库中去。 1.通过项目管理器添加 下面以一个实例,来说明在项目管理器中将自由表添加到数据库中的方法和步骤。 【例 3-13】在项目管理器中,将自由表“教师.dbf”添加到“教学管理”数据库中。 操作步骤如下: (1)在命令窗口中输入以下命令,打开 jxgl 项目管理器窗口: SET DEFAULT TO D:\JXGL

MODI PROJECT JXGL &&打开 jxgl 项目管理器窗口

(2)选择“全部”或“数据”选项卡,展开“教学管理”数据库,并选择“表”图标。 (3)单击“添加”按钮 ,在弹出的“打开”对话框中选择要添加的自由表,这 里选择“教师.dbf”。 添加完成时就会发现,数据库“教学管理.dbc”中多了一个表,即“教师.dbf”数据表。 2.在菜单方式下添加表 【例 3-14】打开数据库“教学管理.dbc”,利用菜单方式向数据库中添加“授课.DBF”表。

(16)

操作步骤如下: (1)在命令窗口中输入命令“MODIFY DATABASE 教学管理”,打开数据库“教学管 理.dbc”,并进入“数据库设计器”窗口。 (2)在“数据库设计器”窗口中,单击鼠标右键,弹出快捷菜单(用户也可以使用系统 主菜单“数据库”中的“添加表”命令,或单击“数据库设计器”工具栏中的“添加表”按钮 ),如图 3-22 所示。 (3)选择快捷菜单中的“添加表”命令,出现“打开”对话框,如图 3-23 所示。 图 3-22 “数据库设计器”的快捷菜单 图 3-23 “打开”对话框 (4)在“打开”对话框中,选择要添加的表“授课.DBF”,单击“确定”按钮,返回“数 据库设计器”窗口。于是表“授课.DBF”被添加到数据库“教学管理.dbc”中了。 (5)重复(2)、(3)、(4)步骤的操作,可将其他表添加到数据库中。 3.通过命令方式添加 使用命令方式,也可将自由表添加到数据库中。命令格式如下: ADD TABLE TableName | ? [NAME LongTableName]

功能是:在以独占方式打开的当前数据库中添加一个自由表。 说明:  TableName:指定添加到数据库中的表的名称。  ?:显示“打开”对话框,从中可以选择添加到数据库中的表。  NAME LongTableName:指定表的长名。长名可以包含 128 个字符,可用来取代扩展 名为.dbf 的短文件名。  表添加到数据库中后,就不再是自由表。但是使用 REMOVE TABLE 命令又可以使 数据库中的任何一个表成为自由表。 【例 3-15】将自由表“通讯.dbf”添加到“教学管理”数据库中。 在命令窗口中输入以下命令: OPEN DATABASE 教学管理 SET PATH TO D:\jxgl,d:\jxgl\data ADD TABLE 通讯

SET DFAULT TO DATA MODIFY DATABASE

命令序列的执行结果如图 3-24 所示。此时会发现在数据库“教学管理.dbc”中已多了两 个表。若项目管理器是打开的,则在数据库“教学管理.dbc”下也出现了两个表。如法炮制, 也可将其他的自由表添加到该库中。

(17)

图 3-24 添加了表的数据库 3.2.5 修改表的结构 一个表创建完成,其表的结构就已确定。如果创建时表的结构定义得不合理,可对表结 构进行修改。表结构的修改主要指:插入或删除字段;修改已有的字段类型、宽度或小数位数; 为字段更名等。如果表中已有数据而又想改变字段类型或宽度,则表中该字段原有的数据将可 能丢失。 表结构修改的方法主要有项目管理器方式、菜单方式和命令方式。菜单方式下修改表结 构和显示表结构一样,通过 Visual FoxPro 系统中“显示”菜单的“表设计器”命令进行,但 此时表必须以独占方式打开。而常用修改表结构的命令也有两种:一种是打开表设计器,它仅 可实现对当前表结构的修改;另一种是通过 SQL 中 DDL 的 ALTER-SQL 命令,它不管表是否 已经打开。 1.项目管理器方式 在项目管理器中修改表结构可按以下步骤操作: (1)打开要修改表所在的项目,如 jxgl.pjx。然后,在项目管理器中选择要修改的表,单 击“修改”按钮 ,打开“表设计器”对话框。 (2)接下来可对要修改的字段进行修改。主要操作有: 1)修改已有的字段。将光标移到要修改的字段处,直接修改字段的名称、类型、宽度和 字段的属性。 2)增加新字段。将光标移到要插入字段的位置,单击“插入”按钮。 3)删除不用的字段。将光标移到要删除的字段上,单击“删除”按钮。 2.菜单方式 用菜单方式修改表结构的操作步骤如下: (1)选择“文件”菜单中的“打开”命令,系统弹出“打开”对话框,如图 3-25 所示。 (2)在图 3-25 所示的对话框中,在“查找范围”下拉列表框中选择表所在的文件夹,这 里为 DATA,在“文件类型”下拉列表框中选择文件类型,这里为“表(*.dbf)”。然后,选择 要打开的表文件,如“学生.dbf”。最后,单击“确定”按钮。 (3)如图 3-26 所示,单击 Visual FoxPro 系统的“显示”主菜单,再执行“表设计器” 命令,打开“表设计器”对话框,即可对当前表的结构进行修改。在表设计器中修改表结构后, 可单击“是”或“否”按钮,对所做的修改进行确认或取消。若单击“是”按钮,或按 Ctrl+W 组合键,均会打开“结构更改为永久性更改?”的提示信息对话框,如图 3-27 所示。 (4)单击“是”按钮,表示修改有效且关闭“表设计器”;若单击“否”按钮,则修改

(18)

无效并关闭“表设计器”。

图 3-25 “打开”对话框 图 3-26 “显示”主菜单

图 3-27 结构修改提示信息对话框 3.命令方式

可以利用 MODIFY STRUCTURE 命令修改表结构。MODIFY STRUCTURE 命令的作用是 对已打开的表,通过表设计器进行结构的修改。该命令使用的语法格式如下: MODIFY STRUCTURE 此命令的作用是打开指定数据表的表设计器界面。如果当前工作区中已打开了表,则直 接弹出表设计器;反之,则需要在“打开”对话框选择要打开的表,然后弹出表设计器。 【例 3-16】利用表设计器修改“学生.dbf”表,在“简历”字段前增加一个逻辑型的“三 好生”字段。 操作步骤如下:

(1)在 Visual FoxPro 命令窗口中输入 MODIFY STRUCTURE 命令,此时系统弹出“打 开”对话框,如图 3-28 所示。

(2)选择要打开的表后,单击“确定”按钮,打开“表设计器”窗口,如图 3-29 所示。

(19)

(3)将光标移到要插入“简历”的字段上,单击“插入”按钮,此时增加一个新字段。 (4)修改“新字段”名为“三好生”,修改“类型”为“逻辑型”,单击“确定”按钮, 完成表结构的修改。 此时,要对表结构进行修改,用户还可使用 ALTER-SQL 命令进行,详细内容可参考第 6 章。这里给出三个例子。 【例 3-17】向“学生.dbf”表中先添加一个“身高 N(3,2)”字段,然后再将它的宽度改为 4。 ALTER TABLE 学生 ADD 身高 N(3,2)

ALTER TABLE 学生 ALTER 身高 N(4,2)

【例 3-18】删除“学生.dbf”表中刚刚添加“身高”的字段。 ALTER TABLE 学生 DROP 身高

【例 3-19】将“学生.dbf”表中的“系别”字段改名为“学院”。 ALTER TABLE 学生 RENAME 系别 TO 学院

3.2.6 移去和删除库表 当一个数据库不再需要某个表时,可将该表从该数据库中移去使其成为自由表。若确定 某个库表已失去了应用价值,也可从磁盘上将其删除。 1.菜单方式移去和删除表 菜单方式下,移去和删除数据库表的操作可在项目管理器或数据库设计器中进行。 在项目管理器中,数据库表的移去和删除,是在库表被选定的条件下,通过“移去”按 钮进行。 在数据库设计器中,数据库表的移去和删除是在库表被选定的条件下,通过系统中“数 据库”菜单的“移去”命令进行或使用快捷菜单进行。 用下面的例 3-20 来说明这一过程。 【例 3-20】在“教学管理.dbc”数据库中,移去“通讯.dbf”数据表。 操作步骤如下: (1)在命令窗口输入命令“MODIFY DATABASE 教学管理”,打开数据库设计器窗口。 (2)选定表“通讯.dbf”。 (3)执行 Visual FoxPro 系统菜单“数据库”中的“移去”命令,系统弹“移去”信息提 示对话框,如图 3-30 所示。 图 3-30 “移去”信息提示框 (4)单击“移去”按钮,可将该表从数据库中移出;单击“删除”按钮,可将该表从磁 盘中彻底删除。 表的移去或删除也可通过快捷菜单进行(或使用“数据库设计器”工具栏中的“移去表” 按钮 )。其方法是:在打开的数据库设计器中,右击要删除的表的任何位置,将弹出一个快 捷菜单,在快捷菜单中选择“删除”命令,即可进入图 3-30 所示的提示信息框,从而确定是 删除表还是移去表。

(20)

2.使用删除命令移去和删除表

在 Visual FoxPro 中,从数据库中移去和删除表的命令是 REMOVE TABLE,命令使用的 语法格式如下:

REMOVE TABLE TableName | ? [DELETE]

该命令的功能是:将数据库表从数据库中移去或从磁盘上删除。 说明:

 TableName | ?:指定从当前数据库要删除的表,或显示删除对话框供用户在当前数据 库中选择要删除的表。

 DELETE:指定从数据库中移去表并将表从磁盘上永久删除。而且使用本子句从磁盘 上删除表时,即使将 SET SAFETY 设置为 ON,系统也不会发出提示警告。

注意:REMOVE TABLE 将删除与表有关的所有索引、默认值、与其他表的一致性准则 关系。如果将 SET SAFETY 设置为 ON,Visual FoxPro 将提示用户要从数据库中进行表删除。

【例 3-21】在“教学管理.dbc”中,移去“授课.dbf”,使其变为自由表。 MODIFY DATABASE 教学管理

REMOVE TABLE 授课

3.使用 DROP-SQL 命令删除表

使用 DROP TABLE 命令,可将一个不用的数据表从数据库中彻底删除。DROP TABLE 命 令是 SQL 的 DDL 中的一条命令,命令使用格式如下:

DROP TABLE TableName | FileName | ? [RECYCLE]

该命令的功能是:从当前的数据库中移去一个表并从磁盘上将它删除。 说明:  TableName:指定从当前数据库要移去并删除的一个表的表名。  FileName:指定从磁盘上要删除的一个自由表的表名。  ?:显示删除对话框供用户在当前数据库中选择要移去并从磁盘上删除的表。  RECYCLE:将要删除的表放入 Windows 回收站,以后可恢复。 注意:执行了 DROP TABLE 命令之后,所有与被删除表有关的主索引、默认值、验证规 则都将丢失。当前数据库中的其他表若与被删除的表有关联,比如规则引用了被删除的表或与 被删除的表建立了关系,这些规则和关系也都将无效。

执行了 DROP TABLE 命令之后,即使 SET SAFETY 设置为 ON,在删除表时也不会提示 警告信息。因此,使用时要小心。

【例 3-22】假设表“教师.dbf”未被删除,用 DROP TABLE 命令将它放到回收站里。 DROP TABLE 教师 RECYCLE

4.删除数据库对表的引用

如果从磁盘中意外地删除了某个数据库,那么原来此数据库中包含的表仍然保留对该数 据库的引用。FREE TABLE 命令在打开该表或把此表添加到另一个数据库中的同时,可以从 表中删除数据库引用。FREE TABLE 命令的使用格式如下:

FREE TABLE TableName

该命令的功能是:删除表中的数据库引用。

说明:TableName,指定要删除数据库引用的表名称。

注意:如果数据库在磁盘上仍然存在,则不能用 FREE TABLE 命令从该数据库中移去表。 如果数据库在磁盘上存在,同时执行 FREE TABLE 命令,将可能无法使用该数据库,在这种 情况下应该使用 REMOVE TABLE 命令,将该表从数据库中移出。

(21)

3.3 设置数据库表的属性

数据库表具有自由表所没有的属性,如长表名和长字段名、主关键字和候选关键字、字 段的输入/输出格式、默认值、字段的标题、字段和记录的有效性规则、触发器等。这些属性 将作为数据库的一部分保存起来。 数据库表这些属性的集合被称为“数据字典(Data Dictionary)”,数据字典的引入,使数 据库表的功能大大强于自由表。当数据库表成为自由表时,相关属性同时消失。 下面以实例的方式介绍对数据库表的属性设置如何进行操作,主要内容有:①设置库表 的长名和注释;②设置表中字段的显示标题;③设置表中字段的输入/输出掩码;④设置表中 字段的注释;⑤设置表中字段的默认值;⑥设置表中字段的有效性规则;⑦设置触发器。 3.3.1 设置库表的长名和注释 对于数据库表,可以设置一个显示用的长表名,长表名最多为 128 个字符。表的注释是 用来对表作进一步说明的,它仅在表设计器打开时才能看到,供表的设计人员参考。长表名和 表注释是数据库表的特性之一。当表一旦从数据库中移出,则长表名和表注释将不复存在。 为表设置长名和注释可在表设计器方式和命令方式下进行。 1.使用“表设计器”方式 数据库表的长表名和注释的设置,可以通过“表设计器”的“表”选项卡来实现。 【例 3-23】利用表设计器为数据库表“学生.dbf”设置一个长表名“学生信息管理表”, 并写入适当注释,如“本系统记录了 2006-2011 年度学生的有关信息。”。 操作步骤如下: (1)在命令窗口中输入命令“MODIFY STRUCTURE”,在随后弹出的对话框中,选择 要打开的数据库表,这里选择“学生.dbf”。之后,打开表设计器,如图 3-31 所示。 图 3-31 “表设计器”对话框的“表”选项卡 (2)单击“表”选项卡,显示“表”选项卡界面。 (3)在“表名”文本框处输入长表名,这里输入“学生信息管理表”;在“表注释”框 中输入适当的注释内容,如“本系统记录了 2006-2011 年度学生的有关信息。” (4)单击“确定”按钮,完成长表名和表注释的处理工作。 设置完成,此时数据库设计器中原来的表名“学生”已被长表名“学生信息管理表”所

(22)

取代。而表注释会在下次打开表设计器的“表”选项卡时显示出来。 2.使用命令方式

要设置表的长表名,用户也可使用 CREATE TABLE 命令中的子句 NAME。

【例 3-24】在“教学管理.dbf”数据库中,创建一个教师工资表“zggz.dbf”,设置长表名 为“教师工资表”。

OPEN DATABASE 教学管理

CREATE TABLE zggz NAME 教师工资表 (编号 C(8),姓名 VarChar(10), 职称 C(6),职务工资 I,薪级工资 I,津贴 I) 3.3.2 设置表中字段的显示标题 字段标题用于在表“浏览”窗口和表单上显示出该字段的标识名称,有利于用户理解。 【例 3-25】将“学生.dbf”中的“总分”字段的显示标题设置为“大学录取分数”。 设置“总分”的显示标题的操作步骤如下: (1)打开数据库“教学管理.dbc”,并显示“数据库设计器”窗口,如图 3-32 所示。 图 3-32 选择数据表并执行“修改”命令 (2)右击需要设置字段显示标题的专业名称表“学生.dbf”,在弹出的快捷菜单中执行“修 改”命令,系统进入如图 3-33 所示的“表设计器”对话框。 图 3-33 设置“总分”字段的显示标题 (3)在“表设计器”对话框中选择需要设置显示标题的字段名“总分”,然后在“显示” 区域的“标题”文本框中输入“总分”字段的显示标题“大学录取分数”。 (4)单击“确定”按钮,出现如图 3-34 所示的确认信息提示框。

(23)

图 3-34 “表设计器”提示信息对话框 (5)单击“是”按钮,数据库表“学生.dbf”中的字段“总分”的显示标题设置完成, 回到“数据库设计器”窗口。 (6)双击数据库中的表“学生.dbf”,进入“浏览”窗口。从显示的表中可看到,表中的 “总分”字段的显示标题已变为“大学录取分数”,如图 3-35 所示。 图 3-35 表“学生.dbf”的“浏览”窗口 3.3.3 设置表中字段的输入/输出掩码 输入掩码(Mark)是数据库表字段的一种属性,它用于控制数据输入的正确性和数据的 输入范围。输入掩码是按字段的数据位控制,每个数据位对应一个掩码。例如,为“学号”字 段设置的输入掩码为“A9999999”,则表示“学号”字段只能输入以字母开头、其余为数字的 8 个字符。 常用输入掩码及其含义如表 3-4 所示。 表 3-4 常用输入掩码及其含义 符号 功能 符号 功能 ! 把小写字母转换成大写字母 9 只允许数字字符;数值型数据可以是数字和 正、负号 $ 在输出的数值数据前面显示浮动的$ 符号 A 只允许字母,不允许空格和标点符号 ^ 用科学记数法显示数值数据 D 使用 SET DATE 命令设置的日期格式 * 数值型数据的前导零用星号替换 L 在数值型数据输出时给出前导零 . 输出用于指定小数点的位置 N 允许字母和数字 , 用于分隔数值的整数部分 X 任意字符 # 允许数值、空格和正号、负号字符型 数据 Y 逻辑型数据,分别以字母 Y、y 和 N、n 给出 输出掩码又称为输出格式码(Format),是显示格式,它决定字段在浏览窗口、报表或表 单中的数据显示样式。如果字段的输出掩码设置为“!9999999”,其中的字符“!”表示将字

(24)

母转换成大写字母输出。 格式码用来控制字段中所有字符的输入和输出格式,当格式码和掩码联合使用时,在格 式码前加上一个“@”符号,格式码串写完后再至少加一个空格,然后再写输入掩码串。例如, 可以使用格式字符串“@L 999999”为一个数值型的值填充一个前导的零来替代空格。 常用输出掩码及其含义如表 3-5 所示。 表 3-5 常用输出掩码及其含义 符号 功能 符号 功能 ! 强制文本大写 D 使用当前的 SET DATE 格式设置 ^ 用科学记数法表示数值数据 K 将光标移至该字段时选择所有内容 $ 使用货币符号 L 数值字段显示先导 0 ( 当数据为负数时用括号括起来 R 显示文本框的格式掩码,但不保存到字段中 A 只允许字母,不允许空格和标点符号 T 删除前导和结尾空格 【例 3-26】对数据库“教学管理.dbc”进行操作,将其中的“学生.dbf”的“学号”字 段的输入掩码设置为“A9999999”,输出掩码设置为“!9999999”,其显示标题设置为“学生 学号”。 操作步骤如下: (1)打开数据库 xsda.dbc,进入“数据库设计器”窗口。 (2)在“数据库设计器”窗口,单击学生情况表 xsqk.dbf,激活该表。 (3)在“数据库设计器”窗口,打开“数据库”菜单,选择“修改”命令,进入“表设 计器”对话框。 (4)在“表设计器”对话框中,选择字段名“学号”,然后在“显示”区域的“格式” 文本框中输入“!9999999”,在“输入掩码”文本框中输入“A9999999”,在“标题”文本框 中输入“学号”字段的显示标题“学生证号”,如图 3-36 所示。 图 3-36 设置“学号”字段的掩码和显示标题 (5)单击“确定”按钮,并单击出现的信息提示框中“是”按钮,数据库表“学生.dbf” 中的“学号”字段的输入/输出掩码和显示标题设置完成,回到“数据库设计器”窗口。 (6)双击数据库中的表 xsqk.dbf,进入“浏览”窗口。从显示的表中可看到,“学号” 字段的数据的第 1 个字母显示为大写字母,其显示标题为“学生证号”,如图 3-37 所示。

(25)

图 3-37 “学生.dbf”表的“浏览”窗口 3.3.4 设置表中字段的注释 字段注释具有注释、说明字段含义的作用。对数据库表的某些字段设置注释,可以提示 用户更清楚地了解一些重要字段的属性、意义及用途。 【例 3-27】为“学生.dbf”表中的“系别”字段设置注释信息“这是学生所在院系编号”。 操作步骤如下: (1)打开数据库“教学管理.dbc”,进入“数据库设计器”窗口。 (2)在“数据库设计器”窗口,右击需要设置字段注释信息的“学生.dbf”,执行快捷菜 单中的“修改”命令;或打开“数据库”菜单,选择“修改”命令,均可进入“表设计器”对 话框。 (3)在“表设计器”对话框,首先选择需设置注释信息的“系别”字段,在“字段注释” 框中输入“系别”字段的注释信息“这是学生所在院系编号”,如图 3-38 所示。 图 3-38 设置“系别”字段的注释信息 (4)单击“确定”按钮,并在随后出现的“表设计器”信息提示框中单击“是”按钮。 完成设置“学生.dbf”表中“系别”字段的注释信息,并回到“数据库设计器”窗口。 3.3.5 设置表中字段的默认值 给数据表的某些字段设置默认值,可以有效地提高表中数据输入的速度。 【例 3-28】将“学生.dbf”表中的“团员”字段设置默认值“.T.”。 操作步骤如下: (1)在“教学管理.dbc”数据库设计器窗口中,选择需要设置字段默认值的“学生.dbf” 表,并打开“表设计器”对话框。

(26)

(2)选择需要设置默认值的“团员”字段,然后在“字段有效性”区域的“默认值”文 本框中输入“团员”字段的默认值“.T.”,如图 3-39 所示。 图 3-39 为“团员”字段设置默认值 (3)单击“确定”按钮,之后的操作同例 3-27 一样,完成字段默认值的设置。 一旦给“团员”字段设置了默认值“.T.”,以后再给学生情况表 xsqk.dbf 追加新记录时, 该记录中的“团员”字段就会自动出现默认值“.T.”,如图 3-40 所示。 图 3-40 给学生情况表 xsqk.dbf 追加新记录 3.3.6 设置表中字段的有效性规则 给数据表的字段设置有效性规则,主要用于数据输入正确性的检验,可有效地提高表中 数据输入的准确度,从而避免数据的输入错误。 【例 3-29】为“学生.dbf”表中的“总分”字段设置有效性规则:“总分<=750 .AND. 总 分>=500”。当违反了该规则后,系统显示提示信息:“输入的总分必须介于 500~750 之间!”, 同时设置该字段的默认值为 500。 操作步骤如下: (1)在“教学管理.dbc”数据库设计器窗口中,选择需要设置字段默认值的“学生.dbf” 表,并打开“表设计器”对话框。 (2)在“表设计器”对话框中,首先选择需要设置有效性规则的“总分”字段,然后在 “字段有效性”区域的“规则”文本框中输入“入学总分”字段的有效性规则表达式“总分 <=750 .AND. 总分>=500”,如图 3-41 所示。 在“信息”文本框中可设置当违反了该规则后,系统显示提示“输入的总分必须介于 500~750 之间!”。

(27)

图 3-41 设置字段的有效性规则 同样地,在“默认值”文本框中输入该字段的默认值为 500。 单击“规则”文本框右侧的“表达式生成器”按钮 ,打开如图 3-42 所示的“表达式生 成器”对话框,用户可在该对话框中设置所需要的表达式。 图 3-42 “表达式生成器”对话框 (3)单击“确定”按钮,之后的操作同例 3-27 一样,完成字段有效性规则的设置。 一旦对“学生.dbf”表中的“总分”字段设置了有效性规则,以后给该表追加或编辑记录 时,如果给“总分”字段输入的值违反了有效性规则,如输入的值大于 750,就会出现如图 3-43 所示的警告信息对话框,提示用户输入的值违反了“总分”字段的有效性规则。 图 3-43 警告信息对话框 此时,用户可单击“还原”按钮,返回到表“浏览”窗口,以便修正错误。 3.3.7 设置表中记录的有效性规则 记录的有效性规则比字段有效性规则级别更高。在输入、修改记录的各个字段的过程中, 当光标在各字段间切换时,系统将仅进行字段有效性检查,而当要存储该记录(光标由一条记

(28)

录移向另一条记录)时,则要进行记录有效性检查。只有同时满足字段有效性和记录有效性检 查,该记录才能被存储,从而转向另一条记录。 记录有效性规则应在数据库表的“表设计器”对话框的“表”选项卡中进行。记录有效 性包含两个选项:“规则”和“信息”。  规则:一般是算术表达式和关系表达式组成一个混合表达式。返回值为逻辑值:.T. 或.F.。  信息:一个字符串,当字段完整性检查出错时给出用户提示。 【例 3-30】为数据库表“学生.dbf”设置记录有效性规则,规则为:学号和姓名都必须输 入,不能为空。当违反了该记录的有效性规则时,系统显示警告信息:必须输入学号和姓名, 其字段内容不能为空。 操作步骤如下: (1)在“教学管理.dbc”数据库设计器窗口中,选择需要设置字段默认值的“学生.dbf” 表,并打开“表设计器”对话框。 (2)在“表设计器”对话框中,单击“表”选项卡,如图 3-44 所示。在“记录有效性” 区域中的“规则”文本框中输入表达式“.NOT.EMPTY(学号).AND..NOT.EMPTY(姓名)”。 在“信息”文本框中可设置当违反了该规则后,系统显示提示“"必须输入学号和姓名, 其字段内容不能为空"”。 (3)单击“确定”按钮,之后的操作同例 3-27 一样,完成记录有效性规则的设置。 一旦对“学生.dbf”表设置了记录有效性规则,以后编辑该表的记录时,一旦不满足设置 的记录有效性规则,如果要编辑下一条记录时系统就会给出记录一致性检查的出错信息,从而 不允许进入下一条记录,如图 3-45 所示。用户只有在满足记录有效性规则后才允许编辑下一 条记录。 图 3-44 设置记录的有效性规则 图 3-45 当违反规则时出现的警告信息 此时,用户可单击“还原”按钮,返回到表“浏览”窗口,以便修正错误。 3.3.8 设置触发器 触发器是在发生某些事件时触发执行的一个表达式或一个过程。这些事件包括在表中插 入记录、更新记录和删除记录。当发生了这些事件时,将引发触发器所包含的事件代码。 触发器分为插入触发器、更新触发器和删除触发器:  插入触发器 指定每次向表中插入或追加记录时触发的一个规则。该规则检测的结果

(29)

为真(.T.)时,接受并储存插入的记录,否则拒绝插入记录。  更新触发器 指定每次更新表中记录时触发的一个规则。该规则检测的结果为真 (.T.)时,接受并保存修改后的记录,否则修改无效,同时还原修改前的记录值。  删除触发器 指定每次从表中删除记录时触发的一个规则。该规则检测的结果为真 (.T.)时,该记录被删除,否则不能删除。 触发规则可以是一个表达式、一个过程或函数。当它们返回的结果为逻辑假(.F.)时,显 示“触发器失败”信息,以阻止插入、更新或删除操作。 1.利用表设计器设置触发器 【例 3-31】在“学生.dbf”表中,为避免用户不慎删除记录,可以创建一个简单的“删除 触发器”,用于确定是否允许删除记录。为“删除触发器”设置的规则是:MESSAGEBOX(" 真的要删除吗? ", 275,"提示信息")=6。 设置“删除触发器”的操作步骤如下: (1)在“教学管理.dbc”数据库设计器窗口中,选择需要设置字段默认值的“学生.dbf” 表,并打开“表设计器”对话框。 (2)在“表设计器”对话框中,单击“表”选项卡,如图 3-46 所示。在“触发器”区域 中的“删除触发器”文本框中输入触发规则:MESSAGEBOX("真的要删除吗? ", 275,"提示信 息")=6。 图 3-46 设置“删除触发器”规则 (3)单击“确定”按钮,之后的操作同例 3-27 一样,完成记录有效性规则的设置。 (4)执行“显示”菜单中的“浏览”命令,打开该表的浏览窗口,对某个记录作删除标 记,当存盘时系统弹出“删除触发器”生效时的提示信息对话框,如图 3-47 所示。此时,若 单击“是”按钮,允许对该记录作删除标记并存盘。 (5)如果单击“是”按钮,对记录作删除标记有效。如果单击“否”按钮,则出现“触 发器失败”信息提示框,如图 3-48 所示,对记录不作删除标记。 图 3-47 “删除触发器”生效时的提示信息对话框 图 3-48 “触发器失败”信息提示框

(30)

2.利用命令方式设置触发器

创建触发器也可以使用命令方式,创建触发器的命令格式如下: CREATE TRIGGER ON TableName FOR DELETE | INSERT | UPDATE AS lExpression 该命令的功能是:为数据库表创建一个删除、插入或更新触发器。 说明:

 TableName:指定当前数据库中要创建触发器的表名。

 FOR DELETE | INSERT | UPDATE:指定要创建的触发器是删除型、插入型还是更新 型触发器。

 AS lExpression:指定要触发的触发器的逻辑表达式。它可以是能够返回一个逻辑值 的用户自定义函数或存储过程(它们将在有关程序设计的章节中讲解)。

【例 3-32】在“学生.dbf”表中设置一个更新触发器,检查“总分”字段的值不得小于 500。 OPEN DATABASE 教学管理

CREATE TRIGGER ON 学生 FOR UPDATE AS 总分>=500

之所以选择更新触发器而不是其他两类触发器,原因是当对“总分”字段操作时都会触 发更新触发器,从而检查该字段的值是否合理。

3.删除触发器

触发器的设置在不需要时,可进行删除。删除触发器,可在“表设计器”中进行,也可 使用命令进行。删除触发器的命令格式如下:

DELETE TRIGGER ON TableName FOR DELETE | INSERT | UPDATE

该命令的功能是:从当前数据库的一个表中删除、插入或更新触发器。 说明:

 TableName:指定当前数据库中要删除触发器的表名。

 FOR DELETE | INSERT | UPDATE:指定要删除的触发器是删除型、插入型还是更新 型触发器。

【例 3-33】删除例 3-31 中创建的删除触发器。 DELETE TRIGGER ON 学生 FOR DELETE

习 题 三

一、选择题 1.下列关于数据库的描述中,不正确的是( )。 A)数据库是一个包容器,它提供了存储数据的一种体系结构 B)数据库表和自由表的扩展名都是.DBF C)数据库表的表设计器和自由表的表设计器是不相同的 D)数据库表的记录保存在数据库中 2.在 Visual FoxPro 中,以下叙述正确的是( )。 A)关系也被称做表单 B)数据库文件不存储用户数据 C)表文件的扩展名是 .dbc D)多个表存储在一个物理文件中 3.打开数据库 abc 的正确命令是( )。

A)OPEN DATABASE abc B)USE abc C)USE DATABASE abc D)OPEN abc

(31)

A)空值等同于空字符串 B)空值表示字段还没有确定值 C)不支持字段值为空值 D)空值等同于数值

5.下列打开数据库文件的操作方法中,正确的是( )。 A)利用 OPEN DATABASE 命令

B)单击“文件”菜单中的“打开”命令,在“打开”对话框的“文件类型”下拉列表中选择“数据 库”,选择要打开的数据库,单击“确定”按钮 C)在项目管理器中选择相对应的数据库时,数据库将自动打开 D)以上方法均正确 6.在 Visual FoxPro 中,建立数据表时,将年龄字段限制在 18~40 岁之间的这种约束属于( )。 A)实体完整性约束 B)域完整性约束 C)参照完整性约束 D)视图完整性约束 7.下列创建数据库的方法中,正确的是( )。 A)在“项目管理器”中选择“数据”选项卡,选择“数据库”,单击“新建”按钮 B)在“新建”对话框上,选择“数据库”,单击“新建文件”按钮 C)在命令窗口中输入 CREATE DATABAS <数据库文件名> D)以上方法均正确 8.在建立数据库时,同时还建立了扩展名为( )的文件。 A).dcx B).dct C).dbc D)以上三者都包括 9.创建数据库的命令是 CREATE DATABAS <数据库文件名|?>,如果不指定数据库名称或使用问号,产 生的结果是( )。 A)系统会自动指定默认的名称 B)弹出“提示”对话框,提示用户不可以创建数据库 C)弹出“提示”对话框,提示用户输入数据库名称 D)弹出“保存”对话框,提示用户数据库名称并保存 10.在 Visual FoxPro 中,以只读方式打开数据库文件的命令是( )。

A)SHARED B)EXCLUSIVE C)NOUPDATE D)VALIDDATE 11.在 Visual FoxPro 中,打开数据库设计器文件的命令是( )。

A)OPEN DATABASE B)USE DATABASE C)MODIFY DATABASE D)CREATE DATABASE

12.在使用 MODIFY DATABASE 命令打开数据库设计器时,如果指定了 NOEDIT,则表示( )。 A)打开数据库设计器,并且可以对数据库进行修改

B)打开数据库设计器,禁止对数据库进行修改 C)在数据库设计器打开后,程序继续执行 D)打开数据库设计器后,应用程序会暂停 13.在 Visual FoxPro 中,删除数据库的命令是( )。

A)CLEAR DATABASE B)CREATE DATABASE C)DELETE DATABASE D)QUIT DATABASE

14.在 Visual FoxPro 中,调用表设计器建立数据库表 data.dbf 的命令是( )。 A)MODI STRUCTURE data B)CREATE data

C)MODIFY COMMAND data D)CREATE TABLE data

15.在 Visual FoxPro 中,表结构中的逻辑型、通用型、日期型字段的宽度由系统自动给出,它们分别为 ( )。 A)1、4、8 B)4、4、10 C)1、10、82 D)2、8、8 16.在 Visual FoxPro 中,自由表字段名最长为( )。 A)1 B)10 C)100 D)128 17.要使“学生.dbf”数据表中不出现同名学生的记录,在数据库中需要建立( )。 A)字段有效性限制 B)属性设置

(32)

C)记录有效性限制 D)设置触发器 18.在 Visual FoxPro 中,数据库表字段名最长为( )。 A)16 B)64 C)128 D)256 19.下列关于数据库字典的论述中,错误的是( )。 A)存放构成数据库的各个表中的主关键字 B)存放数据库对象信息的文件 C)存放构成数据库的表中的所有数据 D)存放关于表中字段属性、字段规则、记录规则、表间关系及数据完整性的一种表 20.在数据库表上,字段有效性规则可以是( )。 A)逻辑表达式 B)字符表达式 C)数字表达式 D)以上三种都有可能 21.将数据库表转换成自由表的命令是( )。

A)DROP TABLE B)REMOVE TABLE C)FREE TABLE D)RELEASE TABLE 22.在 Visual FoxPro 中,可以对字段设置默认值的表( )。

A)是自由表 B)必须是数据库表 C)自由表或数据库表 D)不能设置字段的默认值 23.修改当前表结果的命令是( )。

A)MODIFY STRUCTURE B)MODIFY DATABASE C)OPEN STRUCTURE D)MODIFY TABLE 24.以下关于自由表的叙述,正确的是( )。 A)全部是用以前版本的 FoxPro(FoxBASE)建立的表 B)可以用在 Visual FoxPro 中建立,但是不能把它添加到数据库中 C)自由表可以添加到数据库中,数据库表也可以从数据库中移出成为自由表 D)自由表可以添加到数据库中,数据库表不可以从数据库中移出成为自由表 25.数据库表的字段可定义默认值,默认值是( )。 A)逻辑表达式 B)字符表达式 C)数字表达式 D)以上三种都有可能 26.在 Visual FoxPro 中,下列关于表的叙述正确的是( )。 A)在数据库表和自由表中,都能给字段定义有效性规则和默认值 B)在自由表中,能给字段定义有效性规则和默认值 C)在数据库表中,能给字段定义有效性规则和默认值 D)在数据库表和自由表中,都不能给字段定义有效性规则和默认值 27.对于数据库的建立,以下说法正确的是( )。 A)在项目管理器中建立 B)用“文件”菜单中的“新建…”命令 C)用命令 CREATE DATABASE D)以上说法都正确 28.数据库表的触发器有( )。 A)删除触发器 B)插入触发器 C)更新触发器 D)以上都有 29.( )可在数据库表设计器的字段有效性框中设置。 A)标题 B)格式 C)默认值 D)输入掩码 30.Visual FoxPro 中关闭数据库可以用( )命令。

A)CLEAR ALL B)CLOSE C)CLOSE DATABASE D)USE

31.Visual FoxPro 有多种手段控制数据库表中数据的有效性,下列叙述中错误的是( )。 A)通过设置字段的格式属性,可以使输入的英文字符自动大写

B)字段的有效性规则可以为用户自定义函数

數據

表 3-3    学生情况表的结构  字段名  类型  宽度  小数位  学号  字符型  8  姓名  字符型  10  性别  字符型  2  出生日期  日期型  8  系别  字符型  2  总分  数值型  5  1  团员  逻辑型  1  简历  备注型  4  照片  通用型  4  通讯:学号 C(8),宿舍 C(8),联系 QQ C(9),家庭详细通讯地址 C(20),个人电话 C(11), 家长姓名 C(16),家长电话 C(11),备注  M  课程:课程号 C(4),课程名 C(2
表 3-8    “系名.DBF”及部分数据  系号  系名  01  管理学院  02  数理学院  03  化工学院  04  计算机学院  05  文史学院  06  医药学院  表 3-9    “教师.DBF”及部分数据  教师号  姓名  性别  系别  职称  工资  津贴  T1101  邹涛  男  01  教授  1450.00  T  T1102  李丽  女  02  讲师  930.00  T1103  陈宏  男  03  副教授  1050.00  T1104  张雯  女

參考文獻

相關文件

某项货物的单位价格是指该项货物的贸易货值与其货量之比。季度单位价格指数是计算当季各

某项货物的单位价格是指该项货物的贸易货值与其货量之比。季度单位价格指数是计算当季各

指固定资产(包括新、旧及场所自产自用之固定资产)之购置减固定资产销售后之数值。固定

指固定资产(包括新、旧及场所自产自用之固定资产)之购置减固定资产销售后之数值。固定

Z 指令 ping 為重要的使用 ICMP 封包的指令. Z 若設定防火牆,並非所有的 ICMP

某项货物的单位价格是指该项货物的贸易货值与其货量之比。季度单位价格指数是计算当季

固定资本形成总额:指固定资产(包括新、旧及场所自产自用之固定资产)之购置减固定资产销售后之数值。固定资产

固定资本形成总额:指固定资产(包括新、旧及场所自产自用之固定资产)之购置减固定资产销售后之数值。固定资产