全国计算机VFP二级考试备考资料

更新时间:2024-05-22 06:19:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

目 录

开篇 ................................................................................................... 错误!未定义书签。 第一章 基本概念 ........................................................................... 错误!未定义书签。 第二章 走进VFP ............................................................................................................ 1 第三章 VFP的数据形式、类型及运算 ........................................................................ 6 第四章 数据库及其操作 ............................................................................................... 17 第五章 SQL语言 .......................................................................................................... 32 第六章 查询与视图 ....................................................................................................... 41 第七章 程序设计基础 ................................................................................................... 44 第八章 表单设计与应用 ............................................................................................... 54 第九章 菜单设计与应用 ............................................................................................... 70 第十章 报表设计 ........................................................................................................... 73 第十一章 数据库应用系统的开发 ............................................................................... 76

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

第一章 数据库系统基础知识 1.1 数据库系统概述

1.1 数据库基础知识 1数据与数据处理

数据是指存储在某一种媒体上能够识别的物理符号。数据处理的中心问题是数据管理。

2计算机数据管理 (l)人工管理。 (2)文件系统。 (3)数据库系统。

(4)分布式数据库系统。 (5)面向对象数据库系统。 3数据库管理系统

为数据库的建立、使用和维护而配置的软件称为数据库管理系统DBMS (DataBase Management System)。 2 数据库系统

1有关数据库的概念 (1)数据库(DataBase):存储在计算机存储设备上、结构化的相关数据的集合。

(2)数据库应用系统(DBAS ):是由系统开发人员利用数据库系统资源开发出来的,面向某一类实际应用的应用软件系统。 (3)数据库管理系统(DBMS):对数据实行专门管理,提供安全性和完整性等统一机制,可以对数据库的建立、使用和维护进行管理。

(4)数据库系统(DBS):是指引进数据库技术后的计算机系统,实现有组织地、动态地存储大量相关数据,提供数据处理和信息资源共享的便利手段。数据库系统由硬件系统、数据库、数据库管理系统及相关软件、数据库管理员和用户等部分组成。

2数据库系统的特点

(l)实现数据共享,减少数据冗余。 (2)采用特定的数据模型。 (3)具有较高的数据独立性。 (4)具有统一的数据控制功能。 3 数据模型

1实体的描述 (1)实体。

(2)实体的属性。 (3)实体集和实体型。

第1页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

2实体间联系及联系的种类 (1)一对一联系。 (2)一对多联系。 (3)多对多联系。 3数据模型简介

为了反映事物本身及事物之间的各种联系,数据库中的数据必须有一定的结构,这种结构用数据模型来表示,通常有以下3种。 (1)层次数据模型。 (2)网状数据模型。 (3)关系数据模型。 小提示:

数据库DB、数据库系统DBS和数据库管理系统DBMS之间的关系是DBS包括DB和DBMS。 1.2 关系模型

关系模型的用户界面非常简单,一个关系的逻辑结构就是一张二维表。这种用二维表的形式表示实体和实体间联系的数据模型称为关系数据模型。 1关系术语

(l)关系:一个关系就是一张二维表,每个关系有一个关系名。在Visual FoxPro中一个关系存储为一个文件,扩展名为DBF,称为“表”。 对关系的描述称为关系模式,一个关系模式对应一个关系的结构,格式为: 关系名(属性名1,属性名2,?,属性名n)

(2)元组:在一个二维表中,水平方向的行称为元组,每一行为一个元组。 (3)属性:将二维表中垂直方向的列称为属性,每一列都有一个属性名。 (4)域:属性的取值范围,即不同元组对同一个属性的取值所限定的范围。 (5)关键字:属性或属性的组合,其值能够唯一地标识一个元组。在Visual FoxPro中,主关键字和候选关键字就起唯一标志一个元组的作用。 (6)外部关键字:如果表中一个字段不是本表的主关键字或候选关键字,而是另一个表的主关键字或候选关键字,那么这个字段(属性)就称为外部关键字。 2关系的特点

(1)关系必须规范化。

(2)在同一个关系中不能出现同名属性,Visual FoxPro中表示为字段名的不同。

(3)关系中不允许有完全相同的元组,即冗余。 (4)在一个关系中元组的次序无关紧要。 (5)在一个关系中列的次序无关紧要。 5 关系运算

对关系数据库进行查询时,需要找到用户感兴趣的数据,这就需要对关系进行一定的关系运算,关系的基本运算有两类:传统的集合运算和专门的关系运算。

第2页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

1传统的集合运算

(1)并:两个相同结构关系的并是由属于这两个关系的全部元组组成的集合。

(2)差:两个相同结构关系的差是由属于前一个关系的元组而不属于后一个关系的元组组成的集合。例如,关系R和S的差结果是由属于R但不属于S的元组组成的集合。 (3)交:两个相同结构关系的交是由属于这两个关系所共有的元组组成的集合。

2专门的关系运算

(1)选择:从关系中找出满足给定条件的元组的操作。 (2)投影:从关系模式中指定若干个属性组成新的关系:

(3)连接:关系的横向结合,将两个关系模式拼接成一个更宽的关系模式。 (4)自然连接:在连接运算中,按照字段值对应相等为条件进行的连接操作称为等值连接。自然连接是去掉重复属性的等值连接。 小提示:

选择和投影运算的操作对象只是一个表,相当于对一个二维表进行切割。连接运算则需要把两个表作为操作对象。如果两个表以上进行连接,应当两两进行连接。

1.3 数据库设计基础 6 数据库设计步骤 1设计原则

(l)关系数据库的设计应遵从概念单一化“一事一地”的原则。 (2)避免在表之间出现重复字段。

(3)表中的字段必须是原始数据和基本数据元素。 (4)用外部关键字保证有关联的表之间的联系。 2设计步骤

利用Visual FoxPro来开发数据库应用系统,可以按照以下步骤来设计。 (1)需求分析。

(2)确定需求表C (3)确定需求字段。 (4)确定联系。 (5)设计精确

1.4 Visual FoxPro系统概述 7 Visual FoxPro的特点

(l)增强项目与数据库管理。

(2)提高应用程序开发的生产率。 (3)互操作性与支持Internet。 (4)充分利用已有数据

第3页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

第二章 走进VFP

一、VFP简介 1、VFP的认识

VFP是一个适合小型数据库管理的数据库管理系统。

2、VFP之前统帅小型数据库管理领域的数据库管理系统是dBASE,其主要版本:dBASE II→dBASE III→dBASE III Plus→dBASE IV 3、VFP的进化轨迹

FoxBase 2.0/2.1→FoxPro 2.0→FoxPro 2.5→FoxPro 2.6→Visual FoxPro 3.0→Visual FoxPro 5.0→Visual FoxPro 6.0 我们学习的是Visual FoxPro 6.0。

4、Visual FoxPro(包括3.0、5.0、6.0版本)的基本特点: ·以可视化方式开发软件界面。 ·采用面向对象的软件开发技术。

二、接近VFP

1、VFP的安装(略) 2、VFP的启动

3、VFP基本界面的认识 ·菜单栏 ·工具栏 ·状态栏

·主屏幕:显示交互操作结果。 ·命令窗口

作用:供输入操作命令的场所。一个命令输完后按下回车键,VFP才会执行相应的命令。

命令窗口的关闭与显示

快捷键操作—Ctrl+F4:关闭;Ctrl+F2:显示。 4、VFP的基本命令

·clear:清除主屏幕上的显示。

·?:在主屏幕当前行的下一行显示其后要显示的内容。 ·??:在主屏幕当前行内容之后显示其后要显示的内容。 说明:已经使用过的命令可以再用。 5、VFP的退出

鼠标操作:见演示。 键盘操作:

·快捷键:Alt+F4。 ·退出命令:QUIT。

三、设置VFP

第4页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

1、设置VFP是指对VFP的工作环境进行一些设置,如日期的格式等。这些设置可以通过相应命令进行,也可在“选项”对话框中进行。 2、“选项”对话框设置VFP。 1)状态栏的设置 2)日期格式设置

3)默认目录(工作目录)设置 ·了解默认目录(工作目录) ? sys(5)+sys(2003)

sys(5)—默认目录中的盘;sys(2003)—默认目录中的路径。 ·设置

·意义(do form gzml.scx) 4)使设置长期有效

四、学习VFP

1、VFP提供的帮助系统是我们学习VFP的一本很好教科书,建议同学们经常使用。

2、使用帮助系统而不要依赖帮助系统,这样不利于我们通过二级考试。

第5页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

第三章 VFP的数据形式、类型及运算

一、常量

1、常量是表示一个确定值的数据。常量有数值型、货币型、字符型、逻辑型、日期型、日期时间型6种。 2、数值型常量

·数值型常量表示的是一个具体的数,因此,数值型常量也称为常数。 ·数值型常量的书写方法: (1)日常表示法

如12、+56、-64.8等。 (2)科学表示法

1.6E12表示1.6×1012; 1.6E-12表示1.6×10-12; -1.6E12表示-1.6×1012; -1.6E-12表示-1.6×10-12。 3、货币型常量

·货币型常量用来表示一个具体的货币值。货币型常量的小数位数采用4位。 ·货币型常量的书写方法: 如$12,$12.68,-$12.68等。 4、字符型常量

·字符型常量用来表示一串确定的字符,因此,字符型常量也称为字符串。 ·字符型常量的书写方法:

'abcd'、\、[abcd]均表示字符串abcd。 ·说明

(1)表示字符型常量前后的'、\或[]称为字符型常量的定界符,它表示字符串的开始和结束,不是字符串的组成内容。字符串的前后定界符必须一致,如'abcd\等是错误的。

(2)当字符串中包含'、\或[]时,必须使用其它的定界符,如字符串ab'cd应表示为\或[ab'cd]。

(3)字符型数据中的字母大小写是区分的,比如\和\是不同的两个字符串。顺便说一下,命令中的字母大小写是不区分的,如Clear、cleAr、CLEAR等均表示清除主屏幕显示命令。 (4)两个单引号('')、两个双引号(\)、一对中括号([])均表示没有组成内容的字符串,这样的字符串称为空串。

(5)组成字符串的内容也可以有空格,如\ cd\、\ bc d\、\ \等都是正确的字符串。 (6)注意定界符应是英文符号,不能是中文符号。顺便说一下中英文符号问题:

第6页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

除了字符串中可以随意使用符号以外,其它场合均只能使用英文符号! 5、逻辑型常量

·逻辑型常量用来表示一确定的逻辑值。逻辑值只有真值和假值两个。 ·逻辑型常量的书写方法: 真值:.T. 、.t. 、.Y. 、.y. ; 假值:.F. 、.f. 、.N. 、.n. 。 6、日期型常量

·日期型常量用来表示一确定的日期。 ·日期型常量的书写方法: 2004年7月14日可表示为:{^2004-7-14}、{^2004.7.14}、{^2004/7/14}、{^2004 7 14}。

7、日期时间型常量

·日期时间型常量用来表示一确定的日期和时间。 ·日期时间型常量的书写方法: 格式:{^日期,时间}

其中,日期的书写格式同日期型常量,时间的书写格式有:8:10:30、18:15:25、8:10:30A、8:10:30AM、8:10:30P、8:10:30PM。

上机:在?或??命令后书写各种类型、形式的常量,以检测常量的表示是否正确。在?或??命令后,若想一次显示出几项的值,使用逗号进行分隔。

二、变量

1、变量是表示可变值的数据。变量用一名称来表示,该名称称为变量名。变量名一般以字母或汉字开始,其后可以是字母、汉字、数字及某些符号(如下划线)。

思考:a,aa,b12,c_1,a1B2,2d4,同学们,”同学们”。 2、变量的值可以通过赋值命令获得: a=12 表示为变量a赋一个值12;

store 34.2 to a,b,c 表示将值34.2分别赋给变量a,b,c。 3、赋值命令的格式: 变量=表达式

store 表达式 to 变量1,变量2,?? 4、变量的类型由其值的类型决定。 5、变量的另一种使用形式——数组

·普通变量是一个变量对应一个值,而数组变量却一个变量对应多个值。数组变量中的每一个值称为数组元素。

·数组变量的取名同普通变量,数组元素用数组变量名加下标的方法来表示,如a(1)、a(2)、b(1,1)、b(1,2)等。也就是说,数组用下标来区分其元素。

第7页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

·如果一个数组,其元素只用一个下标,则该数组称为一维数组;如果一个数组,其元素使用两个下标,则该数组称为二维数组。

·数组变量的使用与普通变量的使用有所不同:数组变量必须先定义,然后才能使用。

·定义一维数组变量:

dimension/declare 数组名(下标上限)

下标上限指下标的最大值。下标下限指下标的最小取值。VFP中,下标的下限规定为1,因此无须在定义数组时指定。 ·定义二维数组变量:

dimension/declare 数组名(第一个下标上限,第二个下标上限) ·数组变量定义后,如果未对其赋值,则各元素为假值。

·给数组变量赋一个值时,其元素均得到该值,也可以为其元素分别赋以不同的值。

·数组变量不直接参加运算,其元素可以。 6、和变量有关的常用命令 ·list memory命令 格式:p60。

功能:显示变量信息。 说明:

○书中命令格式的书写约定:中括号部分表示选项;尖括号部分内容(汉字部分)要根据要求提供;竖杠(斜杠)两边内容表示只能选择其一。 ○显示的变量信息不仅有我们自己使用的变量,而且包括VFP本身所固有的变量(这些变量称为系统变量,系统变量名均以下划线开始)。

○“like <通配名>”表示只显示和通配名一致的变量信息。通配名是指包含?或*的名称,其中,?表示该位置可以是任意的某个符号,*表示该位置可以是任意多的符号。比如a?c表示这样的一些名称:第一位是a,第二为任意,第三位是c;a*c表示这样的一些名称:第一位是a,最后一位是c,中间内容任意。

○“to printer”表示将变量信息同时送打印机打印;“to file <文件>”表示将变量信息同时存入到指定的文件中。

○当显示的变量信息超出一个屏幕时,前面的信息会滚出屏幕。

○VFP命令中规定使用的英文单词称为保留字。使用时,保留字可以只写出前面部分,但至少要有4位。 ·display memory命令 格式:p60。

功能:显示变量信息。 说明:与list memory命令的唯一区别在于:当显示的变量信息超出一个屏幕时,该命令能做到一个屏幕一个屏幕地显示。 ·clear memory命令

第8页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

格式:clear memory 功能:清除所有变量。

说明:系统变量是我们清除不掉的。 ·release命令

格式1:release 变量1,变量2,?? 功能:清除指定的变量。 格式2:release all 功能:清除所有变量。

格式3:release all like 通配名 功能:清除和通配名一致的变量。 格式4:release all except 通配名 功能:清除和通配名不一致的变量。

上机:练习普通变量及数组变量的使用;练习有关命令。

三、表达式

1、表达式是对数据(常量、变量)进行运算的式子。运算可以通过运算符,也可以通过函数。为改变运算的顺序,也可以在表达式中使用圆括号。 说明:

·计算机中,表达式里的所有字符均并列书写。

·单个常量或变量是表达式的特例,即属于表达式范畴。 2、数值表达式

·对数值型、货币型数据进行运算的式子,其值为数值型或货币型。 ·算术运算符: **或^:乘方运算; *:乘法运算; /:除运算; %:求余运算; +:加运算; -:减运算。 3、字符表达式

·对字符型数据进行运算的式子,其结果仍为字符型。 ·字符运算符:

+:将前后两个字符串进行合并,如[abc ]+[def],其结果为字符串[abc def]。 -:将前后两个字符串进行合并,但将前面字符串尾部的空格挪到合并后的新字符串尾部。如[abc ]-[def],其结果为字符串[abcdef ]。 两个字符运算符的优先级相同。 4、日期时间表达式

·对日期时间型数据进行运算的式子,其结果类型依情况而定。

第9页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

·日期时间表达式类型:p64表3.3。 5、关系表达式

·通过关系运算符进行比较的式子。如果比较成立,结果为逻辑值真,否则为假。

·关系运算符:p65表3.4。关系运算符的优先级相同,但低于前面的运算符。 ·关系运算符前后参与比较的数据要求是同一类型(数值型可以和货币型比较)。 ·关系表达式的运算结果和关系运算符两边的数据大小密切相关,VFP中,数据大小的规定:

(1)数值型、货币型 同算术中大小。

(2)日期型、日期时间型 靠后的日期、时间大。 (3)逻辑型 真大于假。 (4)字符型

【单个字符大小的规定】

当设置为Machine(机器)顺序时:

字符大小:空格<数字字符(?0?到?9?)<大写字母<小写字母; 汉字大小:常用汉字以拼音顺序排大小,如?李?

字符大小:空格<数字字符(?0?到?9?)

字符大小:空格<数字字符(?0?到?9?)

两个字符串大小的判定规则:

自左至右,逐个字符进行比较,直到某个字符能分辨出大小为止。(字符型数据大小规则图解)

非精确比较方式(默认方式):

两个字符串的比较以右边字符串的结束而结束。(比较方式图解) 精确比较方式:

两个字符串的比较以最长字符串的结束而结束。(比较方式图解)

第10页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

【比较方式的设置】 方法一:“选项”对话框中进行。 方法二:命令

SET EXACT ON &&设置为精确比较方式 SET EXACT OFF &&设置为非精确比较方式 【思考、练习与提示】

1)了解当前比较方式。提示:通过SET('EXACT') 函数也可了解。

2)分别在非精确比较方式和精确比较方式下判断下述关系表达式的值: ?XYZ?=?XY?,?XY?=?XYZ?, ?XYZ?= =?XY?,?XY?= =?XYZ?,?XY??XY?。

6、逻辑表达式

·对逻辑型数据进行运算的式子,结果为逻辑型。 ·逻辑运算符: .not.或not或!:非运算; .and.或and:与运算; .or.或or:或运算。 优先级(高→低):非、与、或。但它们的优先级均低于前面的运算符。

说明:如果一个运算符只对一个数据进行运算,称之为单目运算符;如果对两个数据进行运算,称为双目运算符。 7、逻辑表达式、关系表达式的意义

VFP中,使用逻辑表达式、关系表达式表示条件。当逻辑表达式、关系表达式的值为真时,所表示的条件成立;当逻辑表达式、关系表达式的值为假时,所表示的条件不成立。

例:试用关系表达式或逻辑表达式表示如下条件,并验证条件的成立与否和表达式真假值之间的关系。 1)A大于5 2)A不大于5

3)A大于5且B小于10 4)A大于5或B小于10 5)A在5和20之间

上机:p63例3.8;就表3.3中的每一个表达式类型给出一个实例,并查看其结果;p68例3.15;

四、常用函数

1、函数是进行数据运算的另一种途径。 2、函数的一般使用格式:

函数名(自变量,自变量,??)

第11页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

自变量又称参数。无自变量时,圆括号也要写上,如DATE()等。 3、常用函数

(1)数值处理函数 ·ABS函数

功能:求一个数的绝对值。 例:ABS(67),ABS(-67+89),ABS(-82) ·SIGN函数

功能:当自变量值正时,返回1;当自变量值负时,返回-1;当自变量值为0时,返回0。

例:当变量A的值为正时,B赋以值8+20;当变量A的值为负时,B赋以值8-20;当变量A的值为0时,B赋以值8。 ·SQRT函数

功能:求正数的平方根。 例:SQRT(2)

说明:默认计算结果为2位小数。SET DECIMALS TO命令可设置运算结果的小数位数。 ·PI函数

功能:得到∏的值。 例:PI() ·INT函数

功能:返回自变量的整数部分。 例:INT(1.3),INT(1.6),INT(-1.3),INT(-1.6) ·CEILING函数

功能:返回大于或等于自变量的最小整数。 例:CEILING(1.3),CEILING(2),CEILING(-1.3),CEILING(-2) ·FLOOR函数

功能:返回小于或等于自变量的最大整数。 例:FLOOR(1.3),FLOOR(2),FLOOR(-1.3),FLOOR(-2) ·ROUND函数

功能:对自变量的值进行四舍五入运算。运算时,第二个自变量表示精确到哪一位。

例:ROUND(345.345,2),ROUND(345.345,1),ROUND(345.345,0),ROUND(345.345,-1) ·MOD函数

功能:求两个整数相除以后的余数。 例:MOD(10,3),MOD(9,3),MOD(11,3) 说明:有负数的求余不考虑。 ·MAX函数

功能:从多个自变量中挑出最大的值。

第12页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

例:MAX(1,2,7,4,5),MAX(‘A’,‘ABC’,‘BC’) 说明:自变量的类型应一致。 ·MIN函数

功能:从多个自变量中挑出最小的值。 例:MIN(1,2,7,4,5),MIN(‘A’,‘ABC’,‘BC’) 说明:自变量的类型应一致。 (2)字符处理函数 ·LEN函数

功能:求字符串的长度。

说明:一个汉字长度为2,一个英文字符(包括空格)长度为1。 例:LEN(“二级Visual FoxPro培训班”) ·LOWER函数

功能:将自变量中的所有字母转化为小写字母。 例:LOWER(“二级Visual FoxPro培训班”) ·UPPER函数

功能:将自变量中的所有字母转化为大写字母。 例:UPPER(“二级Visual FoxPro培训班”) ·SPACE函数

功能:产生指定个数空格组成的字符串。 例:SPACE(10) ·REPLICATE函数

功能:由指定字符串重复组合产生字符串。

例:REPLICATE(?*?,10),REPLICATE(?ABCD?,5) ·TRIM函数

功能:将字符型自变量右边空格去掉。 例:TRIM(“ Visual FoxPro ”) ·LTRIM函数

功能:将字符型自变量左边空格去掉。 例:LTRIM(“ Visual FoxPro ”) ·ALLTRIM函数

功能:将字符型自变量左、右两边的空格均去掉。 例:ALLTRIM(“ Visual FoxPro ”) ·LEFT函数

功能:从一个字符串左边开始取子串。 例:LEFT(“上午好!”,2),LEFT(“上午好!”,4) ·RIGHT函数

功能:从一个字符串右边取子串。 例:RIGHT(“上午好!”,2),RIGHT(“上午好!”,4) ·SUBSTR函数

第13页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

功能:从一个字符串中取子串。 例:SUBSTR(“上午好!”,3,2),SUBSTR(“上午好!”,3,4) ·OCCURS函数

功能:求第一个字符串在第二个字符串中出现的次数。 例:OCCURS(\),OCCURS(\) ·AT函数

功能:求第一个字符串在第二个字符串中出现的位置。 例:AT(\),AT(\,2) ·ATC函数

功能:求第一个字符串在第二个字符串中出现的位置,但不区分字母大小写。 例:ATC(\),ATC(\,2) ·STUFF函数

功能:用第二个字符串替换第一个字符串中的内容。 例:STUFF(\) 思考:

1)在\的a、b之间插入\和\。STUFF(“ab”,1,”和”) 2)将\淮北煤炭师范学院\中的“煤炭”二字删除。 ·CHRTRAN函数

功能:对第一个字符串中的字符进行替换。 例1:CHRTRAN(\) 例2:CHRTRAN(\大家好\大家\你\) ·LIKE函数 功能:第一个字符串中的字符和第二个字符串中字符是否对应相同,是返回真,否则返回假。

例1:LIKE(\)

说明:第一个字符串中可以使用通配符。 例2:LIKE(\) (3)日期、时间函数 ·DATE函数

功能:返回当前系统日期。 例:DATE() ·TIME函数

功能:返回当前系统时间。 例:TIME()

说明:函数值为字符型。 ·DATETIME函数

功能:返回当前系统日期及时间。 例:DATETIME()

·YEAR函数、MONTH函数、DAY函数

第14页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

功能:分别返回日期或日期时间型自变量对应的年份、月份和日子。 例:YEAR (DATE()),MONTH(DATE()),DAY(DATE()) ·HOUR函数、MINUTE函数、SEC函数

功能:分别返回日期时间型自变量对应的时、分、秒。

例:HOUR(DATETIME()),MINUTE(DATETIME()),SEC(DATETIME()) 思考:10小时后是几点? (4)转换类函数 ·STR函数

功能:将数值型自变量转换为字符型。 例1:STR (123.456)

说明:函数值默认10位,不带小数部分。可以加上第2、第3个参数,用来分别表示总位数和小数位数。默认或指定位数比实际位数多时,函数值的左边补以相应个数的空格,以保证总位数。

例2:STR (123.456,5),STR (123.456,5,1) ,STR (123.456,5,2) ,STR (123.456,6,2),

STR (123.456,3,2) ,STR (123.456,2) ·VAL函数

功能:将字符型自变量转换为数值型。

例:VAL([1234.56]),VAL([123a]),VAL([下午好]) ·DTOC函数

功能:将日期型自变量转换为日期形式的字符串。 例1:DTOC(DATE())

说明:转换后的字符串组成和当前日期格式有关,但加上1参数后,将转化为YYYYMMDD这种固定格式的字符串。 例2:DTOC(DATE(),1) ·TTOC函数

功能:将日期时间型自变量转换为日期时间形式的字符串。 例1:TTOC(DATETIME())

说明:转换后的字符串组成和当前日期、时间格式有关,但加上1参数后,将转化为YYYYMMDDHHMMSS这种固定格式的字符串。 例2:TTOC(DATETIME(),1) ·CTOD函数

功能:将日期形式的字符串转化为日期型。 例:CTOD (\

说明:字符串的日期形式应和当前日期格式一致,否则将转化为空日期。 ·CTOT函数

功能:将日期时间形式的字符串转化为日期时间型。 例:CTOT (\(5)测试类函数

第15页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

·BETWEEN函数

功能:判断一个数据是否在另两个数据之间,是为真,否则为假。 例:BETWEEN(2,1,16),BETWEEN(\·EMPTY函数

功能:判断一个数据是否空值(p76表3.7),是为真,否则为假。

例:EMPTY (0),EMPTY (\,EMPTY (\,EMPTY (\ \,EMPTY ({}) ·VARTYPE函数

功能:判断一个数据的类型。 例:VARTYPE(A) 4、典型函数介绍 ·条件函数

用法:IIF(逻辑型表达式,表达式1,表达式2)

功能:如果逻辑型表达式的值为真,则表达式1的值作为函数值,否则,表达式2的值作为函数值。

例:函数IIF(X>10,?AAA?,?BBB?)

思考:当变量X分别取值10、0、100时,函数IIF(X>10,?AAA?,IIF(X<10,?BBB?,?CCC?))的值。 ·宏替换函数

用法:&字符型变量.

功能:用字符型变量的值(不带定界符)替换整个宏替换函数。 例:假设A=?76+28?,问表达式1+A和1+&A.分别等价于什么? 说明:

(1)该函数是一个十分有用又十分特殊的一个函数。 (2)宏替换函数出现在字符串中时也还有效,而其它函数出现在字符串中时被当作一个个字符处理。即:

若A='ABC',则'X&A.Y'等价于'XABCY';而'ABS(-86)'却不等价于'86'。 (3)宏替换函数最后的小数点是宏替换函数的结束标记。当宏替换函数和其后的内容能够明确区分清楚时,该结束标记可以省略。

思考:下面的表达式中,哪些宏替换函数的结束标记可以省略?假设A=?76+28?。

&A.+52 ,&A.6-285 ,?&A.BCDEFG?。

上机:通过上机掌握常用函数的用法。P80上机题。

第16页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

第四章 数据库及其操作

一、认识VFP数据库

1、VFP中,数据库是一个扩展名为DBC的文件,但为了储存与数据库相关的其它信息,VFP还会自动地为每个数据库文件建立同基本名但不同扩展名的另两个文件:扩展名为DCT的数据库备注文件和扩展名为DCX的数据库索引文件。

思考:假设我们建立了数据库SJK.DBC,问:实际会产生哪些文件?

2、VFP数据库主要由表组成。组成数据库的表可以是一个,也可以是多个。 3、VFP中,表是一个扩展名为DBF的文件。

4、VFP中,表就相当于我们日常生活中所见的各种表格。日常表格中,表头上所列出的各项在VFP中叫字段;表格中的一行内容在VFP中叫作一个记录。(字段与记录)

5、尽管数据库包含表,但数据库文件和表文件从文件夹中看都是独立的文件。(数据库和表的关系)

6、VFP中,数据库建立的一般步骤是: (1)建立数据库。

(2)在数据库中建立表。 (3)重复(2),创建数据库中的其它表。 (4)关闭数据库。

说明:关闭数据库后,其所属的表也被关闭。或者,先关闭表,再关闭数据库。 7、VFP中,使用数据库的一般步骤:

(1)先打开数据库,再打开表。或直接打开表(此时,表所属的数据库也会自动打开)。

(2)对表进行操作。

(3)关闭数据库。或者先关闭表,再关闭数据库。

二、数据库及表的基本操作 1、建立数据库 ·菜单方法 ·命令方法

CREATE DATABASE [数据库] 说明:

1)命令中,不指定要建立的数据库时,会出现对话框,通过对话框来选择数据库的位置及提供数据库名。

2)命令中,指定要建立的数据库时,可以省略数据库扩展名。如果要建立的数据库文件不想放在默认目录,则文件名前面还必须提供文件位置。如果文件位

第17页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

置或文件名中用到空格,则所提供的内容前后应加上字符定界符。

3)菜单方式建立数据库后,会自动显示出“数据库设计器”窗口(我们今后简称为“数据库窗口”),命令方式建立时不会。执行“MODIFY DATABASE”命令可显示数据库窗口。

4)不管显示不显示数据库窗口,新建的数据库都将是打开状态。即关闭数据库窗口,不表示关闭数据库。

5)分别建几个数据库时,这些数据库都是打开状态,但叫“当前数据库”的只有一个。从“常用”工具栏可以看出已经打开的数据库、当前数据库,也可以选择当前数据库。 2、在数据库中建立表 ·菜单方法 ·命令方法 CREATE [表] 说明:

1)命令中,不指定要建立的表时,会出现对话框,通过对话框来选择表的位置及提供表名。

2)命令中,指定要建立的表时,可以省略表扩展名。如果要建立的表文件不想放在默认目录,则文件名前面还必须提供文件位置。如果文件位置或文件名中用到空格,则所提供的内容前后应加上字符定界符。 3)一个表的组成字段称为表的结构。

4)如果当前有多个数据库是打开状态,则新建的表将属于当前数据库。 5)表建好后,自动处在打开状态,但看不到表内容。

6)一般情况下,打开一个表将自动关闭已经打开的表。即一般情况下,只能打开一个表。当前所打开的表从状态栏可以看出相关信息。从状态栏所看到的表称为当前表。

3、关闭表和数据库 关闭表 ·命令方法 USE

关闭数据库 ·命令方法

CLOSE DATABASES &&关闭当前数据库

CLOSE DATABASES ALL &&关闭所有数据库 4、打开数据库 ·菜单方法 ·命令方法

OPEN DATABASE [数据库]

说明:用“OPEN DATABASE”打开数据库时并不自动显示数据库窗口,要想显示,须再执行“MODIFY DATABASE”命令。

第18页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

5、打开表 ·菜单方法 ·命令方法

USE 表 [EXCLUSIVE/SHARED] 说明:

1)选择EXCLUSIVE选项时,表以独占方式打开;选择SHARED选项时,表以共享方式打开。省略时,默认以独占方式打开。独占方式打开时,表的结构可以修改,表的记录可以删除。

2)一般情况下,新打开一个表时,之前打开的表会被关闭。 6、修改表结构 ·菜单方法:“显示|表设计器”

·命令方法:MODIFY STRUCTURE

说明:修改一个表结构前,相应表必须打开。

上机:P113上机题1①②。

三、表的有关操作

特别提示:对表进行任何操作前,该表都要预先打开。 1、表窗口及其操作 ·表窗口的打开 菜单方式:“显示|浏览”。 命令方式:

命令1:BROWSE [LAST]

命令中的LAST选项将使表窗口以上次的显示外观出现。 命令2:EDIT 命令3:CHANGE 命令4:APPEND ·说明:

(1)表窗口有两种显示方式:浏览方式和编辑方式。

(2)表窗口有两种工作方式:追加方式和非追加方式。使用APPEND命令打开的表窗口自动处在追加方式,其余均处在非追加方式。如果处在非追加工作方式,可以将其转换为追加方式;反之不行。

(3)表窗口出现后,可以对表的内容进行任意的修改。当然,如果表是以只读方式打开时,则禁止修改。命令方式打开表示,加上“NOUPDATE”选项表示以只读方式打开。

(4)表窗口出现后,VFP会自动多出一个“表”菜单,从中,我们可以进行许多操作。

2、定位记录指针 ·记录指针的认识

第19页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

(1)表中有许多记录,为了指示出当前可操作的记录,VFP自动为打开的表安排一个“记录指针”。记录指针所“指”的记录称为当前记录。

(2)一个表刚打开时,记录指针指向1号记录。随着操作的进行,记录指针会自动改变其指向。我们也可以人为移动记录指针。

(3)记录指针的位置可以从状态栏看出。也可通过RECNO()函数值获知。 ·记录指针的定位

GO TOP 或 GOTO TOP

将记录指针指向表中最前面的记录。

说明:在记录指针已经指向最前面记录的情况下,如果让指针再前移“一步”,则称“指向了表的开头”,这时,函数BOF()的值将为真。在指针已经指向表头的情况下,再“越雷池一步”,就会出错。 GO BOTTOM 或 GOTO BOTTOM 将记录指针指向表中最后面的记录。

说明:在记录指针已经指向最后面记录的情况下,如果让指针再后移“一步”,则称“指向了表的末尾”,这时,函数EOF()的值将为真。在指针已经指向表尾的情况下,再“越雷池一步”,就会出错。

GO 记录号 或 GOTO 记录号 或 记录号 将记录指针指向指定记录号的记录。

说明:VFP会自动对表中的记录进行编号,这就是我们所说的记录号。记录号从1开始,记录号的顺序反映了记录在表中的实际顺序。 SKIP

记录指针后移一个记录。 SKIP n (n为正整数) 记录指针后移n个记录。

SKIP -n (n为正整数) 记录指针前移n个记录。

·思考:将记录指针指向表头,查看当前记录号;将记录指针指向表尾,查看当前记录号。所显示的记录号与你认为的不同吗?你不能理解吗? 3、在主屏幕显示记录 ·LIST

显示表中全部记录。显示完毕,记录指针指向表尾。 ·LIST 范围

显示指定范围内的记录。范围:ALL—全部记录,NEXT n —当前记录开始的n个记录,REST—当前记录到最后一个记录,RECORD n—第n号记录。 ·LIST FOR 条件

显示表中符合条件的记录。

·LIST FOR 条件 范围 或 LIST 范围 FOR 条件 仅显示指定范围内符合条件的记录。 ·DISPLAY

第20页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

显示当前记录。 ·DISPLAY 范围 同LIST 范围。

·DISPLAY FOR 条件 同LIST FOR 条件。

·DISPLAY FOR 条件 范围 或 DISPLAY 范围 FOR 条件 同LIST 范围 FOR 条件。 ·说明: (1)LIST命令和DISPLAY命令除了第一种用法上功能有差别外,另外一个差别是:当显示的记录信息多时,LIST命令不能一屏一屏显示记录信息,而DISPLAY命令可以。

(2)命令中,若加上OFF选项,则不显示记录号。

(3)可以指定显示字段,格式:FIELDS 字段名1,字段名2,??。 (4)如果希望记录信息送往打印机,可加上TO PRINTER选项。

(5)VFP命令中,若同时出现多个选项,一般它们可以以任意顺序出现。 (6)留意显示前后记录指针位置的变化。 4、向表中添加记录 ·INSERT

当前记录之后插入一空记录,同时打开表窗口以便填写内容。 ·INSERT BLANK

当前记录之后插入一空记录,但不打开表窗口。 ·INSERT BEFORE

当前记录之前插入一空记录,同时打开表窗口以便填写内容。 ·INSERT BEFORE BLANK

当前记录之前插入一空记录,但不打开表窗口。 ·APPEND

在表的最后添加一空记录,同时打开表窗口以便为空记录填写内容。 ·APPEND BLANK

在表的最后添加一空记录,但不打开表窗口。 ·APPEND FROM 表 [FOR 条件]

将指定表中记录有条件或无条件地追加到当前表后。命令中指定的表无须打开。 例:先分别查看 “学生1.dbf”和“学生.dbf”的内容,然后将“学生1.dbf”中年龄小于20的记录追加到“学生.dbf”中,并查看追加后的“学生.dbf”内容。

5、自动替换字段内容 命令格式:

REPLACE 字段1 WITH 表达式1,字段2 WITH 表达式2,?? [范围] [FOR 条件]

功能:对表中指定范围内符合条件的记录进行替换。若省略范围和条件,只对

第21页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

当前记录进行替换。

例:对学生表进行如下替换: ·每人奖学金为1000元。

·根据出生日期重新计算年龄(CEILING)

·85年前(包括85年)出生的学生奖学金增加100元。 ·男生奖学金加100,女生奖学金加150。 6、记录的删除

·逻辑删除(即在记录上做个删除标记,并不是真的删除) 命令格式:DELETE [范围] [FOR 条件]

功能:删除指定范围内符合条件的记录。省略范围和条件时,只删除当前记录。 说明:如果当前记录被逻辑删除,则函数DELETED()值为真。 ·逻辑删除记录的恢复(即取消删除标记) 命令格式:RECALL [范围] [FOR 条件]

功能:恢复指定范围内符合条件的记录,如果它被逻辑删除的话。省略范围和条件时,只恢复当前记录。

说明:也可以在表窗口中,通过鼠标或Ctrl+T键逻辑删除/恢复记录。 ·物理删除(真的将记录从表中删除) 命令1:PACK

功能:物理删除已经逻辑删除的记录。 命令2:ZAP

功能:物理删除表的全部记录,不管其是不是已逻辑删除。 7、查找记录

命令格式:LOCATE FOR 条件 [范围] 功能:从表中找出符合条件的第一个记录。 说明:

(1)找到这样的记录后,只是将记录指针指向所找到的记录,并不会显示出所找记录的内容。

(2)若要查找表中符合条件的下一个记录,使用Continue命令。 (3)找到记录时,函数FOUND()值为真,否则为假。 思考:找不到符合条件的记录时,记录指针将指向何处? 8、获知表中记录个数

从状态栏可以看出,也可通过RECCOUNT()函数值获知。

上机:练习以上内容。

四、索引

1、索引的认识

·索引是为了在不改变表中记录顺序的情况下得到新的记录顺序。 假设学生表:

第22页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理 记录号 学号 姓名 年龄 1 2003001 张三 21 2 2003002 李四 20 3 2003003 王五 19 4 2003004 张三 18 5 2003005 赵六 20 如果我们希望得到以“姓名”升序排列的记录顺序,做法是:建立一个以“姓名”升序排列的如下“索引表”: 姓名 记录号 李四 2 王五 3 张三 1 张三 4 赵六 5 从该“索引表”中,就可以看出“姓名”升序排列下的记录顺序。该“索引表”就叫作上述学生表的一个索引。 一个表,其索引可以有多个。 ·索引的有关概念

(1)索引名:为建立的索引所取的名字。 (2)索引项(索引关键字或索引表达式):建立索引的依据,如上例中的“姓名”字段。索引项可以是一个字段,也可以是一个表达式。如希望建立一个这样的索引:以“姓名”升序排列,当记录的“姓名”相同时,再以“年龄”的升序排列。这时,索引项就是:姓名+年龄?索引如下:

姓名+str(年记录号 龄,2) 李四20 2 王五19 3 张三18 4 张三21 1 赵六20 5 ·索引的类型

(1)主索引:如果不同记录,其索引项值要求不同,则,这样的索引可以定义为主索引。

(2)候选索引:如果不同记录,其索引项值要求不同,则,这样的索引也可以定义为候选索引。

主索引与候选索引的区别是:一个表,只能有一个主索引,可以有多个候选索引。

(3)普通索引:对索引项值无限制要求的索引可定义为普通索引。

(4)唯一索引:对于索引项值相同的记录,在索引中只记录第一个记录。有这

第23页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

种要求的索引应定义为唯一索引。(唯一索引图解) ·索引的储存

(1)索引不是和表一起储存在表文件中,而是单独储存到索引文件中。 (2)索引文件的类型:

单索引文件:一个索引文件只能存储一个索引。单索引文件的扩展名为IDX。 复合索引文件:一个索引文件能存储多个索引,不同索引以索引名进行区分。复合索引文件的扩展名为CDX。如果表的某个复合索引文件,其基本名与表同名,则该复合索引文件称为结构化复合索引文件,否则称为非结构化复合索引文件。

(3)显然,一个表的单索引文件可以有多个,非结构化复合索引文件也可以有多个,但结构化复合索引文件只能有一个。实际使用中,以结构化复合索引文件最常用。

·索引的其它认识

(1)同数据库和表一样,索引也只有当其是打开状态时,索引才能使用。新建一个索引时,其自动处于打开状态;结构化复合索引文件中的索引,随表的打开而自动打开;单索引文件及非结构化复合索引文件中的索引必须人为打开。 (2)当多个索引被打开时,可以指定某个索引为当前索引。当前索引也可以没有。如果没有当前索引,则对表进行处理时,以表中的记录顺序进行(例LIST、GO TOP等);如果有当前索引,则对表进行处理时,以当前索引中的记录顺序进行(例LIST、GO TOP等)。

(3)当索引处在打开状态时,索引的内容会随表内容的改变而自动调整。也就是说,当一个索引处在关闭状态时,表内容改变后,索引内容得不到及时调整,这就导致索引内容的“老化”。为此,可以打开索引,对其进行重新索引即可。可见,表的索引一般都要让其处在打开状态。 2、索引的有关操作 ·索引的建立

(1)结构化复合索引文件中索引的建立 在“表设计器”中建立:见演示。 命令方式建立:

INDEX ON 索引项 TAG 索引名 [ASCENDING/DESCENDING] [UNIQUE/CANDIDATE]

说明:UNIQUE—建唯一索引,CANDIDATE—建候选索引,不指定为普通索引。

(2)单索引文件中索引的建立

INDEX ON 索引项 TO 单索引文件 [ASCENDING/DESCENDING] [UNIQUE/CANDIDATE]

(3)非结构化复合索引文件中索引的建立

INDEX ON 索引项 TAG 索引名 OF 非结构化复合索引文件 [ASCENDING/DESCENDING] [UNIQUE/CANDIDATE]

第24页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

说明:新建的索引自动处于打开状态,且用命令方式建立的索引为当前索引(“表设计器”中建立的索引不被自动设为当前索引)。 ·索引的打开

(1)结构化复合索引文件中索引的打开

随表的打开而打开。索引打开后,没有指定当前索引。 (2)单索引文件、非结构化复合索引文件中索引的打开 〖和表一起打开〗

USE 表 INDEX 索引文件1,索引文件2,?? 〖表打开后打开〗

SET INDEX TO 索引文件1,索引文件2,?? [ADDITIVE]

说明:一个或一批索引文件打开后,之前打开的索引文件(不包括结构化复合索引文件)将自动关闭,除非命令中有“ADDITIVE”选项。 ·设置当前索引(又称主控索引)

SET ORDER TO 索引号 [ASCENDING/DESCENDING]

索引号从1开始编号,编号顺序:单索引文件中索引、结构化复合索引文件中索引、非结构化复合索引文件中索引。

SET ORDER TO [TAG] 索引名 [ASCENDING/DESCENDING] 单索引文件中索引的索引名为单索引文件的基本名。 说明:

(1)如果出现索引名重名情况,应在索引名后指明其所在的复合索引文件:

OF 复合索引文件。

(2)当前索引也可以重新指定升、降序,不重新指定为建立索引时的升、降序。 (3)SET ORDER TO 或SET ORDER TO 0表示不指定当前索引。

(4)也可以在打开索引时指定当前索引。这时,在打开索引命令中加上如下选项即可:

ORDER 索引号 [ASCENDING/DESCENDING]

ORDER [TAG] 索引名 [ASCENDING/DESCENDING]

(5)表窗口出现后,选择“表/属性”菜单功能能够了解当前打开的索引、索引的顺序,也可以设置当前索引。

(6)ORDER()函数可以了解当前索引的索引名。无当前索引时,为空串。 ·重新索引

命令:REINDEX

功能:对所有打开的索引进行重新索引。

说明:当表窗口出现后,也可以通过“表”菜单进行重新索引。 ·根据索引项查找记录 格式:SEEK 索引项值

功能:根据当前索引,找出指定索引项值的第一个记录,将记录指针指向该记录。如未找到,记录指针指向表尾。 说明:

第25页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

(1)“索引项值”处可以是一个表达式。

(2)找到后,函数FOUND()值为真,否则为假。

(3)要想找到相同索引项值的下一个记录,使用SKIP命令即可,不能使用CONTINUE命令。

(4)如果想在非当前索引中,根据其索引项进行查找,则命令中应指定一个索引:

ORDER 索引号 [ASCENDING/DESCENDING]

ORDER [TAG] 索引名 [ASCENDING/DESCENDING] ·索引的关闭

CLOSE INDEXES 或

SET INDEX TO

关闭除结构化复合索引文件以外的索引文件。 另外,表关闭后,其索引均被关闭。 ·索引的删除

(1)结构化复合索引文件中索引的删除: 在“表设计器”中删除:见演示。

DELETE TAG 索引名1,索引名2,?? DELETE TAG ALL

(2)非结构化复合索引文件中索引的删除:

DELETE TAG 索引名1 OF 非结构化复合索引文件,索引名2 OF 非结构化复合索引文件,??

DELETE TAG ALL OF 非结构化复合索引文件 (3)单索引文件中索引的删除:

在文件夹窗口中删除单索引文件即可。

上机内容:

·建立一个“图书管理数据库”,其中包含学生表(学号C7,姓名C6,年龄I)、图书表(书号C5,书名C10,出版社C12)和借阅表(学号C7,书号C5,借阅日期D),并为每表输入一些记录。

·将学生表置为当前表,在“表设计器”中,以“学号”为索引关键字,建立一主索引(升、降序自定,以下索引也是这样);以“姓名”为索引关键字,建立一普通索引;以“姓名+STR(年龄,3)”为索引关键字,建立一普通索引。 ·将图书表置为当前表,在“表设计器”中,以“书号” 为索引关键字,建立一主索引;以“书名”为索引关键字,建立一普通索引。 ·将借阅表置为当前表,以命令方式分别以“学号”、“书号”为索引关键字,建立普通索引。要求索引放到结构化索引文件中。

·对学生表,分别设置不同的当前索引(包括没有当前索引的情况),用LIST命令显示记录,看看记录顺序在不同索引下的情况。

第26页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

·对图书表,将主索引设为当前索引,然后分别用SEEK命令找出某一书号的书和某一书名的书。 ·对借阅表,设置一当前索引,然后观察下列命令执行后,记录指针的变化(观察变化前最好自己先判断一下记录指针的变化,然后比较): (1)GO 1 (2)GO TOP

(3)GO BOTTOM (4)SKIP

·练习其它有关内容。

五、数据完整性

1、数据完整性即数据正确性。VFP中,数据完整性一般包括:实体完整性、域完整性和参照完整性三种。 2、实体完整性的目标及实现机制

·实体完整性的目标:保证表中不会出现相同的两个记录。

·实体完整性的实现机制:通过为表建立主索引或候选索引来实现。 3、域完整性的目标及实现机制

·域完整性的目标:保证某些字段的取值在规定的范围。 ·域完整性的实现机制:为字段设定“字段有效性规则”。 ·举例。

4、参照完整性的目标及实现机制

·参照完整性的目标:保证两个表之间数据的一致性。 ·参照完整性的实现步骤:

(1)在数据库窗口,建立两个表之间的关联关系

两个表之间的关联关系是指:当在一个表中确定一个记录时,能够知道另一个表中的相关记录。如学生表和借阅表之间以“学号”建立关联关系后,当学生表中确定学号为“2003002”的记录后,则借阅表中所有学号为“2003002”的记录均为相关记录。

两个表要想建立关联关系,都必须以“关联依据”为索引项建立索引,且其中至少有一个还是主索引或候选索引。

建立时,拖动一个表的主索引或候选索引到另一个表的相关索引上即可。前一个表称为父表,后一个表称为子表。 建立的关系可以删除和编辑。

清理数据库即物理删除数据库中各表里的逻辑删除记录。 菜单清理:“数据库|清理数据库” 命令清理:PACK DATABASE (3)设置参照完整性规则

更新规则:指父表中,记录修改时,应如何处理。

级联—更新子表中所有相关记录;

第27页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

限制—若子表中有相关记录,则禁止父表修改; 忽略—父表可以随意修改。

删除规则:指父表中,记录删除时,应如何处理。

级联—删除子表中所有相关记录;

限制—若子表中有相关记录,则禁止父表删除; 忽略—父表中,记录可以随意删除。

插入规则:指子表中插入或修改记录时,应如何处理。

限制—若子表插入或修改后,在父表中找不到相关记录,则禁止子表插入或修改;

忽略—子表记录可以随意插入或修改。

上机:在图书表和借阅表之间以“书号”建立关联,并设置各种参照完整性规则,通过实际操作来领会这些规则。

六、自由表

1、属于某个数据库的表称为数据库表;不属于任何数据库的表称为自由表。 2、自由表是为了保持和VFP以前版本的兼容性而保留的,自由表和数据库表相比,少了许多特性。因此,不赞成使用自由表。 3、自由表可以添加到数据库中,使其成为数据库表。 数据库窗口中添加: 命令方式:

ADD TABLE [表]

将表添加到当前数据库中。

4、数据库表也可以从数据库中移出,以成为自由表。 数据库窗口中移出: 命令方式:

REMOVE TABLE [表] 从当前数据库中移出表。

上机:分别就两种方式(在数据库窗口中和通过命令)练习数据库中表的添加和移出。

七、多个数据库和多个表同时使用时 1、可以相继打开多个数据库。 2、选择当前数据库 从“常用”工具栏:

命令:SET DATABASE TO [数据库名]

省略“数据库名”时,将没有当前数据库(并不关闭任何数据库)。 3、数据库的关闭

第28页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

CLOSE DATABASES &&关闭当前数据库

CLOSE DATABASES ALL &&关闭所有数据库

4、同时打开多个表时,要清楚工作区概念。即一个工作区中只能打开一个表,要打开多个表,必须在多个工作区中打开。 5、工作区的认识:

·VFP有32767的工作区。

·工作区可以用工作区号来表示:1,2,??32767。 ·工作区也可以用其别名来表示:A,B,C,??J,W11,W12,??,W32767。 ·工作区还可以用工作区打开的表的别名来表示。

(1)打开表时,未指定别名,则以表文件的基本名为表的别名。 (2)打开表时,可以为表指定一个别名: USE 表 ALIAS 别名 ·工作区的选择命令: SELECT 工作区

说明:所选择的工作区称为当前工作区。进入VFP后,默认当前工作区为1号工作区。函数SELECT()会返回当前工作区的区号。 例:同时打开多个表窗口。

说明:在数据库窗口中也可同时打开多个表窗口。

·用USE命令打开表时,也可以直接将表打开到非当前工作区: USE 表 IN 工作区

当工作区指定为0时,指未使用的编号最小的工作区。

·VFP的许多和表操作有关的命令中(如GO命令、SKIP命令等),都可以加上“IN 工作区”选项,表示对指定工作区中的表进行操作。 ·也可以使用非当前工作区中表的字段: 表的别名或表所在工作区的别名.字段名 或

表的别名或表所在工作区的别名->字段名

例:在1号工作区中进行如下操作:改变2号工作区中表的记录指针,每次改变后,都显示一下2号工作区中表的字段内容。然后,关闭2号工作区中的表。 6、建立两个表之间的临时关联

·参照完整性中所说的关联为永久关联,这里所说的关联是临时性关联,即表关闭后,下次再打开时,所建的关联就没有了。 ·临时性关联的建立:

(1)子表以“关联依据”为索引项建立了索引,且索引为当前索引 (2)在父表工作区,执行命令:

SET RELATION TO 关联依据 INTO 子表所在工作区

例:以学生表为父表、借阅表为子表,以“学号”为关联依据,建立一临时关联。 说明:

第29页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

(1)一个父表可以和多个子表建立临时性关联。但这时,建关联命令中应加上ADDITIVE选项,否则,新关联建好后将自动取消父表的已有关联。

(2)父表、子表是相对的。在一个关联中的子表,也可以是另一个关联中的父表。

·临时性关联的意义:当父表记录指针移动时,子表记录指针会随之移动,指向相关记录的第一个记录。这种现象称为记录指针的联动。 思考:当子表记录指针移动时,父表记录指针会跟随移动吗? ·一对多关联(一对多关联图解) SET SKIP TO子表所在工作区 ·临时性关联的取消

(1)关联中的某个表关闭后,与之相关的关联自动取消。 (2)“SET RELATION TO”命令取消以当前表为父表的所有关联。 (3)“SET RELATION OFF INTO 工作区”命令取消以当前表为父表,指定工作区中表为子表的关联。 7、“数据工作期”窗口的使用

“数据工作期”窗口可以在不同工作区中打开表、浏览表、建立临时性关联等。

上机:练习上述内容;以图书表为父表、借阅表为子表,以“书号”为关联依据,建立一临时关联,并查看父表、子表记录指针的联动情况。

八、排序 1、排序是将一个表中记录按照某种顺序排列后生成一个新的表。对一个表进行排序并不影响该表的记录顺序。 2、排序所生成的新表为自由表。 3、排序命令: 格式:

SORT TO 新表 ON 字段1 [/A或/D][/C],字段2 [/A或/D][/C],?? [ASCENDING或 DESCENDING] [范围] [FOR 条件] [FIELDS 字段1,字段2,??]

功能:对当前表根据要求进行排序,产生一新表。 说明:

(1)/A—升序,/D—降序,默认升序。/C—忽略字符型数据的大小写。/A/C≌/AC≌/CA;/D/C≌/DC≌/CD

(2)ASCENDING—升序,DESCENDING—降序,对未指定排序要求的字段而言的。 (3)“范围”选项指出参加排序的记录范围;“FOR”选项表示表中记录或指定范围内的记录还必须符合给定的条件才参加排序。两个选项都没有时,全部记录参加排序。 (4)“FIELDS”指出新表中所包含的字段,否则为当前表的全部字段。

第30页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

(5)产生的新表不会自动打开。

4、例:对学生表进行排序生成学生表1。排序要求:先姓名升序,姓名相同时,以年龄降序。然后查看学生表1内容。

上机:练习上面例子。

第31页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

第五章 SQL语言

一、SQL介绍

1、SQL是对表进行操作的标准语言。使用SQL语言对表进行操作非常灵活、简单。VFP早期版本不支持SQL语言,现在支持了。即现在在VFP中,可以使用SQL语言了。

2、SQL的全称:Structured Query Language。

3、SQL的核心功能是对表进行查询,但它也能够建表、修改表结构、修改表内容等等。

4、也就是说,今后对表进行操作,既可以使用第四章所学习的各种VFP命令,也可使用本章所学习的SQL命令。使用SQL命令要比使用VFP命令方便得多。 5、使用SQL命令的另一方便之处是:不用预先打开表就可以直接对表进行操作,因为SQL命令若发现表没有打开会自动打开而不是像VFP命令那样报错。

二、SQL查询

SQL查询使用SELECT命令,功能十分强大,下面我们通过实例来学习它! 1、SQL查询实例 说明:

(1)我们使用的数据库是“图书管理数据库”,其中的表有“学生表”、“图书表”和“借阅表”。

(2)SELECT命令的查询结果一般放在一个叫作“查询”的临时表中,且查询完后,自动打开该临时表窗口。“查询”临时表中的内容不能修改。 (3)当一个命令太长需要换行写时,应在行后加分号再回车。 例1、查看学生表中的学号。 SELECT 学号 FROM 学生表

例2、查看学生表中的学号和姓名。 SELECT 学号,姓名 FROM 学生表 例3、查看学生表中的内容。 SELECT * FROM 学生表

例4、查看学生表中年龄在19岁以上的学生信息。 SELECT * FROM 学生表 WHERE 年龄>19 例5、显示借过书的学生学号。 SELECT 学号 FROM 借阅表 DISTINCT

例6、显示三年后各学生的年龄。

SELECT 学号,姓名,年龄+3 FROM 学生表 AS 三年后年龄

第32页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

例7、显示年龄在20和30之间的学生信息。

SELECT * FROM 学生表 WHERE 年龄>=20 AND年龄<=30 SELECT * FROM 学生表 WHERE 年龄 BETWEEN 20 AND 30 例8、显示年龄不在20和30之间的学生信息。

SELECT * FROM 学生表 WHERE NOT(年龄>=20 AND年龄<=30) SELECT * FROM 学生表 WHERE NOT 年龄 BETWEEN 20 AND 30 SELECT * FROM 学生表 WHERE 年龄 NOT BETWEEN 20 AND 30

例9、显示学生的学号、姓名、所借书的书号及借书日期。(多表查询图解)

SELECT 学生表.学号,姓名,书号,借阅日期 FROM 学生表,借阅表 WHERE 学生表.学号=借阅表.学号

结论:多表查询时,一定要有联接条件,一般是表的公有字段要相同。 例10、显示学生的学号、姓名、所借书的书号、书名及借书日期。

SELECT 学生表.学号,姓名, 图书表.书号,书名,借阅日期 FROM 学生表,借阅表,图书表 WHERE 学生表.学号=借阅表.学号 AND 借阅表.书号=图书表.书号

例11、显示借过书的学生信息。返回

SELECT * FROM 学生表 WHERE 学号 IN (SELECT 学号 FROM 借阅表) 例12、显示未借过书的学生信息。

SELECT * FROM 学生表 WHERE 学号 NOT IN (SELECT 学号 FROM 借阅表)

SELECT * FROM 学生表 WHERE NOT 学号 IN (SELECT 学号 FROM 借阅表)

例13、显示借过”TP002”书的学生信息。

SELECT * FROM 学生表 WHERE 学号 IN (SELECT 学号 FROM 借阅表 WHERE 书号=?TP002?)

例14、分别以年龄升序、降序显示学生表内容。 SELECT * FROM 学生表 ORDER BY 年龄 [ASC] SELECT * FROM 学生表 ORDER BY 年龄 DESC 例15、以姓名升序、年龄降序显示学生表内容。

SELECT * FROM 学生表 ORDER BY 姓名,年龄 DESC 例16、显示年龄最大的三位同学信息。

SELECT TOP 3 * FROM 学生表 ORDER BY 年龄 DESC

例17、显示前40%的学生信息(学生信息要求是按年龄升序排列的)。 SELECT TOP 40 PERCENT * FROM 学生表 ORDER BY 年龄 说明:TOP选项要和ORDER选项一起使用。 例18、求学生人数。 SELECT * FROM 学生表

SELECT COUNT(*) FROM 学生表 例19、求借过书的学生人数。

第33页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

SELECT DISTINCT学号 FROM 借阅表

SELECT COUNT(DISTINCT 学号) FROM 借阅表

说明:COUNT函数的自变量只能是*或某个输出项,不能是多个输出项。 例20、求年龄和。

SELECT 年龄 FROM 学生表

SELECT SUM(年龄) FROM 学生表 例21、求平均年龄。

SELECT AVG(年龄) FROM 学生表 例22、求借书者的平均年龄。

SELECT AVG(年龄) FROM 学生表 WHERE 学号 IN (SELECT 学号 FROM 借阅表)

例23、求最大、最小年龄。

SELECT MAX(年龄), MIN(年龄) FROM 学生表 例24、统计每个人的借书本数。

SELECT 学号, COUNT(*) FROM 借阅表 GROUP BY 学号 例25、显示不止借一本书的学生学号及借书本数。

SELECT 学号, COUNT(*) FROM 借阅表 GROUP BY 学号 HAVING COUNT(*)>1

例26、显示不止借一本书的学生学号、姓名及借书本数。

SELECT 学生表.学号,姓名, COUNT(*) FROM 借阅表 ,学生表 WHERE 学生表.学号=借阅表.学号 GROUP BY 学生表.学号 HAVING COUNT(*)>1 例27、显示姓名叫“张三”或“李四”的学生信息。

SELECT * FROM 学生表 WHERE 姓名=?张三? OR 姓名=?李四?

SELECT * FROM 学生表 WHERE 姓名=?张三? UNION SELECT * FROM 学生表 WHERE 姓名=?李四?

例28、找出每个借书者最近的借书信息。

SELECT 学号,书号,MAX(借阅日期) FROM 借阅表 GROUP BY 学号 (每个借书者最近的借书信息)

SELECT 学号,书号,借阅日期 FROM 借阅表 XX WHERE 借阅日期=(SELECT MAX(借阅日期) FROM 借阅表 WHERE 学号=XX.学号) 例29、再做例11题。到例11

SELECT * FROM 学生表 WHERE EXISTS (SELECT * FROM 借阅表 WHERE 学号=学生表.学号) 例30、再做例12题。

SELECT * FROM 学生表 WHERE NOT EXISTS (SELECT * FROM 借阅表 WHERE 学号=学生表.学号)

例31、显示在“2003003”号学生最近借书日期之前的借书记录。

SELECT * FROM 借阅表 WHERE 借阅日期<=(SELECT MAX(借阅日期) FROM 借阅表 WHERE 学号=?2003003?)

第34页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

SELECT * FROM 借阅表 WHERE 借阅日期<= ANY(SELECT 借阅日期 FROM 借阅表 WHERE 学号=?2003003?) 可见:ANY意思是:任何一个。

例32、显示在“2003003”号学生最近借书日期之后的借书记录。

SELECT * FROM 借阅表 WHERE 借阅日期>(SELECT MAX(借阅日期) FROM 借阅表 WHERE 学号=?2003003?)

SELECT * FROM 借阅表 WHERE 借阅日期> ALL(SELECT 借阅日期 FROM 借阅表 WHERE 学号=?2003003?) 可见:ALL意思是:所有。

例33、显示姓“张”的学生信息。

SELECT * FROM 学生表 WHERE 姓名=?张?

SELECT * FROM 学生表 WHERE 姓名 LIKE ?张*? P120例5.12(×)

上机:练习以上实例;P142上机题1。

2、表的联接

当查询数据涉及到两个以上表时,实际上先进行了一个表的联接操作,使之成为一个表,然后在联接后的表中进行查询。 分析例9的查询过程:

例9、显示学生的学号、姓名、所借书的书号及借书日期。

SELECT 学生表.学号,姓名,书号,借阅日期 FROM 学生表,借阅表 WHERE 学生表.学号=借阅表.学号(联接图解) VFP中,联接还可以使用另外的命令格式: ·内部联接

特点:仅对符合联接条件的记录进行联接。

SELECT 学生表.学号,姓名,书号,借阅日期 FROM 学生表 JOIN 借阅表 ON 学生表.学号=借阅表.学号

SELECT 学生表.学号,姓名,书号,借阅日期 FROM 学生表 INNER JOIN 借阅表 ON 学生表.学号=借阅表.学号 等价于:

SELECT 学生表.学号,姓名,书号,借阅日期 FROM 学生表,借阅表 WHERE 学生表.学号=借阅表.学号

SELECT * FROM 学生表 INNER JOIN 借阅表 INNER JOIN 图书表 ON 借阅表.书号 = 图书表.书号 ON 学生表.学号 = 借阅表.学号 等价于:

SELECT * FROM 学生表,借阅表,图书表 WHERE 借阅表.书号 = 图书表.书号 AND 学生表.学号 = 借阅表.学号 ·左联接

特点:在内部联接的基础上,加进左边表中联接不上的记录。

第35页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

SELECT 学生表.学号,姓名,书号,借阅日期 FROM 学生表 LEFT JOIN 借阅表 ON 学生表.学号=借阅表.学号 ·右联接

特点:在内部联接的基础上,加进右边表中联接不上的记录。

SELECT 学生表.学号,姓名,书号,借阅日期 FROM 学生表 RIGHT JOIN 借阅表 ON 学生表.学号=借阅表.学号 ·全联接

特点:在内部联接的基础上,左边表、右边表中联接不上的记录都加入。

SELECT 学生表.学号,姓名,书号,借阅日期 FROM 学生表 FULL JOIN 借阅表 ON 学生表.学号=借阅表.学号 通常使用内部联接方式。 一个表也可以和自身联接。

如P125:SELECT S.雇员姓名,”领导”,E.雇员姓名 FROM 雇员 S,雇员 E WHERE S.雇员号=E.经理(自身联接图解.) 3、改变查询结果的去向

·默认情况下,SELECT的查询结果放在一个叫作“查询”的临时表中。 ·将查询结果放到数组中:

SELECT 命令 INTO ARRAY 数组名

说明:该数组不用预先定义,为二维数组。 练习:将查询结果放到一个数组中,然后用LIST MEMORY命令查看数组信息。 ·将查询结果放到指定的临时表中: SELECT 命令 INTO CURSOR 文件名 关闭临时表后,临时表文件自动删除。 ·将查询结果放到指定的永久表中:

SELECT 命令 INTO TABLE/DBF 文件名 该永久表为自由表。

·将查询结果放到指定的文本文件中:

SELECT 命令 TO FILE 文件名 [ADDITIVE] 文本文件默认扩展名为TXT。 ·将查询结果直接送到打印机:

SELECT 命令 TO PRINTER [PROMPT] ·将查询结果显示到主屏幕: SELECT 命令 TO SCREEN

练习:复制“学生表.DBF”到“学生表2.DBF”中。

三、SQL的操作功能

1、SQL语言的操作功能指对表内容的增、删、改功能。 2、记录的添加

第36页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

命令1:INSERT INTO 表 [(字段1,字段2,??)] VALUES (字段1内容,字段2内容,??)

例:向学生表中加入记录:“2003111”,“新同学”,18。 命令2:INSERT INTO 表 FROM ARRAY 数组名 功能:将指定数组内容作为记录内容加入到表中。数组可以是一维或二维数组。 说明:若是一维数组,则只添加一个记录;若是二维数组,则添加多个记录(一行表示一个记录)。

命令3:INSERT INTO 表 FROM MEMVAR

功能:将同名内存变量内容作为记录字段内容加入到表中。 3、记录的修改

命令:UPDATE 表 SET 字段1=内容,字段2=内容,?? [WHERE 条件] 功能:将表中符合条件的记录或全部记录按要求进行更新。 例:将学生表中年龄字段值加1。 4、记录的删除

命令:DELETE FROM 表 [WHERE 条件]

功能:逻辑删除表中符合条件的记录或全部记录。

四、SQL的定义功能

1、SQL语言的定义功能指对表结构的定义、修改等功能。 2、表的定义 ·说明

(1)表的定义使用CREATE TABLE/DBF命令。定义表时,若有当前数据库,且命令中又未指明创建自由表,则所定义的表是属于当前数据库中的表,否则为自由表。

(2)定义表时,为描述字段类型,要用到类型的表示字母。类型的表示字母见P135表5.2。 ·表的定义:

CREATE DATABASE 订货管理1 MODIFY DATABASE

CREATE TABLE 仓库1(; 仓库号 C(5) PRIMARY KEY,; 城市 C(10),;

面积 I CHECK 面积>0 ERROR “面积应大于0!”)

CREATE TABLE 职工1(; 仓库号 C(5) ,;

职工号 C(5) PRIMARY KEY,;

工资 I CHECK 工资>=1000 AND 工资<=5000 ERROR “工资值的范围在

第37页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

1000-5000!” DEFAULT 1200,;

FOREIGN KEY 仓库号 TAG 仓库号 REFERENCES 仓库1 TAG 仓库号) 或

CREATE TABLE 职工1(;

仓库号 C(5) REFERENCES 仓库1 TAG 仓库号,; 职工号 C(5),;

工资 I CHECK 工资>=1000 AND 工资<=5000 ERROR “工资值的范围在1000-5000!” DEFAULT 1200,;

PRIMARY KEY 职工号 TAG 职工号)

CREATE TABLE 供应商1(;

供应商号 C(5) PRIMARY KEY,; 供应商名 C(20),; 地址 C(20))

CREATE TABLE 订购单1(; 职工号 C(5) ,; 供应商号 C(5),;

订购单号 C(5) PRIMARY KEY,; 订购日期 D,;

FOREIGN KEY 职工号 TAG 职工号 REFERENCES 职工1 TAG 职工号,; FOREIGN KEY 供应商号 TAG 供应商号 REFERENCES 供应商1 TAG 供应商号)

·说明

(1)也可以建候选索引: CREATE TABLE 供应商1(;

供应商号 C(5) PRIMARY KEY,; 供应商名 C(20) UNIQUE, ; 地址 C(20)) 或

CREATE TABLE 供应商1(;

供应商号 C(5) PRIMARY KEY,; 供应商名 C(20), ; 地址 C(20),;

UNIQUE 供应商名 TAG GYSM)

(2)在不和父表关联的情况下,不能建普通索引: CREATE TABLE 职工1(; 仓库号 C(5) ,;

第38页·共79页

全国计算机二级VFP备考资料2010—7-16 Rebuilding整理

职工号 C(5) PRIMARY KEY,; 工资 I,;

FOREIGN KEY 仓库号 TAG 仓库号 REFERENCES 仓库1) (3)用FREE选项指定建自由表: CREATE TABLE 供应商1 FREE (; 供应商号 C(5) ,; 供应商名 C(20), ; 地址 C(20))

建自由表时,命令中的许些功能不能用。如: CREATE TABLE 供应商1 FREE (; 供应商号 C(5) PRIMARY KEY,; 供应商名 C(20), ; 地址 C(20))

3、表结构的修改 ·命令1

格式:ALTER TABLE 表 ADD/ALTER 字段描述 说明:

(1)ADD为加字段,ALTER为修改字段。 (2)“字段描述”的写法同“CREATE TABLE”命令中的字段描述。

例1:在订购单1表中增加一货币类型的“总金额”字段,并加上相应的字段有效性规则。

ALTER TABLE 订购单1 ADD 总金额 Y CHECK 总金额>0 ERROR “总金额应大于0!”

例2:将订购单1表中的“订购单号”字段宽度改为6。 ALTER TABLE 订购单1 ALTER 订购单号 C(6) ·命令2

格式:ALTER TABLE 表 ALTER 字段 [SET DEFAULT 默认值] [SET CHECK 有效性规则 [ERROR 错误提示]] [DROP DEFAULT] [DROP CHECK] 功能:设置或删除指定字段的“默认值”、“有效性规则”。 例1:重定义订购单1表中“总金额”字段的有效性规则。

ALTER TABLE 订购单1 ALTER 总金额 SET CHECK 总金额>100 ERROR “总金额应大于100!”

例2:删除订购单1表中“总金额”字段的有效性规则。 ALTER TABLE 订购单1 ALTER 总金额 DROP CHECK ·命令3 常见用法:

ALTER TABLE 表 DROP [COLUMN] 字段 删除字段。

ALTER TABLE 表 RENAME [COLUMN] 字段老名 TO 字段新名

第39页·共79页

本文来源:https://www.bwwdw.com/article/09v7.html

Top