第二章:创建表和索引

表是处理数据和建立关系型数据库及应用程序的基本单元。涉及到表的操作包括处理当前存储于表中的信息、定制已有的表、或者创建自定义的表来存储数据。可以使用索引对数据进行排序及加快处理。

本章讨论如何处理和修改已有的表,以及如何用 Visual FoxPro 创建新表,包括利用“表向导”及直接使用“表设计器”这两种方法。有关从其他应用程序中导入表信息的详细内容,请参阅第九章“导入和导出数据”。有关将表加入到数据库后所具有的附加属性,请参阅第三章“将表加入数据库”。有关索引的详细内容,请参阅《程序员指南》中的第七章“处理表”

本章要点:

创建新表

借助于“表向导”或使用“表设计器”,您可以创建新表,并按需要为表设置字段。

设置新表时,请注意以下四点:

选择数据类型

表中的每一个字段都有特定的数据类型。可以将字段的数据类型设置为下表中的任意一种。

数据类型 说明 示例
字符型 字母、数字型文本 用户的地址
货币型 货币单位 价格
数值型 整数或小数 订货数量
浮点型 同“数值型”
日期型 年,月,日 订货日期
日期时间型 年,月,日,时,分,秒 员工上班的时间
双精度型 双精度数值 实验所要求的高精度数据
整型 不带小数点的数值 订单的行数
逻辑型 真或假 订单是否已填完
备注型 不定长的字母数字文本 电话记录中有关电话的说明
通用型 OLE(对象链接与嵌入) Microsoft Excel 电子表格
字符型(二进制) 同前述“字符型”相同,但是当代码页更改时字符值不变 保存在表中的用户密码,用于不同国家/地区
备注型(二进制) 同前述“备注型”相同,但是当代码页更改时备注不变 用于不同国家/地区的登录脚本

使用“表向导”

利用“表向导”,您可以随时创建新表。向导会提出一系列的问题,并根据您的回答建立一个表。

若要利用向导创建表

  1. 在“项目管理器”中选择“数据”选项卡,然后选择“自由表”。

  2. 选择“新建”。

  3. 选择“表向导”按钮。

  4. 按照向导屏幕的指示进行操作。

也可以用其他方法使用“表向导”,例如,从“文件”菜单中选择“新建”,选择“表”,然后选择“向导”选项。

如果是基于数据库的表,您可以使用数据库表中的样式、字段映射或主关键字,也可以建立或使用数据库表中的关系。

启动“表设计器”

如果不想用“表向导”来创建表,您可以使用“表设计器”。可以在“项目管理器”的“数据”选项卡中完成;也可以从“文件”菜单中选择“新建”,选择“表”,然后选择“新建文件”。

在“表设计器”中启动新表

如果想将新建的表添加到数据库中,可以在建表之前先将数据库打开。这样,新表会自动成为数据库的一部分。也可以在以后添加新表。有关数据库表的详细内容,请参阅第三章“将表加入数据库”

若要创建新表

  1. 在“项目管理器”中,选择“数据库”下的“表”,或者选择“自由表”。

  2. 选择“新建”,然后选择“新建表”。

  3. 在“创建”对话框中,输入表的名称并选择“保存”。

  4. 选择“表设计器”的“字段”选项卡,在“字段名”区域键入第一个字段的名称。

  5. 在“类型”区域中,选择列表中的某一字段类型。

  6. 在“宽度”列中,设置以字符为单位的列宽。

  7. 如果“类型”是“数值型”或“浮点型”,请设置“小数位数”框中的小数点位数。

  8. 如果希望为字段添加索引,请在“索引”列中选择一种排序方式。

  9. 如果想让字段接受 null 值,选中“NULL”。

此时,可以选择是立即开始输入记录,还是在以后准备好所有记录后再打开表进行输入。

若要在表中添加记录

  1. 在“项目管理器”中选择表的名称。

  2. 选择“浏览”。

  3. 从“显示”菜单中选择“追加方式”。

  4. 在“浏览”窗口中输入新的记录。

    如果愿意在一条分隔线上查看每个字段,可以从“显示”菜单中选择“编辑”来切换到“编辑”方式。

存储和查看表中的信息

表以行和列的格式存储数据,类似于电子表格。每一行代表一个记录,每一列代表记录中的字段。

表中的行和列

可以在 Visual FoxPro 中创建两种表:数据库表和自由表。数据库表是数据库的一部分,而自由表则独立存在于任何数据库之外。

查看表的内容

查看表内容的最快方法是使用“浏览”窗口。“浏览”窗口中显示的内容是由一系列可以滚动的行和列组成的。要想对一些典型的表有所了解,可以浏览一下 Visual Studio …\Samples\Vfp98\Data 子目录下的示例表。

若要浏览一个表

  1. 从“文件”菜单中选择“打开”,选定想要查看的表名。

  2. 从“显示”菜单中选择“浏览”。

也可以从“项目管理器”中选择表的名称,然后选择“浏览”按钮。

例如打开 Visual Studio …\Samples\Vfp98\Data 下的 Customer 表。

“浏览”窗口中的表

为方便输入,可以把“浏览”窗口设置为“编辑”方式。在“编辑”方式下,列名显示在窗口的左边。

若要将“浏览”窗口改为编辑方式

在任何一种方式下,都可以滚动记录,查找指定的记录,以及直接修改表的内容。

在表中移动

使用滚动条可以来回移动表,显示表中不同的字段和记录。也可以用箭头键和 TAB 键进行移动。

若要查看不同的记录

  1. 从“表”菜单中选择“转到记录”。

  2. 在子菜单中选择“第一个”、“最后一个”、“下一个”、“上一个”或“记录号”。

  3. 如果选择了“记录号”,请在“转到记录”对话框中输入待查看记录的编号,然后选择“确定”。

编辑字段

若要改变“字符型”字段、“数值型”字段、“逻辑型”字段、“日期型”字段或“日期时间型”字段中的信息,可以把光标设在字段中并编辑信息,或者选定整个字段并键入新的信息。

若要编辑“备注型”字段,可在“浏览”窗口中双击该字段或按下 CTRL+PGDN。这时会打开一个“编辑”窗口,其中显示了“备注型”字段的内容。

“通用型”字段包含一个嵌入或链接的 OLE 对象。通过双击“浏览”窗口中的“通用型”字段,可以编辑这个对象,您可以直接编辑文档(如 Microsoft Word 文档或 Microsoft Excel 工作表),也可以双击对象打开其父类应用程序(如 Microsoft 画笔对象)。

在表中添加新记录

若想在表中快速加入新记录,可以将“浏览”和“编辑”窗口设置为“追加方式”。在“追加方式”中,文件底部显示了一组空字段,您可以在其中填入来建立新记录。

若要添加一条新的空记录

在新记录中填充字段,用 TAB 键可以在字段间进行切换。每完成一条记录,在文件的底端就会又出现一条待输入的新记录。

“浏览”窗口的“追加方式”

删除记录

在 Visual FoxPro 中,删除表中的记录共有两个步骤。首先是单击每个要删除记录左边的小方框,标记要删除的记录。

标有删除标记的记录

标记记录并不等于删除记录。要想真正地删除记录,应从“表”菜单中选择“彻底删除”。这个过程将删除所有标记过的记录,并重新构造表中余下的记录。删除做过删除标记的记录时会将表关掉,因此若要继续工作,必须重新打开该表。

若要从表中删除记录

  1. 单击记录左边的小方框,标记待删除的记录。

  2. 从“表”菜单中选择“彻底删除”。

  3. 当出现提示,问您是否想从表中移去已删除的记录,选择“是”。

通过在“删除”对话框中设置条件,可以有选择地删除一组记录。从“表”菜单中选择“删除记录”,然后输入删除条件。

“删除”对话框

选择“作用范围”后面的列表确定删除记录的范围。

如果待删除记录能够描述出来,您可以建立一个描述表达式。选择“For”后面的对话按钮,激活“表达式生成器”,然后即可建立表达式。例如,使用表达式 FOR Country = '英国' 可选定有关英国的记录,并为它们加上删除标记。

定制“浏览”窗口

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

重新安排列

可以重新安排“浏览”窗口中的列,使它们按照需要的顺序进行排列,但这并不影响表的实际结构。

若要在“浏览”窗口中重新安排列

改变列的宽度

可以在“浏览”窗口中改变列的宽度。这种尺寸调整不会影响到字段的长度或表的结构。

如果您想改变字段的实际长度,应使用“表设计器”修改表的结构(参阅本章稍后的“修改表”部分)。

若要改变列宽

打开或关闭网格线

也可以隐藏“浏览”窗口中的网格线。

若要显示或隐藏网格线

拆分“浏览”窗口

通过拆分“浏览”窗口,可以很方便地查看同一表中的两个不同区域,或者同时在“浏览”和“编辑”方式下查看同一记录。

拆分“浏览”窗口

若要拆分“浏览”窗口

  1. 将鼠标指针指向窗口左下角的拆分条。

  2. 向右方拖动拆分条,将“浏览”窗口分成两个窗格。

    - 或者 -

  3. 从“表”菜单中选择“调整分区大小”。

  4. 用左右箭头键移动拆分条。

  5. ENTER 键。

若要调整拆分窗格的大小

  1. 将指针指向拆分条。

  2. 向左或向右拖动拆分条,改变窗格的相对大小。

    - 或者 -

  3. 从“表”菜单中选择“调整分区大小”。

  4. 按左箭头或右箭头键移动拆分条。

  5. ENTER 键。

默认情况下,“浏览”窗口的两个窗格是相互链接的;即在一个窗格中选择了不同的记录,这种选择会反映到另一个窗格中。取消“表”菜单中“链接分区”的选中状态,可以中断两个窗格之间的联系,使它们的功能相对独立。这时,滚动某一个窗格时,不会影响到另一个窗格中的显示内容。

修改表

利用“表设计器”,可以改变已有表的结构,如增加或删除字段、设置字段的数据类型及宽度、查看表的内容以及设置索引来排序表的内容。

如果正在进行修改的表是数据库的一部分,那么还可以得到额外的与数据库有关的字段和表的属性。这些属性的使用将来在第三章“将表加入数据库”中进行介绍。

若要修改表

表的结构将显示在“表设计器”中。

“表设计器”中显示了表的结构

若要在表中增加字段

  1. 在“表设计器”中选择“插入”。

  2. 在“字段名”列中,键入新的字段名。

  3. 在“类型”列中,选择字段的数据类型。

  4. 在“宽度”列中,设置或输入字段宽度。

  5. 如果使用的数据类型为“数值型”或“浮点型”,还需要设置”小数位数”列的小数位数。

  6. 如果想让表接受“null”值,请选中“NULL”列。

  7. 选择“确定”。

  8. 选择“是”,改变表的结构。

若要删除表中的字段

定制表

可以在表中设置一个过滤器来定制自己的表,有选择地显示某些记录。还可以通过设置字段过滤器,对表中的某些字段的访问进行限制,这样可以有选择地显示需要的字段。

筛选表

如果只想查看某一类型的记录,可以通过设置过滤器对“浏览”窗口中显示的记录进行限制。在某些情况下,例如只想查看销售额高于某一数值的商品,或者在某段时间内雇用的职员,筛选就显得非常有用。

若要设置一个过滤器,可从“表”菜单中选择“属性”,进入“工作区属性”对话框。

“工作区属性”对话框

若要在表中建立过滤器

  1. 浏览要筛选的表。

  2. 从“表”菜单中选择“属性”。

  3. 在“工作区属性”对话框中,直接在“数据过滤器”框内输入筛选表达式。

    - 或者 -

现在浏览表时,则只显示经筛选表达式筛选过的记录。

以 Visual Studio …\Samples\Vfp98\Data 目录下的 Customer 表为例,在“工作区属性”对话框的“数据过滤器”框中输入如下表达式,即可了解到居住在美国的客户情况:

Customer.Country = "USA"

筛选表的结果

限制对字段的访问

在表单中浏览或使用表时,若想只显示某些字段,可以设置字段筛选来限制对某些字段的访问。选出要显示的字段后,剩下的字段就不可访问了。

若要建立字段筛选

  1. 从“表”菜单中选择“属性”。

  2. 在“工作区属性”对话框的“允许访问”框内,选中“字段筛选指定的字段”,然后选择“字段筛选”。

  3. 在“字段选择器”对话框中,将所需字段移入“选定字段”栏,然后选择“确定”。

    字段筛选及其对“浏览”窗口的影响

浏览表时,只有在“字段筛选”中选定的字段被显示出来。

有关定制和处理表的详细内容,请参阅《程序员指南》的第七章“处理表”

用索引对数据排序

对于已经建好的表,可以利用索引对其中的数据进行排序,以便加速检索数据的速度。可以用索引快速显示、查询或者打印记录。还可以选择记录、控制重复字段值的输入并支持表间的关系操作。

可使用索引加速要排序记录或搜索记录的显示或打印速度。索引对于数据库内表之间创建关系的创建也很重要。

Visual FoxPro 中的索引和书中的索引类似。书中的索引是一份页码的列表,指向书中的页号。表索引是一个记录号的列表,指向待处理的记录,并确定了记录的处理顺序。

表索引存储了一组记录指针

以查看 Customer 表中的记录为例,您可以按字母顺序列出公司的名称,按邮政编码的顺序准备邮寄清单,或者组织记录来加速查找过程。索引并不改变表中所存储数据的顺序,它只改变了 Visual FoxPro 读取每条记录的顺序。

可以为一个表建立多个索引,每一索引代表一种处理记录的顺序。索引保存在一个结构复合索引文件中,在使用表时,该文件被打开并更新。复合结构索引文件名与相关的表同名,并具有 .cdx 扩展名。

由于建立索引的方法很简单,您或许想为每个字段建立一个索引。但是,不常用的索引往往会降低程序的执行速度。相比之下,用其他类型的索引文件来保存不常使用的索引要更好一些。有关其他类型索引文件的详细内容,请参阅《程序员指南》的第七章“处理表”

建立索引

若有现存表,可用字段或表达式创建索引。若要有效地使用索引,可根据经常使用的字段用过滤器为表、查询、视图或报表创建索引。如果使用了对过滤器或查询无用的字段作为索引,例如一个街道的地址,可能降低过滤器的执行速度。

若要建立索引

  1. 在“项目管理器”中选择待建索引的表,然后选择“修改”。

  2. 在“表设计器”中,选择“索引”选项卡。

    “表设计器”中的“索引”选项卡

  3. 在“索引名”框中,键入索引名。

  4. 从“类型”列表中,选定索引类型。

    有关索引类型的详细内容,请参阅后面的“选择索引类型”部分。

  5. 在“表达式”框中,键入作为记录排序依据的字段名。

    - 或者 -

    通过选择表达式框后面的对话按钮,显示“表达式生成器”来建立表达式。

    有关在索引表达式中加入多个字段的详细内容,请参阅稍后的“用多个字段进行排序”部分。

  6. 若想有选择地输出记录,可在“筛选”框中输入筛选表达式,或者选择该框后面的按钮来建立表达式。

    有关使用筛选索引的详细内容,请参阅稍后的“筛选记录”部分。

  7. 选择“确定”。

建好表的索引后,便可以用它来为记录排序。

若要用索引对记录排序

  1. 在“项目管理器”中选择已建好索引的表。

  2. 选择“浏览”。

  3. 从“表”菜单中选择“属性”。

  4. 在“索引顺序”框中,选择要用的索引。

  5. 选择“确定”。

显示在“浏览”窗口中的表将按照索引指定的顺序排列记录。选定索引后,通过运行查询或报表,还可对它们的输出结果进行排序。

选择索引类型

可以选择四种索引类型之一:

主索引可确保字段中输入值的唯一性并决定了处理记录的顺序。可以为数据库中的每一个表建立一个主索引。如果某个表已经有了一个主索引,可以继续添加候选索引。

候选索引象主索引一样要求字段值的唯一性并决定了处理记录的顺序。在数据库表和自由表中均可为每个表建立多个候选索引。

普通索引也可以决定记录的处理顺序,但是允许字段中出现重复值。在一个表中可以加入多个普通索引。

为了保持同早期版本的兼容性,还可以建立一个唯一索引,以指定字段的首次出现值为基础,选定一组记录,并对记录进行排序。如果想用这种方法选定字段,也许建立一个查询或视图会更好些。有关查询和视图的详细内容,请参阅第四章“检索数据”或第五章“使用视图更新数据”

用多个字段进行排序

为了提高对多个字段进行筛选的查询或视图的速度,可以在索引表达式中指定多个字段对记录排序。计算字段的顺序与它们在表达式中出现的顺序相同。如果用多个“数值型”字段建立一个索引表达式,索引将按照字段的和,而不是字段本身对记录进行排序。

若要用多个字段对记录排序

  1. 在“项目管理器”中选定待添加索引的表,然后选择“修改”。

  2. 在“索引”选项卡中,输入索引名和索引类型。

  3. 在“表达式”框中输入表达式,其中列出要作为排序依据的字段。

    例如,如果要按照国家/地区、邮政编码、公司的顺序对记录进行排序,可以用 + 号建立“字符型”字段的索引表达式:

    customers.country + Customer.postalcode + Customer.company
    

    注意:列表中的第一项应该是变化最小的字段。

  4. 选择“确定”。

如果想用不同数据类型的字段作为索引,可以在非“字符型”字段前加上 STR( ),将它转换成“字符型”字段。例如,先按 Maximum Order Amount 字段排序,然后按公司名排序。在这个表达式中,maxordamt 是一种货币型字段,公司名是一个“字符型”字段。

STR(Customer.maxordamt,20,4) + Customer.company

筛选记录

通过添加筛选表达式,可以控制哪些记录可包含在索引中。

若要筛选记录

  1. 在“项目管理器”中选定待添加索引的表,然后选择“修改”。

  2. 在“索引”选项卡中,创建或选择一个索引。

  3. 在“筛选”框中,输入一个筛选表达式。

    例如,可以建立一个对加拿大客户记录的筛选表达式:

    Customer.country = "Canada"
    
  4. 选择“确定”。

使用索引

通过建立和使用索引,可以提高完成某些重复性任务的工作效率,例如对表中的记录排序,以及建立表之间的关系等。根据所建索引类型的不同,可以完成不同的任务:

若要
排序记录,以便提高显示、查询或打印的速度 使用普通索引候选索引主索引
在字段中控制重复值的输入并对记录排序 对数据库表使用主索引候选索引,对自由表使用候选索引

对记录进行排序

可以用字段名或其他索引表达式对记录排序。索引将对表达式进行计算,以此确定记录出现的顺序,然后存储一个按此顺序处理表中记录的指针列表。

若要建立一个索引来对记录排序

  1. 在“项目管理器”中选定待添加索引的表,然后选择“修改”。

  2. 在“索引”选项卡中,输入索引名和索引类型。

  3. 在“表达式”一栏中,键入作为排序依据的字段名。

    - 或者 -

    键入一个作为排序依据的表达式,或通过选择该方框后面的对话按钮,用“表达式生成器”建立一个表达式。

  4. 若要以降序显示记录,可选择索引名左侧的箭头按钮。

    按钮上的箭头方向向上时按升序排序,向下时则按降序排序。

  5. 选择“确定”。

控制字段中重复值的输入

您也许想控制字段重复值的输入。例如:每个客户在“Customer”表中的“Cust_ID”字段只能有一个唯一的值。

索引可以强制在字段中输入唯一的值

用该字段作为关键字段可以唯一确定每一条记录。如果该表为某数据库的一部分,可以采用主索引或是候选索引。如果该表是自由表,并且已经有了一个主索引,您就必须采用候选索引。

若要创建字段值必须唯一的索引

  1. 在“项目管理器”中选择待加入索引的表,然后选择“修改”。

  2. 在“索引”选项卡中建立一个索引。

  3. 在“类型”一栏,选择“主索引”或“候选索引”。

  4. 选择“确定”。