• 沒有找到結果。

第 3 章 数据库与数据表的操作

N/A
N/A
Protected

Academic year: 2021

Share "第 3 章 数据库与数据表的操作"

Copied!
59
0
0

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

全文

(1)

第 3 章 数据库与数据表的操作

信息管理的基础是规范有效地组织数据。Visual FoxPro 是以表文件的形式将数据存放到 计算机中去的,对存入计算机中的数据能够通过 Visual FoxPro 提供的菜单、命令方式进行 各种操作。数据库中可包含若干个表,包含在数据库中的表为数据库表,不包含在数据库中 的表为自由表。

本章配合大量实例,介绍了表的基本操作及数据库表与自由表的区别。

¾ 掌握数据库表结构的建立和编辑方法

¾ 掌握数据库表内容的编辑方法

¾ 了解排序和索引的概念,掌握排序和索引的建立方法

¾ 掌握数据统计与检索的方法

¾ 熟悉多表操作

¾ 掌握数据库表记录属性的设置、永久关系的建立

¾ 了解参照完整性的设置

3.1 自由表的建立

数据库管理最先做的工作是建立数据表。如图 3-1 所示,由图中可看出

数据库表文件 由两部分组成:表结构和数据记录。一般按次序:表结构的设计→表结构的建立→表数据的 输入依次进行。

图 3-1 学生档案表 表中的记录

(行)

学生档案表

(xsda.dbf)

表中的字段(列)

(2)

54 Visual FoxPro 程序设计(第二版)

3.1.1 表的基本概念

下面先介绍上例中涉及的表、记录及字段的概念。

表(Table):是关系数据库中的一个最重要的对象,表由字段(列)和记录(行)组成。

表以文件形式存放在磁盘上,所以也称为“表文件” ,扩展名为.DBF。表是记录的集合。

表是系统管理数据的基本单位,其中第 1 行为记录的“型”,也就是表头或表的标题,

它构成表的结构;其他行则为记录的“值”,构成表的数据,每条记录由一个或若干个相关 字段组成。字段也称数据项,它同样也有“型”与“值”之分。用来识别一条记录的一个或 一组数据项,称为关键字,如学生档案表中的学号、姓名如没有同名均可作为关键字。

记录(Record):关系数据库中,描述一个对象的数据,即二维表中的一“行”数据叫 做一个记录。记录是字段的集合,表中有多少行就有多少条记录。

字段(Field):关系数据库中,把对象的每一个属性,即二维表中的一“列”称为一个 字段,它是表中可进行处理的最小数据单位。每一个字段代表一组数据,即所有记录的同一 属性下的数据。

在 Visual FoxPro 中,表可以存放在一个数据库中,这种表称为数据库表;也可以单独以 DBF 文件存在,这种表称为自由表。下面以图 3-1 为例,说明数据库表的创建和基本操作。

3.1.2 表结构的设计

表结构由 6 部分组成:字段名、类型、宽度、小数位数、索引和 NULL。

(1)字段名:即字段的名字,由字母(或汉字)、数字及下划线组成。自由表的字段名不 超过 10 个字符,数据库表的字段名可多达 128 个字符,如 XM2、姓_名、csrq、性别等。

(2)类型:即字段的数据类型,单击下拉列表从中选择一种该字段的类型,有字符型

(C)、数值型(N)、日期型(D)、逻辑型(L)和备注型(M)等 13 种。

(3)宽度:即字段宽度。除字符型、数值型、浮动型可以由用户定义宽度外,其他类 型的宽度都是固定的。字符型字段不超过 254 个字符,一个汉字占两个字符宽;对数值型字 段,正负号和小数点也计在字段宽度之内。

(4)小数位数:只有数值型、双精度和浮点型字段可以规定小数位数,小数位数的取 值至少应比字段宽度少 1 位。

(5)索引:指定是否以该字段为关键字建立索引(升序或降序),索引主要用于记录 排序。

(6)NULL:指定该字段可接收 NULL 值(空值)。NULL 值等价于没有任何值,它与 0、空串及空格不同,它作为一个值.NULL.可以给变量赋值,在条件表达式中如遇 NULL 值,该表达式为假(.F.)。在交互方式中,以 Ctrl+0 组合键来向一个允许 NULL 值的字段中 输入 NULL 值。

根据图 3-1,建立学生档案表。

设计表结构如同设计一张表格。设计表格时,首先要给这张表一个表名(表文件名),

由图 3-1 看出,表文件名为 xsda。然后要规划这张表有多少栏目,即在纵向有多少表列(字

段),每列反映什么内容(字段名),写入多少信息(字段宽度),这些数据是什么类型(字

段类型),这张表中有多少行(记录数)。

(3)

由此可确定上述表包含 11 个字段,分别为:

(1)学号 XH:字符型数据,长度为 9 个字节。

(2)姓名 XM:字符型数据,长度为 8 个字节。每个汉字占 2 个字节,因中国人姓名 一般人为 2~4 个汉字,占用 4~8 个字节。

(3)性别 XB:字符型数据,长度为 2 个字节。也可以考虑这一字段设为逻辑型,因为 性别一般非男即女,逻辑型数据表示两种状态,只占 1 个字节的长度。不过把它设为字符型 数据,显得更加直观、易懂。

(4)出生日期 CSRQ:日期型数据,系统自动将长度设为 8 个字节。

(5)系 XI:字符型数据,长度要根据情况设置,这里设为 10 个字节。

(6)专业 ZY:字符型数据,长度要根据情况设置,这里设为 10 个字节。

(7)班级 BJ:字符型数据,长度要根据情况设置,这里设为 9 个字节。

(8)团员否 TYF:逻辑型数据,系统自动将长度设为 1 个字节。

(9)入学分 RXF:数值型数据,长度设为 3,小数默认自动为 0。

(10)照片 ZP:照片一般是单独存储的图像文件,如 BMP、JPG 文件等,设为通用字 段类型,长度自动为 4 个字节。

(11)特长 TC:该内容一般较多,各人不一,可设为备注型字段,系统自动将长度设 为 4 个字节。

在明确了要建立的表的字段、字段类型和长度后,我们就可以开始建立一个表了。

3.1.3 表结构的建立

建立自由表既可采用菜单方式,也可采用命令方式。

1.菜单方式

菜单方式建立一个表,按下述步骤操作:

(1)在 Visual FoxPro 主窗口,选择“文件”→“新建”命令,或者直接按 Ctrl+N 组合 键,出现“新建”对话框,如图 3-2 所示。

(2)在“新建”对话框中,选择“文件类型”框中的“表”单选按钮,再单击“新建 文件”按钮,出现“创建”对话框,如图 3-3 所示。

图 3-2 “新建”对话框 图 3-3 “创建”对话框

(4)

56 Visual FoxPro 程序设计(第二版)

(3)在“输入表名”文本框中输入要建立的表的名称,并且确认“保存类型”为“表 /DBF(*.dbf) ”。表的名称是一个存放在磁盘上的文件名,要符合文件的命名规范。这里输 入的表名为 xsda.dbf(取拼音)后,单击“保存”按钮,系统就保存该表,并在磁盘上生成 文件名为 xsda.dbf 的表文件。之后,将出现如图 3-4 所示的“表设计器”对话框。

图 3-4 “表设计器”对话框的“字段”选项卡

(4)在“表设计器”对话框中,显示了“字段”、“索引”和“表”3 个选项卡和“确 定”、“取消”、“插入”、“删除”4 个命令按钮。系统默认显示的选项卡是“字段”选项卡,

在这个选项卡中依次输入本节定义好的字段名、字段类型和字段宽度等,如图 3-5 所示。

图 3-5 在“字段”选项卡中输入字段

单击“确定”按钮,完成表结构的设计。

2.命令方式

格式 1:CREATE <表名>

功能:打开表设计器,创建表。

说明:扩展名默认为.dbf。如果在该命令之前,用 OPEN DATABASE 命令打开了数据 库,则创建的是数据库表;否则,创建的是自由表。

示例:

CREATE xsda &&创建表 xsda.dbf,出现表设计器对话框

格式 2:CREATE TABLE <表名>(<字段名> <字段类型>(<字段宽度>[,<小数位数>]…))

功能:SQL 表创建的方式,详见第 4 章。

(5)

3.项目管理器方式

通过菜单或 CREATE PROJECT 命令创建一个“学生管理”项目,文件类型为“项目

(.PJX)”。

打开学生管理项目文件,单击“全部”或“数据”选项卡,选中“自由表”,单击“新 建”按钮,弹出“新建表”对话框,如图 3-6 所示;再单击“新建表”按钮,则出现如图 3- 3 所示的“创建”对话框,其余步骤同上。

图 3-6 项目管理器创建表

3.1.4 表数据的输入

当确定表结构设计无误后,单击“确定”按钮,出现如图 3-7 所示的对话框。

图 3-7 是否立即输入数据的提示对话框

在对话框中单击“是”按钮将进入数据(记录)输入窗口,用户可直接输入该表的数 据。如果单击“否”按钮,则系统保存该表的结构,待以后再输入。这里单击“是”按钮,

依次输入每个学生的数据,如图 3-8 所示。

(a)以“编辑”方式输入数据 (b)以“浏览”方式输入数据

图 3-8 表数据的输入

在数据录入过程中,上一个记录的内容和下面的内容有一些是重复的,这时可以通过设

(6)

58 Visual FoxPro 程序设计(第二版)

置将上面记录的全部或部分内容复制下来,命令为:

格式:SET CARRY ON|OFF 或 SET CARRY TO [<字段名表>]

功能:设置是否将当前记录携带到下一条记录。其中<字段名表>是指将有关字段的信息 复制下来,各字段名之间用逗号分隔。

注意

各种类型字段的输入及修改方法:

„ 备注型:双击该字段内容或按 Ctrl+Home 组合键,弹出一个供输入 数据的对话框,按 Ctrl+W 组合键保存输入;按 Ctrl+Q 组合键放弃 修改。无内容时显示为 memo,有内容时显示为 Memo。

„ 通用型:双击该字段内容或按 Ctrl+Home 组合键,弹出一个供输入 数据的对话框,单击“编辑”菜单,选择“插入对象…”命令,按 Ctrl+W 组合键保存输入;按 Ctrl+Q 组合键放弃修改;单击“编辑”

菜单,选择“清除”命令删除现有内容。无内容时显示为 gen,有内 容时显示为 Gen。

其他字段可直接输入和修改。

3.2 数据库的建立

自由表使用方便灵活,但多个表之间相关性差(数据一致性差),表的数据难以控制

(数据完整性差),通过数据库对表进行管理,可以很好地解决类似问题。

3.2.1 数据库表及自由表

数据库是表和关系的集合,也可以简单地理解为存放数据的仓库。数据库中可包含若干 个表,包含在数据库中的表为数据库表,不包含在数据库中的表为自由表。数据库表与自由 表可以相互转换。当用户将一个自由表加入到某一个数据库时,该自由表便成了数据库表;

若将表移出数据库,数据库表则变成了自由表,同时原数据库表的属性将失去。

数据库表与自由表操作基本相同。

与自由表相比,数据库表有以下特点:

(1)数据库表可以命名长表名(可达 128 个字符)。

(2)可以设置表的注释。

(3)可以设置长字段名(可达 128 个字符)。

(4)可以设置字段标题和注释。

(5)可以设置字段有效性、记录有效性和参照完整性规则。

(6)可以设置主索引。

(7)可以设置数据表之间永久关系。

(8)可以设置存储过程、触发器、连接、视图等功能。

(7)

以上这些设置都称为数据词典功能,它们存储在.DBC 文件中。

如在实际工作中需要各学校(xsgl.dbc)数据库,其中包含学生档案表(xsda.dbf)、学生 成绩表(xscj.dbf)、课程设置表(kcsz.dbf),相关表之间按关键码建立关系,如图 3-9 所示。

图 3-9 数据库

3.2.2 数据库的创建

数据库是表的集合。要想把数据表放入数据库中,必须先建立一个新的数据库,然后加 入需要处理的表,并定义它们之间的关系。用户可通过菜单方式、项目管理器方式和命令方 式来完成上述数据库的建立。

1.菜单方式

用菜单方式创建新的数据库,可按如下步骤:从“文件”菜单中选择“新建”命令,或直 接单击“常用”工具栏上的“新建”按钮,系统将显示“新建”对话框,如图 3-10 所示。

(1)从“文件类型”框中选择“数据库”单选按钮,再单击“新建文件”按钮,出现 如图 3-11 所示的“创建”对话框。

图 3-10 “新建”对话框 图 3-11 “创建”对话框

(2)确认“保存类型”为数据库,在“项目文件名”文本框中输入要建立的数据库名,如

输入 xsgl 后单击“保存”按钮,系统就在当前盘当前目录下生成名为 xsgl.dbc 的数据库文件,

(8)

60 Visual FoxPro 程序设计(第二版)

然后显示“数据库设计器”窗口,同时将显示数据库设计工具栏,如图 3-12 所示。

图 3-12 “数据库设计器”窗口

(3)数据库建立完成。此时,用户已经建立了一个名为 xsgl.dbc 的空数据库,这是一 个数据库的框架,里面还没有内容,可以向其中添加各种对象,如表、视图、表之间的关系 等。数据库的.DBC(数据库容器)文件中存储有关该数据库的所有信息(包括和它关联的 文件和对象名),.DBC 文件并不在物理上包含任何对象(如表和字段),而仅存储指向表文 件的路径指针等。创建数据库后,系统自动生成.DBC、.DCT 和.DCX 三个文件。在数据库 设计器中,用户可进行如下一系列操作:建立新表;添加表到数据库中;浏览数据库中的 表;修改数据库中的表;移去数据库中的表;建立新的本地或远程视图;建立连接;编辑存 储过程;编辑参照完整性等。

2.项目管理器方式

采用项目管理器创建数据库的方法是:新建或打开一个项目文件,屏幕出现“项目管理 器”,单击项目管理器中的“全部”或“数据”选项卡,选中“数据库”选项,单击“新 建”按钮,其余步骤基本同上。

3.命令方式

创建数据库的命令如下:

格式:CREATE DATABASE [<数据库文件名>|?]

功能:创建并打开一个数据库。

说明:

(1)<数据库文件名>指定要创建的数据库的名称,命名规则要符合文件名的命名规则。

(2)如果执行 CREATE DATABASE 命令后使用“?”号或不带任何可选参数,将显示

“创建”对话框,提示用户指定数据库的名称。

(3)数据库文件的扩展名为.DBC,相关的数据库备注文件的扩展名为.DCT,相关的索 引文件的扩展名为.DCX。

(4)执行该命令后,从界面上看不出任何反映,但数据库文件已经建立。另外,除非 在数据库名前指定路径,否则创建的数据库文件存放在当前默认的文件夹中。默认的文件夹 可通过“SET DEFAULT TO 路径”命令设定。

如创建名为 xsgl 的数据库,可用以下命令(默认扩展名为 DBC):

CREATE DATABASE xsgl

(9)

3.2.3 数据库的操作 1.数据库的打开与关闭

(1)数据库的打开。所谓数据库的打开,就是指将数据库文件从所在磁盘调入内存。

数据库文件及其相关的其他文件只有打开之后,才能对其实施各种操作。在 Visual FoxPro 中,可以同时打开多个数据库。打开数据库之后,在主菜单中出现“数据库(D)”菜单,通 过该菜单可以对数据库进行各种操作;在主窗口出现数据库设计器,通过在数据库设计器中 单击右键弹出的快捷菜单也可对数据库进行操作。数据库的打开可以通过以下 3 种方式:

1)菜单方式。

① 从“文件”菜单中选择“打开”命令,或者单击工具栏上的“打开”按钮。

② 在“打开”对话框中选择“文件类型”为“数据库(*.dbc)”,选择数据库所在的文 件夹,找到数据库文件后,双击要打开的数据库。

③ 对话框的下方有“以只读方式打开”和“独占”的复选框。“以只读方式打开”表示 打开的数据库只能显示和浏览而不能修改;“独占”表示打开的数据库不仅能显示和浏览,

而且能修改。

2)项目管理器方式。

在项目管理器中,选定一个数据库,然后单击“修改”或“打开”按钮,打开此数 据库。

3)命令方式。

格式:OPEN DATABASE [<数据库文件名>|?][ EXCLUSIVE| SHARED]

功能:打开一个指定的数据库。

说明:

<数据库文件名>:指定要打开的数据库文件名。如果省略<数据库文件名>将显示“打 开”对话框;如果省略扩展名,系统指定为.DBC。

?:显示“打开”对话框。用户可以从中选择现有的数据库,或输入所要创建的新数据 库名。

EXCLUSIVE:表示以“独占”方式打开数据库。如果以独占方式打开数据库,则其他 用户无法访问该数据库。

SHARED:表示以“共享”方式打开数据库。如果以共享方式打开数据库,则其他用户 也可以访问该数据库。

如果缺省 EXCLUSIVE 或 SHARED 参数,则当前 SET EXCLUSIVE 的设置值决定数据 库以何种方式打开。

数据库打开时,其中包含的所有表均可用,不过表不能隐含地打开,必须用 USE 命令 打开表。

示例:

CLOSE ALL

OPEN DATABASE xsgl &&打开数据库 xsgl.dbc

DISPLAY DATABASE &&显示数据库及其所含表的信息

(2)设置当前数据库。在 Visual FoxPro 中,可同时打开多个数据库,但仅有一个为

(10)

62 Visual FoxPro 程序设计(第二版)

“当前”数据库。在打开多个数据库时,最后一个打开的数据库为当前数据库。“常用”工 具栏中的数据库名列表显示的是当前数据库的名称。用户可在列表框中选择其他已经打开的 数据库成为当前数据库,也可以使用下列命令设置当前数据库。

格式:SET DATABASE TO [<数据库文件名>]

功能:指定当前数据库。

说明:<数据库文件名>用来指定一个打开的数据库文件名,使其成为当前数据库。如果 缺省,则打开的数据库都不会成为当前数据库。

注意 DBC() 函数返回当前数据库文件名。

(3)数据库的关闭。当不使用数据库文件时,为防止意外断电或误操作而破坏数据库 文件中的数据,应及时将其关闭。关闭数据库,可以使用项目管理器或 CLOSE DATABASE 命令进行。

1)项目管理器方式。在项目管理器中,选择要关闭的一个数据库,然后单击“关闭”

按钮。

2)命令方式。

格式 1:CLOSE DATABASE [ALL]

功能:关闭数据库和表。

格式 2:CLOSE ALL

功能:关闭除“命令窗口”、“调试窗口”、“跟踪窗口”和“帮助窗口”以外的所有 文件。

说明:在格式 1 中,若含 ALL 参数,则关闭所有打开的数据库和其中的库表,关闭所 有工作区中所有打开的自由表及索引和格式文件;不含 ALL 参数,则关闭当前数据库和 表,若没有当前数据库,则关闭所有工作区中所有打开的自由表及与此表相关的内容。

2.数据库的修改

建立了数据库,就可以对其进行操作。打开数据库后,主菜单中出现“数据库”菜单 项。可以在“数据库”菜单项或数据库设计器中,对数据库表进行增加、删除(或移去)、

修改、浏览等操作。

(1)在数据库中建立新表。在数据库设计器中,单击右键弹出快捷菜单,选择“新建 表”命令,系统将询问是直接建立新表还是通过表向导建立新表,选择“新建表”后,系统 提示输入新表名,之后弹出表设计器,如图 3-13 所示。

注意

此时的表设计器已经与建立自由表时的表设计器不同,除了原来表设计 器的功能外,在对话框的下半部分还增加了不少新特性,这也是数据库表与 自由表的区别。

按照这种方法,新建两张表:学生成绩表 xscj.dbf 和课程设置表 kcsz.dbf,xscj.dbf 表存 放学生的学号 XH、课程代码 KCDM、成绩 CJ;kcsz.dbf 表存放课程代码 KCDM、课程名称 KCMC、教师编号 JSBH、课时数 KSS、必修课 BXK 字段,并输入了相应的数据。

(2)向数据库中添加表。可以通过两种方式添加自由表,使之成为一个数据库表。

(11)

图 3-13 在数据库中建立新表的表设计器

1)菜单方式。

① 从“数据库”菜单中选择“添加表”命令,或右击,在弹出的快捷菜单中选择“添 加表”命令。

② 系统出现“打开”对话框,找到要加入的自由表名,单击“确定”按钮,该表即加 入到当前数据库中。图 3-14 是将自由表(xsda.dbf)加入到数据库(xsgl.dbc)后的情况。

图 3-14 在数据库中添加自由表后的情况

2)命令方式。

格式:ADD TABLE <表文件名>|?[NAME <长表名>]

功能:在当前数据库中添加一个自由表。

说明:

<表文件名>:指定添加到数据库中的表的名称。

?:显示“打开”对话框,从中可以选择添加到数据库中的表。

NAME <长表名>:数据库表支持长表名和长字段名,可用长表名代替短表名以标识数

据库表。如果定义了长表名,当表出现在界面(如数据库设计器等)时,会显示长表名。

(12)

64 Visual FoxPro 程序设计(第二版)

示例:将学生档案表 xsda.dbf 添加到数据库 xsgl.dbc 中。

OPEN DATABASE xsgl.dbc

ADD TABLE xsda.dbf NAME 学生的基本情况表

(3)从数据库中移去表或删除表。一个数据库表只能属于一个数据库,并受该数据库 管理。如想要将某个数据库表加入到另一数据库中,必须先从此数据库中移出,才可以加入 到其他数据库中。

1)菜单方式。

①在数据库设计器中,单击选定数据库中需移去或删除的表。

②从“数据库”菜单中选择“移去”命令;或在数据库表上右击,弹出对该表操作的快 捷菜单,单击其中的“删除”命令,出现如图 3-15 所示对话框。

图 3-15 选择“删除”命令后的提示对话框

注意

“移去”按钮:仅将表与该数据库脱离关系,该表并没有被物理删除,

只是成为自由表,还可以重新加入数据库中。

“删除”按钮:则是从磁盘上物理地删除该表,这个表将不复存在。

移去表时系统会提示进行确认,而删除表却没有提示确认这一操作,如 果不小心将表删除,将无法恢复,只能重新创建。

2)命令方式。

格式:REMOVE TABLE <表文件名>|?[DELETE]

功能:从当前数据库中移去或删除一个表。

说明:

<表文件名>:指定要从当前数据库中移去表的名称。

?:显示“移去”对话框,从中可以选择一个当前数据库中要移去的表。

DELETE:可选项,指定从数据库中移去该表,并从磁盘上删除。

注意

REMOVE TABLE 命令要求以“独占”方式使用数据库。当数据库表被移 去成为自由表后,原数据库表有关的主索引、字段有效性、记录有效性等属性 将不复存在,另外,该表与其他数据库表之间建立的永久关系也将不再有效。

示例:将数据库表学生档案 xsgl!xsda.dbf 从数据库 xsgl.dbc 中移去,使其成为自由表。

(13)

OPEN DATABASE xsgl.dbc &&打开数据库

REMOVE TABLE xsda.dbf &&从数据库中移去数据库表,使其成为自由表

3.数据库数据词典

数据词典用于保存对数据库表中各种数据的定义或设置信息,包括表的属性、字段属 性、字段有效性规则、记录有效性规则、表间关系和参照完整性等。这些属性或信息都可以 通过数据库表设计器来设置、显示或修改,并作为数据库的一部分保存,数据词典使得数据 库的设计和管理更加方便、灵活。当数据库表成为自由表时,相关属性同时消失。

(1)设置数据库表的字段属性。通过设置数据库表的字段属性,可以为字段设置标 题、加注释、设置默认值、设置有效性规则等。例如,在 xsgl.dbc 数据库的 xsda.dbf 表中,

对当前字段 xh 设置并显示了一系列字段属性,如图 3-16 所示。

图 3-16 xsgl!xsda.dbf 表的字段属性

1)设置数据库表的字段“显示”属性。

在“显示”组中,可指定输入和显示字段的格式属性。共有 3 项,分别如下:

„ 格式:指定字段在浏览窗口、表单、报表等显示时的样式。格式字符及功能如表 3-1 所示。

表 3-1 字段的显示属性格式字符及功能

字符 功能 字符 功能

A 字母字符,不允许空格和标点符号 D 使用当前的 SET DATE 格式

E 英国日期格式 K 将光标移至该字段选择所有内容

L 数值字段显示前导 0 M 允许多个预设置选择项,参见文本

框 InputMask 属性

R 显示文本框的格式掩码,但不保存

到字段中 T 删除前导空格和结尾空格

! 字母字符转换为大写 ^ 用科学记数法表示数值数据

$ 显示货币符号

„ 输入掩码:指定字段中输入数值的格式。掩码字符及功能如表 3-2 所示。

(14)

66 Visual FoxPro 程序设计(第二版)

表 3-2 字段的显示属性掩码字符及功能

字符 功能 字符 功能

X 任意字符 * 左侧显示*

9 数字字符和+、-号 . 指定小数点位置

# 数字字符、+、-号和空格 , 用逗号分隔整数部分

$ 指定位置显示货币符号 $$ 货币符号和数字不分开显示

例如,学号 xh 字段“输入掩码”设置为 999999999,表示只能输入 9 个数字。

„ 标题:指定该字段在显示时的列标题,没有标题则用字段名。自由表的字段名只能 容纳 10 个字符,这里的标题可以是长字段名(允许 128 个字符),在浏览窗口、表 单或报表中,标题将直接代替字段名。

小技巧

一般地,用代号作为字段名编程可少输入汉字,但在使用系统的浏览 表和选择字段等功能时显得不太直观,给字段加标题属性可弥补这方面的 不足。例如,对于学生档案表的 xh 字段,起个“学号”的标题。

2)设置数据库表的“字段有效性” 。在“字段有效性”组里,也有 3 项选择,分别如下:

„ 规则:指定字段数据的有效范围,实施字段级数据的有效性检查。这是字段避免输 入错误内容的一个重要措施。它可以是一个返回逻辑值的有效的 Visual FoxPro 表 达式,也可以是一条语句或一个过程。向该字段中输入数据,输入的数据格式要受

“输入掩码”的控制,同时还要满足字段“规则”中指定的条件。

例如,上面的 xh 字段,限制其前 3 位只能是“199”,并且输入的学号必须满 9 位,其 规则表达式为:LEFT(xh,3)="199".AND.LEN(TRIM(xh))=9。

„ 信息:当企图向字段输入不符合“规则”的数据时,显示给用户的提示内容。如在 xh 字段的“信息”框中,输入“学号不符合要求! ”的信息。

„ 默认值:是指字段在没有输入的情况下,系统按指定给定的值。

3)设置数据库表的“匹配字段类型到类” 。Visual FoxPro 是一个面向对象的数据库系 统,对象是其基本特征,数据库、表、表单、报表是对象,按钮、文本框、标签、列表框也 是对象,类是对象的模板。匹配字段类型就是为字段指定默认的控件类。一旦指定了字段对 应的控件类,就可在界面设计(如表单设计)时自动设置相应的库和类。

„ 显示库:指定类库的路径和文件名,它是一个扩展名为.VCX 的文件。如果不指 定,系统使用默认的类库。

„ 显示类:指定字段的默认控件类。如果不指定,系统使用默认的控件。在匹配字段 类型中,既可以使用系统类,也可以使用系统自定义类。具体参见有关内容。

4)设置数据库表的“字段注释” 。

„ 字段注释:对本字段的注解,供用户作说明或备忘。

(2)设置数据库表的记录属性。通过数据库表的记录属性,可以对数据库表的记录数 据进行控制。在表设计器中设计表结构时,选“表”选项卡即可设置数据库表的记录属性。

在“表”选项卡中,包含了一些表信息的只读内容,可以在此设置记录级验证的规则、编辑

触发器和表注释等。例如,学校数据库(xsgl.dbc)的学生档案表(xsda.dbf)的“表”选项

卡,如图 3-17 所示。

(15)

图 3-17 “表设计器”对话框中的“表”选项卡

1)设置“记录有效性”

„ 规则。指定数据记录的有效条件,它是一个返回逻辑值的表达式、语句或过程。大家 知道,满足字段“规则”可移出该字段,那么,满足记录规则才能从当前记录移出。

例如,在 xsda.dbf 表中,有姓名的学生必须有学号,而一个学号必须对应一个学生姓 名,学号和姓名都必须输入,不能为空。为此,设置一个记录验证“规则”:

.NOT.EMPTY(xh).AND..NOT.EMPTY(xm)

„ 信息。当不符合记录有效性“规则”时,显示给用户的提示内容。

如在 xsda.dbf 表的信息框中输入“学号和姓名都必须输入”。当追加记录,故意不输入 学号而进入下一条记录时,系统提示上述信息,表明此记录验证规则生效。

2)设置“触发器” 。触发器是系统提供的记录级事件代码,指操作记录(对记录进行 增、删、改并保存)时激活,调用要执行的语句或过程。Visual FoxPro 中有 3 种类型的触发 器,分别如下:

„ 插入触发器。当向该表插入或追加记录时触发,执行插入触发器框中指定的条件表 达式或用户自定义函数。

„ 更新触发器。当修改表记录时触发,执行更新触发器框中指定的条件表达式或用户 自定义函数。

„ 删除触发器。当删除表记录时触发,执行删除触发器框中指定的条件表达式或用户 自定义函数。

下面举例说明触发器的建立和使用。设置步骤如下:

① 在“插入触发器”文本框中输入函数名 tri_ins(),在“删除触发器”文本框中输入函 数名 tri_del(),如图 3-17 所示。

② 单出“确定”按钮,进入“数据库设计器”,然后右击,在弹出的快捷菜单中选择

“编辑存储过程”命令,或选择“数据库”→“编辑存储过程”命令,进入存储过程编辑窗 口,输入插入和删除的触发过程代码,如图 3-18 所示。

③ 插入触发器的验证。当插入或追加一条新记录时,触发 tri_ins()过程。该过程判断插

入的记录中出生日期 csrq 是否为空,如为空则显示“您忘了输入出生日期”的信息,插入记

录不成功;否则,提示用户“您新增的记录已经成功存盘” 。

(16)

68 Visual FoxPro 程序设计(第二版)

图 3-18 在存储过程窗口输入触发过程代码

④ 删除触发器的验证。当删除一条记录时,触发 tri_del()过程。如给表 xsda.dbf 的第 6 条记录作上删除标记,再选择“表”→“彻底删除”命令,系统会提示“您已经成功地删除 了 6 号记录”。

3)设置“表注释” 。对该数据库表的附加说明。

(3)设置数据库表的表间关系。永久关系是存储在数据库表间的关系。永久关系具有 以下性能:在查询设计器和视图设计器中,自动作为默认“连接”条件;在数据库设计器 中,显示为联系索引的线;作为表单和报表的默认关系,在数据环境设计器中显示;用来存 储参照完整性信息。因为这种在数据库中建立的关系被作为数据库的一部分而保存起来,故 称为永久关系。

1)建立表之间的永久关系。在数据库设计器中建立表间关系,可按以下步骤进行:

①为各表需建立关系的字段建立索引。打开数据库设计器,该数据库中的数据库表就会 被可视化地显示出来。数据库中的可视化数据库表除了显示字段名外,还显示它的结构化复 合索引的索引标识名。

索引是建立永久关系的前提。在一对一关系中,主表和从表均应按相同的关键字建立主 索引或候选索引。而对于一对多关系,主表应建立主索引或候选索引,而从表可以建立任何 类型索引。在数据库 xsgl.dbc 中,包含 3 个建立了索引的数据库表,但还没有在表间建立关 系,如图 3-19 所示。

相同关键字 建立的索引

图 3-19 建立索引的数据库表

(17)

在表 xsda.dbf 中,对 XH 建立了主索引(索引名前有金钥匙),对 XM 建立了普通索 引;在表 xscj.dbf 中,对 XH 和 KCDM 代码都建立了普通索引;在表 kcsz.dbf 中,对 KCDM 建立了候选索引。

②建立表间关系。一个学生要学习多门课程,因此,学生档案表 xsda.dbf 与学生成绩表 xscj.dbf 之间是一对多的关系;同理,课程设置表 kcsz.dbf 与学生成绩表 xscj.dbf 之间也是一 对多的关系。

建立表间关系的方法是:在数据库设计器中,在已建索引处,按住鼠标左键,把它拖到 需要建立关系的另一个表的相应索引上,即建立了表间关系。拖动的起始处为主表方,拖动 的结尾处为从表方。具有关系的表之间出现了连线,如果是“一对一”关系,则两端均为单 线;如果是“一对多”关系,则一方为单线,多方为带有 3 个分叉的线,如图 3-20 所示。

图 3-20 在表间建立关系

2)删除表之间的永久关系。将鼠标箭头指向表的关系连线,单击使连线变粗,选中该 关系,然后按 Delete 键;或右击,在弹出的快捷菜单中选择“删除关系”命令,即取消表间 联系,如图 3-21 所示。

图 3-21 删除表间关系

3)编辑表之间的永久关系。对已经建立的永久关系可进行编辑。方法是:将鼠标箭头

(18)

70 Visual FoxPro 程序设计(第二版)

指向表的关系连线,单击使连线变粗选中该关系,然后右击,在弹出的快捷菜单中选择

“编辑关系”命令,即弹出“编辑关系”对话框。编辑时,可从下拉列表框中进行选择,

如图 3-22 所示。

图 3-22 “编辑关系”对话框

(4)设置数据库表的表间参照完整性。

1)字段数据的完整性。字段数据的完整性是指输入到字段中的数据类型和值必须符合 指定的要求。字段属性中的字段有效性规则用于控制字段数据的完整性。

2)记录数据的完整性。记录数据的完整性是指输入到记录中有关字段中的数据值必须 符合指定的要求。表属性中的记录有效性规则用于控制记录数据的完整性。

3)参照完整性。参照完整性指控制相关表之间的记录一致性。相关表之间参照完整性 规则的建立是以相关表之间建立了永久关系为前提。遵照不同表的主关键字和外部关键字之 间的规则,使得插入、删除、更新记录时,能保持已定义的表间关系,参照完整性规则有 3 种选项。

„ 级联。对主表中的主关键字段或候选关键字段的更改,会在相关的子表中反映出 来。如果选择了这一选项,只要更改父表中的某个字段,系统就会自动更改所有相 关子表记录中的对应值。

„ 限制。禁止更改父表中的主关键字段或候选关键字段中的值,这样在子表中就不会 出现孤立的记录。

„ 忽略。即使在子表中有相关的记录,仍允许更新父表中的记录。

编辑参照完整性的步骤如下:

① 在表间永久关系连线上右击,在弹出的快捷菜单中选择“编辑参照完整性”命令,

出现“参照完整性生成器”对话框,如图 3-23 所示。

图 3-23 “参照完整性生成器”对话框

(19)

② 通过单击“更新规则”、“删除规则”、“插入规则”选项卡来确定对哪个规则进行编 辑。而选项卡的下方列出 3 种单选按钮的“规则”(级联、限制、忽略),其中“插入规则”

选项卡只有“限制”和“忽略”两种选择。根据选择项后的提示来选择相应的规则,单击

“确定”按钮返回。

③ 系统提示“是否保存改变,生成参照完整性代码并退出?”。单击“是”按钮,系统 将进一步提示把参照完整性代码和非参照完整性存储过程合并后加入到数据库中,生成新的 参照完整性代码,并提示存储过程的副本保存在 risp.old 文件中。

④ 再次单击“是”按钮,系统在执行一系列操作后,返回到数据库设计器,此时,参 照完整性代码生成工作宣告完成。

(5)建立数据库表的存储过程。存储过程是保存在数据库中的独立程序,属于数据库 管理的对象。存储过程可供数据库中有关对象调用,从而实现对数据库的管理。见前述“触 发器”。

3.3 表的基本操作

表的操作主要是对表中记录的操作。本任务主要学习表结构的修改,移动记录指针定位 记录,在任意位置增加新记录,逻辑删除和物理删除记录,修改记录内容等。

3.3.1 表结构的修改 1.在设计时修改表结构

在表设计器中,可以对字段进行定义,以及插入、删除、修改、调整字段的顺序等操作。

(1)插入字段。把鼠标移到需要插入字段的位置,单击鼠标左键选中该字段,再单击

“插入”按钮,将在该字段之前插入一个新字段,此时输入新字段的名称、数据类型和宽度 等即可,插入新字段后,原字段位置的顺序后移。

(2)删除字段。已设置好的字段可以随时删除,单击需要删除的字段,再单击“删 除”按钮,该字段即被删除,删除字段后该字段的后续字段自动补位。

(3)调整字段的顺序。在表设计器字段名的左边,有一排纵向排列的方形按钮,需要 调整哪个字段的位置,只要单击该按钮(激活此按钮),按钮将出现一个上下箭头的符号,

按住鼠标左键,拖动按钮,该按钮所在行的字段就被放到了新的位置。

(4)更改字段内容。如更改字段的名称、类型、宽度等,可选中该字段内容,然后直 接输入或选择即可。

如在设计 xsda.dbf 时,将“学号 xh”字段调整至“姓名 xm”之后,将“性别 xb”的字段

类型改为逻辑型,在“出生日期 csrq”字段之前插入一个新的字段(参见图 3-24)。表结构修改

完毕,按 Ctrl+W 组合键或单击“确定”按钮保存表结构,按 Ctrl+Q 组合键或单击“取消”按

钮放弃本次结构修改,系统将出现提示对话框,用户单击“是”或“否”按钮确定。

(20)

72 Visual FoxPro 程序设计(第二版)

2.对已经存盘的表结构进行修改

如果表已经建立并存盘,要修改该表的结构,不能在共享方式下进行,应以“独占”方 式打开表,再进入“表设计器”进行修改。

(1)菜单方式。以独占方式打开表,按以下步骤进行。

1)在 Visual FoxPro 主窗口,打开欲修改的表,出现“打开”对话框,如图 3-25 所示。

图 3-24 在表设计器中修改表结构 图 3-25 “独占”方式的“打开”对话框

2)在“文件类型”中选择表(*.dbf) ,单击对话框中的表文件名或在“文件名”文本框 中输入要修改的表名,选中对话框中的“独占”复选框,最后单击“确定”按钮后,通过

“显示”菜单进入“表设计器”进行修改。

注意

一般地,每次修改只宜修改一个字段的一个参数或同时修改若干个字段 的字段名,但不修改其宽度。若一次改动两种参数,或既修改一个参数又要 删除字段,则被修改字段的值,将可能无法从后备文件中恢复,造成数据丢 失。解决方法为:可采用分步修改,即每次修改一个参数,存盘退出后再修 改下一个参数,直到全部参数修改完毕。

(2)命令方式。

格式:MODIFY STRUCTURE

功能:显示表设计器,可供修改打开表的结构。

说明:

1)如果没有在当前工作区中打开表,则显示“打开”对话框,允许用户从中选择一个 要修改的表。

2)执行此命令后,系统首先建立该表文件的备份文件(.BAK) ,改完存盘退出时,则 原来的记录数据均复制到修改后的表中。

3)把字段从一种数据类型更改为另一种数据类型并不完全转换字段的内容,或者根本 不转换。例如,如果将日期类型的字段转换成数值类型,则字段内容不转换。

4)如果接受对结构的更改,然后中断数据复制过程,则新表不包含原表的所有记录。

示例:

USE xsda &&打开表 xsda

MODIFY STRUCTURE &&出现表设计器,显示 xsda 表结构供用户修改

(21)

3.3.2 表的打开与关闭

大家知道,要操作表,首先就要打开表。打开表可以采用菜单方式或命令方式。

1.菜单方式

菜单方式打开表的步骤如下:

(1)从“文件”菜单中选择“打开”命令,或者单击工具栏上的“打开”按钮。

(2)在“打开”对话框中选择“文件类型”为“表(*.dbf)”,选择表所在的文件夹,

找到表文件后,双击要打开的表。

2.命令方式

(1)打开表。

格式:USE [<数据库名!>]|<表名>

功能:打开表。

说明:如果是数据库表,可以采用两种命令方式打开。一种是:USE <数据库名!><表 名>;另一种是:先用 OPEN DATABASE <数据库名>打开数据库,然后再用 USE <表名>打 开表。如果是自由表,则可以直接使用 USE <表名>打开。

示例 1:打开数据库表。

USE xsgl!xsda &&直接打开数据库表

OPEN DATABASE xsgl &&打开数据库 xsgl.dbc USE xsda &&打开数据库表 xsda.dbf

示例 2:打开自由表。

USE xsxx.dbf

(2)关闭表。

格式:USE

功能:关闭当前工作区中的表。

打开表之后,就可以对表中记录进行一系列操作。在数据库容器中选择要操作的表,选 择“数据库”菜单中的“浏览”命令或右击,在弹出的快捷菜单中选择“浏览”命令,或者 在项目管理器“数据”选项卡中选择操作的表后单击“浏览”按钮,系统均会以表格形式显 示记录内容。

注意

在“浏览”表的状态,系统自动产生一个“表”主菜单,选择菜单中的 命令就可对表进行常用操作。

当用户选择了一个菜单项时,在命令窗口中会出现一条相应的命令,这 实际上是选择菜单项操作相当于发出的 Visual FoxPro 操作表的命令。

3.3.3 记录的显示

在介绍记录显示之前,先了解记录指针的概念。大家知道,表中的数据有 3 个要素:表 文件、表中记录和记录的字段。虽然通过 USE <表文件名>命令可以打开表,通过字段名可 以引用字段,那么表中的记录如何来指定呢?Visual FoxPro 中是用记录指针来指定的。

录入记录时,系统自动产生一个记录号,“记录号”是记录在表文件中的排列序号,可

(22)

74 Visual FoxPro 程序设计(第二版)

通过菜单、鼠标或 GO、SKIP 等命令来改变。要注意的是,有些命令并不直接操作记录指 针,但运行结果却间接地影响记录指针(如 USE 打开表文件时,记录指针指向第一条记 录)。记录指针存放的是哪个记录的记录号,该记录就被称为“当前记录”。随着记录指针的 改变,当前记录也随着改变,当前记录与当前盘、当前目录、当前文件的概念类似。

记录的显示可通过菜单方式和命令方式实现。

1.菜单方式

可以通过“显示”菜单中的“浏览”和“编辑”命令显示记录。“浏览”方式一次显示 内容较多。步骤如下:

(1)在命令窗口打开一个表。

(2)从“显示”菜单中选择“浏览”命令(相当于执行 BROWSE 命令),如图 3-26

(a)所示。会得到图 3-26(b)所示的显示结果。

(a)

(b)

图 3-26 菜单方式显示记录

(3)在表打开后,从“显示”菜单中选择“编辑”命令,改变显示方式,如图 3-26

(b)所示。

2.命令方式

(1)格式。

(23)

格式 1:LIST [<范围>] [[FIELDS] <字段名表>] [FOR|WHILE <条件>]

[TO PRINT][OFF][TO FILE <文件名>]

格式 2:DISPLAY [<范围>] [[FIELDS] <字段名表>] [FOR|WHILE <条件>]

[TO PRINT] [OFF] [TO FILE <文件名>]

格式 3:BROWSE [FIELDS <字段名表>]

(2)功能。显示已打开表文件的记录内容。

(3)说明。

1)范围子句、FIELDS 子句和条件子句参见 2.1.1 中的内容。

2)有 OFF 时,不显示记录号;有 TO PRINT 时,显示内容送打印机打印;TO FILE

<文件名>是将显示的内容存入指定的文件中保存起来。

3)LIST 和 DISPLAY 命令的区别:省略<范围>时,LIST 默认值为 ALL,显示所有记 录;DISPLAY 默认值为当前记录,即显示一个记录;当显示内容较多时,DISPLAY 是分页 显示,LIST 不分页,而是连续地滚动显示。

4)BROWSE 命令是所有记录的总浏览命令,执行时打开“浏览”窗口,该命令可以添 加、删除和修改记录,可以用鼠标或光标键移动。

【例 3.1】显示表 xsda.dbf 中的记录。

CLOSE DATABASE && 关闭当前数据库和表 USE xsda &&打开表 xsda.dbf

LIST TO xsdat.txt &&显示结果保存到 xsdat.txt 文本文件中

LIST &&显示所有记录,若要打印,用 LIST TO PRINT

运行结果:

这里列出了表中的所有记录内容,但 M 型、G 型字段内容不在其内。

【例 3.2】显示表 xsda.dbf 中前 3 个记录的“姓名”和“特长”两项内容。

USE xsda

LIST NEXT 3 FIELDS xm,tc &&显示指定范围和指定字段的内容

运行结果:

记录号 XM TC 1 江涛 08 年地区三好生

2 张杰 3 许宏霞

【例 3.3】列出表 xsda.dbf 中男生的“姓名”和“专业”。

(24)

76 Visual FoxPro 程序设计(第二版)

USE xsgl.xsda

DISP FIELDS xm,zy FOR xb="男" OFF &&指定条件,不显示记录号

运行结果:

XM ZY 江涛 机械制造 张杰 机械制造 纪华益 电子设备 胡六四 电子设备 梅诗冬 电子设备 张宗新 电子设备 周为玲 电子设备 马跃 电子设备 丁家兵 电子设备 朱步云 保险 黄善忠 装潢 裴家华 食品工程

思考:若采用“DISP FIELDS xm,zy FOR xb="男" OFF”,显示什么内容?

3.3.4 记录的定位

记录的定位,就是移动记录指针使其指向特定的记录。根据定位的方式,分为绝对定位

(GO 或 GOTO)、相对定位(SKIP)、条件定位(LOCATE)和索引定位(FIND 或 SEEK)

4 种。条件定位和索引定位在后续内容中介绍,这里先介绍绝对定位命令和相对定位命令。

1.菜单方式

利用菜单定位记录指针,可按如下步骤:

(1)从“文件”菜单中选择“打开”命令,或直接单击“常用”工具栏中的“打开”按钮 打开一个表。

(2)从“显示”菜单中选择“浏览”命令,以浏览表记录。

(3)从“表”菜单中选择“转至记录”命令,将出现如图 3-27 所示的级联菜单。其菜 单命令功能如下:

图 3-27 “转到记录”级联菜单

“记录号(R)...”:被选中后,系统将显示“转到记录”对话框,如图 3-28 所示,用户可直

(25)

接输入记录号,或用微调按钮选定记录号,然后单击“确定”按钮,记录指针将移到指定记录 号的记录。记录号不能为负,如果所输入的记录号超出范围,系统将给出一个出错信息。

“定位(L)...”:即顺序查找,系统将显示“定位记录”对话框,如图 3-29 所示。用户从 中选择查找范围,并可给出查找条件,然后单击“定位”按钮,记录指针将移到指定范围内 满足条件的第一条记录。 “定位”命令相当于执行 LOCATE 命令。

图 3-28 “转到记录”对话框 图 3-29 “定位记录”对话框

2.命令方式

(1)绝对定位(GO)。绝对定位即不考虑当前记录指针的位置,直接将指针移到指定 的记录号。

格式: 功能:

GO TOP 定位到表的首记录 GO BOTTOM 定位到表的尾记录 GO RECORD n 定位到常数 n 指定的记录 GO 数值表达式 定位到表达式值指定的记录

<整数> 定位到整数值指定的记录

【例 3.4】绝对定位命令的使用。

CLEAR &&清除屏幕信息 USE xsda &&打开 xsda 表

?RECNO() &&显示记录指针所指向的当前记录号:1 GO 5 &&将记录指针定位到 5 号记录

?RECNO() &&显示当前记录号:5 GO BOTTOM &&将记录指针移到表尾

?RECNO() &&显示当前记录号:17

(2)相对定位(SKIP)。

格式:SKIP ±<数值表达式>

功能:从当前记录指针开始,向后(+)或向前(-)移动若干个记录,移动记录数由数 值表达式的值确定。使用不带参数的 SKIP 命令将使记录指针向后移动一个记录。

说明:若当前是最后一个记录,执行不带参数的 SKIP 命令时,RECNO()函数返回值比 表中记录总数大 1,EOF()函数返回“真”(.T.);若当前是第 1 个记录,并且执行 SKIP -1 命 令,则 RECNO()函数返回 1,BOF()函数返回“真”(.T.)。

【例 3.5】定位命令的使用。

CLOSE DATABASE &&关闭当前数据库和表 USE xsda &&打开 xsda 表 GO 4 &&将记录指针移至 4 DISP &&显示当前记录

(26)

78 Visual FoxPro 程序设计(第二版)

运行结果:

SKIP 5 &&将记录指针下移 5

?RECNO() &&显示当前记录号:9

11 &&将记录指针绝对定位至 11 号记录 SKIP -2 &&将记录指针上移 2

LIST NEXT 3 &&从当前记录开始,显示 3 个记录

运行结果:

GO BOTT &&将记录指针移至表尾

?RECNO() &&显示当前记录号:17 SKIP

?RECNO() &&显示记录号:18

?EOF() &&返回函数值.T.

GO TOP &&将记录指针移至表首

?RECNO() &&显示当前记录号:1 SKIP -1

?RECNO() &&显示记录号:1

?BOF() &&返回函数值.T.

从上例可以看出:绝对定位时,无论指针在何处,都由 GO 命令重新指定记录号;而相 对定位时,是相对当前记录位置向前或向后移动记录指针。

3.3.5 记录的增加

可以在表的尾部追加或在任意位置插入记录,以增加表的内容。

1.追加记录

(1)立即输入方式。当表结构刚刚创建完毕时,系统将出现提示信息“现在输入数据 记录吗?”,用户若回答“是”即可逐个字段、逐个记录向表中添加数据记录。

(2)菜单方式。若要在表的尾部添加记录,可按如下步骤:

1)从“文件”菜单中选择“打开”命令,或者直接单击“常用”工具栏的“打开”按 钮,或者在项目管理器中选择表的名称,打开一个表。

2)从“显示”菜单中选择“浏览”命令,如图 3-30 所示,这时将显示打开的表。

图 3-30 “显示”菜单的“追加方式”命令

(27)

3)从“显示”菜单中选择“追加方式”命令,如图 3-30 所示。

4)在“浏览”或“编辑”窗口中输入新的记录。

此时在表的末尾追加了一条空记录,用户即可向该空记录中填入数据。录入记录时,系 统又自动追加另一条空记录供用户录入,直至追加完成。

注意

也可执行“表”菜单中的“追加新记录”命令,其功能是在表尾追加一 条新的空记录。

(3)命令方式。

格式:APPEND [BLANK]

功能:在当前使用的表文件后面追加记录。假设该表文件已有 n 条记录,执行该命令 后,则从第 n+1 条记录开始追加;若表文件尚无记录,则从第 1 号记录开始追加。

说明:BLANK 是任选项,当无此项时,进入“编辑”窗口,出现一条空白记录的位 置,输入记录数据后,自动出现下一个新的记录位置,依次类推,最后按 Ctrl+W 组合键存 盘返回;当有此选项时,系统不进入“编辑”窗口,系统自动在打开的表末尾追加一条空白 记录,用户可以使用 BROWSE、CHANGE 或 EDIT 命令编辑新记录。

示例:打开 xsda 表,向其中追加新记录。

CLOSE DATABASE &&关闭当前数据库和表 USE xsda &&打开数据库表 xsda APPEND &&在表 xsda 中追加记录

2.插入记录

格式:INSERT [BEFORE] [BLANK]

功能:在当前表中插入一个新记录。

说明:

(1)INSERT 命令可在表指定位置插入一条新记录。无任何选项时,打开“编辑”窗 口,在表的当前记录之后添加一个新的记录,随后显示该记录以便用户录入数据。记录各字 段的输入方法同前,录入完毕按 Ctrl+W 组合键存盘退出,返回命令窗口。

(2)含 BEFORE 选项时,新记录插入在当前记录的前面,然后显示这个记录,并可对 它进行编辑。含 BLANK 选项时,不进入“编辑” 窗口,而是自动插入一条空白记录。

(3)采用 INSERT 命令插入记录时,其后的记录号重新排列,依次加 1。

INSERT 命令的使用方式一般有以下几种:

„ GO N 插入位置的定位

INSERT 在指定记录 N 后面插入

„ INSERT BEFORE 在当前记录前面插入

„ INSERT BLANK 在当前记录后面插入一个空记录 INSERT BEFORE BLANK 在当前记录前面插入一个空记录 3.3.6 记录的删除与恢复

在 Visual FoxPro 中,有两种意义的删除:一种是逻辑删除;另一种是物理删除。对记

录的删除需分两步进行:即先给欲删除的记录打上删除标记(逻辑删除),然后再将带删除

(28)

80 Visual FoxPro 程序设计(第二版)

标记的记录一次性从表中清除(物理删除)。经逻辑删除的记录用户还可以将其恢复,即去 除删除标记,但记录一旦被物理删除,将无法再进行恢复,数据将永远丢失。

1.鼠标方式

(1)逻辑删除。打开表,并进入浏览窗口。选定被删除的记录,然后用鼠标单击该记录 的左侧小方框,小方框立即以黑色填充,表示该记录已被标上删除标记,如图 3-31 所示。

删除标记

图 3-31 逻辑“删除”记录

(2)恢复删除。被标上删除标记的记录只是逻辑上被“删除”了,并未从表中真正 删除,若想恢复被逻辑删除的记录(即取消删除标记),可用鼠标单击记录左侧的小黑框 即可。

2.菜单方式

采用菜单方式删除记录的方法是:在系统菜单上选择“表”中的“切换删除标记(T)”

命令,或按 Ctrl+T 组合键,就可将当前记录标上删除标记或取消当前记录的删除标记。

若按条件删除记录,在系统菜单上选择“表”中的“删除记录(D)...”命令,屏幕将显示

“删除”对话框,如图 3-32 所示,在该对话框中输入删除记录的条件(相当于 FOR 后的逻 辑表达式)。

图 3-32 “删除”对话框

若按条件恢复记录,在系统菜单上选择“表”中的“恢复记录(E)...”命令,屏幕将 显示“恢复记录”对话框,在该对话框中输入恢复记录的条件。该对话框的操作与图 3-32 所示的“删除”对话框类似,只是标题为“恢复记录”,此处不再赘述。

若想从表中彻底删除带有删除标记的记录,可从“表”菜单中选择“彻底删除(M)”

命令,执行后将出现是否确认的提示框,如图 3-33 所示,确认后将彻底删除带有删除标记 的记录。

3.命令方式

(1)逻辑删除记录(DELETE)。

(29)

图 3-33 “彻底删除”提示框

格式:DELETE [<范围>] [FOR <条件>|WHILE <条件>]

功能:为当前表文件中指定范围内满足条件的记录加删除标记。用 LIST 显示时,“*”

号为删除标记,依然占用记录号。若省略<范围>和<条件>,则只给当前记录加删除标记。

说明:执行该命令是做逻辑删除。SET DELETED ON 命令将逻辑删除的记录“隐藏”

起来;SET DELETED OFF 命令消除“隐藏”。

(2)恢复逻辑删除的记录(RECALL)。

格式:RECALL [<范围>] [FOR|WHILE <条件>]

功能:逻辑删除记录后,如果发现删除有误,可使用该命令抹去删除标记,恢复被删除 的记录。无任何选项时,只消除当前记录的删除标记。

(3)物理删除记录(PACK)。

格式:PACK

功能:把逻辑删除的记录从磁盘上永久删除,并重排记录号。相当于“彻底删除”

菜单。

说明:

1)使用该命令时,一定要慎重,一旦物理删除则不能恢复。

2)当使用 PACK 命令时,Visual FoxPro 把所有没做删除标记的记录复制到一个临时表 中。执行完 PACK 命令后,Visual FoxPro 把原表从磁盘上删除,同时用原表名命名临时表。

如果按 Esc 键中止 PACK,就会删除临时表,原表保持不变。运行 PACK 命令时,如果磁盘空 间不够,原表也将保持不变。如果当前表有打开的索引文件,PACK 命令将重建索引文件。

(4)删除全部记录(ZAP)。

格式:ZAP

功能:将当前表文件中的所有记录删除掉,仅保留表结构。

说明:这是不可恢复的物理删除,要更为慎用。它相当于执行 DELE ALL 和 PACK。

【例 3.6】删除记录。

USE xsda &&打开表

DELETE ALL for "张"$xm &&给 xm 字段中包含“张”字的所有学生记录作删除标记 CLEAR &&清屏

LIST &&显示

RECALL ALL &&恢复所有逻辑删除的记录 WAIT &&暂停,按任意键继续 LIST &&显示

GO 8 &&定位到 8 号记录

DELE &&给当前记录(即 8 号记录)加删除标记 PACK &&物理删除

CLOSE ALL

(30)

82 Visual FoxPro 程序设计(第二版)

3.3.7 记录的修改

在实际工作中,表中的数据需要不断地更新或修改。Visual FoxPro 提供了菜单方式和命 令方式。菜单方式主要是利用“显示” 菜单的“浏览”和“编辑”命令;命令方式主要有 手工修改命令(EDIT、CHANGE、BROWSE)和自动修改命令(REPLACE),下面分别进 行介绍。

1.定制“浏览”窗口

按照不同的要求定制“浏览”窗口,可以重新安排列的位置、改变列的宽度、显示或隐 藏表格线或把“浏览”窗口分为两个窗格。

(1)重新安排列。方法是:将列标头重新拖到新的位置。或者从“表”菜单中选择

“移动字段”命令,然后用光标键移动列,最后按回车键。重新安排列就是按照需要显示的 顺序,对各列重新排列,但这并不影响表的实际结构。

(2)拆分“浏览”窗口。

1)拆分“浏览”窗口。拆分“浏览”窗口就是将浏览窗口分为两个窗口。方法是:将 鼠标指针指向窗口左下角黑色的拆分条,向右方拖动拆分条,将“浏览”窗口分成两个窗 口,如图 3-34 所示。

拆分条

图 3-34 拆分“浏览”窗口

2)调整拆分窗格的大小。将鼠标指针指向拆分条,拖动拆分条,可改变窗格大小。或 者从“表”菜单中选择“调整分区大小”命令,然后用光标键移动拆分条。

注意

默认情况下,“浏览”窗口的两个窗格是相互链接的,即两个窗格中显示 对应的内容。

取消“表”菜单中“链接分区”命令的选中状态,可以使它们的显示相 对独立。这时,滚动某一个窗格时,不会影响到另一个窗格中的显示。

无论显示时链接与否,反映的依然是同一张表的内容。

(3)改变字段显示宽度。在列标头中,将鼠标指针指向两个字段之间的结合点,拖动

鼠标调整列的宽度。或者先选定一个字段,然后从“表”菜单中选择“调整字段大小”命

令,再用左右光标键移动列宽,最后按回车键。注:字段列宽的调整不会影响到表结构中的

字段宽度。

(31)

(4)打开或关闭网格线。从“显示”菜单中选择或取消“网格线”命令,可以显示或 隐藏“浏览”窗口中各记录之间的网格线。

2.菜单方式修改记录

用菜单方式对记录进行修改,可按如下步骤:

(1)打开表:从“文件”菜单中选择“打开”命令,或者单击“常用”工具栏中的

“打开”按钮。

(2)从“显示”菜单中选择“浏览”或“编辑”命令,打开“浏览”或“编辑”窗口。

(3)在“浏览”或“编辑”窗口中修改数据记录。

3.命令方式修改记录

(1)浏览命令 BROWSE。

格式:BROWSE [FIELDS <字段名表>][FOR|WHILE <条件>][LOCK <表达式>]

[FREEZE <字段名>] [TITLE <标题字符串>][LAST]

功能:打开浏览窗口,以全屏幕横向格式浏览、编辑记录内容。

说明:

1)这是一个十分有效的命令,记录的显示格式与 LIST 命令的显示格式相似,只是每个 记录数据都可以修改,修改后按 Ctrl+W 组合键存盘返回。

2)执行此命令后,当前记录反白显示,可用鼠标或光标键前后、左右进行移动。

3)命令格式中各选择项的含义如下:

FIELDS <字段名表>:只显示 FIELDS 短语中指定的字段,这些字段以<字段名表>指定 的顺序显示。如果忽略 FIELDS 子句,表中的所有字段按其在表结构中出现的顺序显示。

字段名表中的字段可以加一些描述符,如“<字段名>:H="字符串"”表示以字符串来代 替字段名在浏览窗口中显示,但并不改变表结构中的字段名。

FOR|WHILE <条件>:指定一个条件,确定只有<条件>为“真”的记录才显示于浏览窗 口。包含 FOR 子句时,使记录指针移向符合该条件的第 1 条记录。

LOCK <表达式>:水平方向翻滚屏幕时,定义屏幕左边不参加滚动的字段数。

FREEZE <字段名>:定义一个唯一允许修改的字段,其他字段只能显示不能修改。

TITLE <标题字符串>:以<标题字符串>指定的标题改写显示于浏览窗口标题栏中的默 认表名或别名;否则,要浏览的表的名称或别名显示于标题栏中。

LAST:以最后一次的配置浏览。

【例 3.7】BROWSE 的使用。

USE xsda &&打开 xsda 表

BROWSE LOCK 1 FREE xm FIELDS xh:H="学号",xm:H="姓名",xb:H="性别",;

csrq:H="出生日期" FOR xb="男" TITLE "学生档案表"

运行结果如图 3-35 所示。

(2)EDIT 和 CHANGE 命令。

格式:EDIT [<范围>] [FIELDS <字段名表>] [FOR |WHILE <条件>]

CHANGE [<范围>] [FIELDS <字段名表>][FOR |WHILE <条件>]

功能:这两条命令的格式、功能相同,以竖直编辑窗口显示、编辑与修改表中的记录。

说明:执行命令后,系统打开“编辑”窗口,以竖直格式显示各个字段的内容,此时,

參考文獻

相關文件

线性拟合与二次拟合 数据拟合的线性模型 一次多项式拟合公式..

超定方程组QR分解算法 数据拟合确定常微分方程..

[r]

Miscellaneous Goods &amp; Services (+6.82%); Health (+5.78%); Food &amp; Non-Alcoholic Beverages (+5.09%); Recreation &amp; Culture (+4.68%) and Transport (+4.56%) recorded

Department of Education (1995) A guide to safe practice in art &amp; design.. (1990) Artists handbook 2 health &amp; safety: making

上述定理, 即 Dini, Lipschitz, Dirichlet 判别法, 给出函数能展开成 Fourier 级数的充分条件... 下面罗列几个例子,

[r]

[r]