江苏VFP等级辅导讲义(基础篇)

更新时间:2023-03-08 08:14:52 阅读量: 综合文库 文档下载

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

南天内部资料,严谨出售

目 录

第一章 Visual FoxPro概述 .............................................................................................................................. 2 第二章 VFP语言基础 .......................................................................................................................................... 4 第四章 数据库的创建和使用 ............................................................................................................................. 23 第六、七、八章 表单和控件 ........................................................................................................................... 33 第九章 报表 ......................................................................................................................................................... 42 第十章 菜单 ......................................................................................................................................................... 43 第十一章 应用系统集成 ..................................................................................................................................... 44

1

第一章 Visual FoxPro概述

第一章的知识点一般在考试中出一些小题,关于数据库部分每年笔试必考一题。而VFP概述部分则可能在笔试中出现,上机操作中每年必考,分值不大。 1.数据管理的一些基本概念和发展过程

(1)数据:是一种物理符号序列,用来记录事物情况,用型和值来表征。不同数据类型,记录的事物性

质也不同。如数值型数据1,2,3…,可用来记录事物的多少。 (2)信息:是经过加工的有用数据。这种数据有时能产生决策性的影响。

(3)数据处理:是指对各种类型的数据进行收集、存储、分类、计算、加工、检索及传输的过程。其目

的是得到信息。数据处理也称为信息处理或信息技术等。数据管理经历了人工管理、文件系统和数据库系统3个阶段。

2.数据库,数据库系统和数据库管理系统三者的区别和联系

(1) 数据库(DB):是指以一定的组织形式存放在计算机存储介质上的相互关联的数据的集合。 (2) 数据库管理系统(DBMS):是对数据库进行管理的系统软件,是用户与数据库之间的接口。 (3) 数据库系统(DBS):是实现有组织地,动态地存储大量关联数据,方便用户访问的计算机软硬件

资源组成的具有管理数据库功能的计算机系统。它由数据库,数据库管理系统,操作系统,计算机硬件资源等组成。数据库,数据库管理系统和数据库系统是最基本的概念。

(4) 三者之间既有联系又有区别。用户通过数据库管理系统可以建立和使用数据库。使用数据库是目

的,而数据库管理系统是实现目的的手段和工具。数据库和数据库管理系统又都是数据库系统的组成部分。

(5) 数据库特点:实现数据共享,实现数据独立,减少了数据冗余度(曾经是考点,要注意:是减少

了数据冗余度,而不能使冗余消失。),避免了数据不一致性,加强了对数据的保护。

3.概念模型和数据模型

(1)信息的三个领域:信息是客观事物属性的反映。它来源于客观事物,然后经过人们加工处理,再用

来控制客观事物。它的这一循环经历了三个领域:现实世界、信息世界、数据世界。(下面表格曾经是考点。)

现实世界 事物及联系 事物 对象和性质 实体 对象和属性 信息世界 概念模型 数据 记录和字段 数据世界 数据模型 (2) 概念模型:是按用户的观点对数据建模,对现实世界的第一层抽象,长期以来,广泛使用“实体—

联系”模型(E—R模型)。(考点)

? 实体:客观存在的,可以相互区别的事物(具体对象,抽象对象)。(用矩形表示) ? 实体集:具有相同性质的实体集合。

? 联系:实体集之间关系的 抽象表示。可分为:一对一、一对多和多对多。(用菱形表示) ? 属性:实体或联系所具有的特性。(用椭圆表示)

(3)数据模型:是数据库系统的基石。从创建数据库技术以来,数据模型有以下4种类型。(考点) ??层次模型:使用树型结构来表示实体的类型和实体间的联系。

??网状模型:这是层次模型的拓展,广义上讲,任意一个连通的基本层次联系的集合就是一个网状模型。 ??关系模型:其逻辑结构是一张二维表,由行和列组成。这是数据模型中最重要的模型。

2

南天内部资料,严谨出售

? 对象模型

4.关系模型,关系以及关系的性质(考点)

(1) 关系模型:是用二维表格的结构形式来表示实体模型及其实体间的联系。二维表中的每一列为一

个属性,称为字段(field)或域;每一行叫做一个记录(record),与一特定的实体项对应。

(2) 关系:一个二维表就叫做一个关系。

(3) 性质:(1)二维表的记录数随数据的增删而改变,但它的字段数却是相对固定的。因此,字段的

个数,名称,类型,长度等要素决定了二维表的结构。(2)二维表中的每一列均有唯一的字段名,且是同性质的。(3)二维表中不允许出现完全相同的两行。(4)二维表中行的顺序,列的顺序均可任意交换。(5)属性值不可再分。

5.二维表的超关键字,候选关键字,主关键字和外关键字(考点)

(1)超关键字:二维表中能唯一确定记录的一个列或几个列的组合。显然,二维表的全体字段必然构成

它的一个超关键字。超关键字虽然能唯一确定记录,但是它所包含的字段可能是多余的。 (2)候选关键字:如果一个超关键字,去掉其中任何一个字段后不再能唯一确定记录,则称它为。候选

关键字既能唯一确定记录,它包含的字段又是最精练的。二维表中可能有多个候选关键字。 (3)主关键字:二维表的候选关键字中,选出一个可作为。对于表中的每个记录,主关键字必须包含一

个不同于其他记录的唯一的值,所以主关键字的值不能为空值(NULL)。

(4)外关键字:当一个表(A表)的主关键字被包含到另一个表(B表)中时,它就称为B表的。 6.关系运算和参照完整性规则

(1)传统的集合运算(并、差、交等)。两个关系必须具有相同的关系模式。 (2)专门的关系运算(选择、投影、联接)。(考点) 注:无论哪一种关系运算,运算结果仍然是关系。

(3)参照完整性规则:包括域完整性、实体完整性、参照完整性和用户自定义。(以后详细介绍) 7.著名的DBMS

一类属于大型数据库管理系统,如Oracle,Sybase,DB2,Ingres,Unify和SQL 7; 另一类属于小型数据库管理系统,如Visual FoxPro 6.0,Access,Clipper,dBASE等 8.VFP命令的语法格式说明

(1)斜体字:该部分是命令的一个语法成分,由用户定义。命令窗口中显示黑色。 (2)方括号:“[ ]”;可选项。

(3)省略号:“…”;前一语法成分可重复多次。 (4)竖线:“|”;前后语法成分选择其一。

(5)粗体字:命令名关键字,用于标识命令的功能。在命令窗口中显示蓝色。 例:DELETE FILE [FileName | ?] [RECYCLE]

CREATE TABLE 表文件名(字段名1 字段类型[(字段宽度[,小数位数])] [NULL|NOT NULL][,字段名2 ,?]) 9.几个常用命令

(1)”*” 和 ”&&” 命令:”*” 只能将整行命令定义为注释,必须为命令行第一个字符;”&&” 可用在其他命令的后面,引导一个注释内容。注释内容在命令窗口中显示绿色。

(2)”?” 和 ”??” 命令:”?” 显示的值在上一次显示内容的下一行显示;”??” 显示的值接着上一次的内容显示。

(3)CLEAR 命令:清除当前VFP主窗口中的信息。 (4)DIR 命令:在VFP主窗口中显示文件的目录。

格式:DIR [[文件路径][文件说明]],

3

例如:DIR && 显示当前目录表文件

DIR a:\\*.txt && 显示a盘中的txt(文本)文件 DIR a:\\jxgl\\t*.scx && 显示A盘中以字符t开头的.scx文件 (5)MD / RD / CD命令(考点)

MD:创建文件夹;RD:删除文件夹;CD:改变当前目录。 (6)COPY FILE / RENAME / DELETE FILE

例: COPY FILE C:\\aa\\myfile.txt TO a: RENAME a:\\*.txt TO a:\\*.doc DELETE FILE *.bak

(7)RUN命令:调用外部DOS命令,DOS应用程序或Windows应用程序。

(8)QUIT命令:关闭所有的文件,并结束当前的VFP系统的运行。(考点在上机的菜单题中) 10. 在VFP中,用户可以利用命令来修改系统的操作环境(如默认工作目录等),也可以通过菜单命

令打开 选项 对话框进行设置。(考点) 11. VFP文件类型(常用的)(考点) 扩展名 文件类型 .cdx .dbf .fpt .dbc .dct .dcx .mnx .mnt .mpr .mpx 复合索引 表文件 表备注 数据库 数据库备注 数据库索引 菜单 菜单备注 备注 扩展名 文件类型 备注 修改的程序文件 运行的程序文件 当建立索引才会有索引文件 .pjx 项目 当有备注型或通用型字段时.pjt 项目备注 才生成表备注文件 时生成三个文件 .prg 程序 当创建一个数据库,就会同.fxp 编译后的程序 .qpr 生成的查询程序 .qpx 编译后的查询程序 在菜单设计器中修改的文件 .scx 表单 .sct 表单备注 .frx .frt 生成的菜单程序 运行的菜单文件 编译后的菜单程序 12. 项目管理器的选项卡

(1)全部:将5个分类项全部列在一起

(2)数据:包含所有数据:数据库、自由表、查询和视图 (3)文档:处理数据时用的全部文档:表单、报表和标签 (4)类:包含表单和程序中用到的类库和类 (5)代码:程序、API库和二进制应用程序

(6)其他:菜单、文本和其他(图标、位图等)。主文件的设置(考点)

在一个项目中,只能有一个主文件(即:第二次设置时前一次设置自动作废),显示时该项用粗体表示,并不是所有文件都可以设置成主文件,可以设置成主文件的文件类型:程序、表单、查询和菜单。

第二章 VFP语言基础

这一章的知识点比较碎,每年也是考试的重点。随着考试的发展,每年的知识点是一样的,而VFP的总体发展趋势是对程序的掌握要求提高,但是不用担心,还是程序填空和程序改错,不会让同学自己编程,最多是表单操作题中的编写代码和菜单操作题中编写过程代码(常考的代码)。

4

南天内部资料,严谨出售

一、基础部分 1.数据类型

数据类型是数据的基本属性,对数据进行操作的时候,只有同类型的数据才能进行操作,若对数据类型不同,系统判为语法错误。 (1)字符型(C)

由任意字符(字母、数字、空格、符号等)组成。注:在使用时需加上英文半角的单引号或双引号。 (2)货币型(Y)

使用其类型,需在数字前加上美元符号($) (3)日期型(D)

该类型用于存储日期数据,其存储格式为“YYYYMMDD”,占8个字节。显示格式有许多种,常用的为“MM/DD/YY”,它受SET DATE、SET MARK、SET CENTURY命令设置值的影响。 (4)日期时间型(T)

该类型用于存储日期和时间值,存储格式为“YYYYMMDDHHMMSS”。显示格式: yyyy / mm / dd hh:mm:ss am/pm (5)数值型(N)

由0~9、(+)、(-)、(.) 组成。注:小数点和小数 位数是字段总长的一部分。 (6)逻辑型(L)

“真”(.T.)或 “假”(.F.) (7)浮点型(F)

与数值型等价,只是为了提供兼容性。 (8)双精度型(B)

只能用于数据表中的字段定义,位数固定,小数点的位置由输入的数值决定。 (9)整型(I)

用于数据表中的字段定义。 (10) 备注型(M)

用于表中存储数据块。注:表中记录的备注字段数据保存在单独的文件中,与表名同名,扩展名为(.fpt)

(11) 通用型(G)

用于存储OLE对象,在表中经常用来存放照片或声音(考点上机操作题)。注:该类型的字段也保存在.fpt文件中。 2.数据存储容器

(1) 名称命名规则 (考点)

? 名称中只能包含字母、下划线(_)和数字符号和汉字符号 ? 名称的开头只能是字母、汉字或下划线,不能是数字

? 除了自由表的字段名、索引标识的长度最多10字符,其余的名称长度可为1~128个字符 ? 应避免使用VFP系统的保留字

例:2x、2_x、num-of-xs、nSum&Score、 _aver#gz、dir、use(考点)

(2) 常量:是指在程序运行过程中其值不发生变化的量。VFP支持字符、数值、日期、日期时间、货

币和逻辑6种类型的常量。(考点)

? 数值型:即常数,由数字、小数点和正负号构成 ? 字符型:即字符串,需“定界符”括起来。

5

注:定界符:’ ’、” ”、 [ ] ? 单、双引号必是英文半角下的 ? 定界符必成对匹配

? 如定界符本身也是字符串内容,则用另一种定界符表示 ? 空串(””)和空格字符串(” ”)是不同的 ? 字符串中字母的大小写不等价。 ? 货币型:以 $ 符号开头

? 逻辑型: .T. 、.t.、.Y.、.y. 或 .F.、.f.、.N.、.n.(”.”是定界符,不能省) ? 日期型和日期时间型:用{ }括起来

传统格式:{mm/dd/yy [hh:[mm[:ss]] [a/p]]} 严格格式:{^yyyy/mm/dd [hh:[mm[:ss]] [a/p]]} (3) 内存变量

? 创建:内存变量不需要声明。它的创建是通过赋值来完成,并且同时确定了该变量的数据类型。

赋值方法:

? store 表达式 to 内存变量名 (可为多个) ? 内存变量名 = 表达式 (只为一个) ? 控制变量访问,变量的作用域:即变量使用的有效范围

? 局部变量(local): 只能在创建它们的程序中被访问,其他程序不能访问此变量的数据。当

其所属程序停止时,局部变量将被释放。

? 私有变量(private): 定义当前过程的变量,并将以前过程定义的同名变量保存起来,在当

前过程中使用私有变量而不影响这些同名变量的原始值。

? 全局(公有)变量(public): 任何运行的程序都能访问全局变量和全局数组。在命令窗口

创建的任何变量自动具有全局属性。(考点)

? 变量访问(考点)

当变量和字段名同名时,字段有优先被访问权。要在变量名前加m.或m-> 以示区别。 ? 变量的保存与恢复(考点)

内存变量是系统在内存中设置的临时存储单元,当退出VFP时其数据会自动丢失。

? 保存语句:

SAVE TO FileName [ALL LIKE Skeleton | ALL EXCEPT Skeleton] ? FileName:内存变量文件的名字.mem ? Skeleton:变量通配符 ? ALL LIKE子句:需保存的变量 ? ALL EXCEPT子句:不需保存的变量 例:save to mVar all like ?yan*

? 恢复语句:RESTORE FROM FileName [ADDITIVE] (4) 数组

数组是由一系列被称为元素的有序数据值构成,可以用序号引用这些元素。在VFP中,一个数组中的数据不必是同一种数据类型。常用的有一维数组、二维数组。

? 数组的声明(方式):declare, dimension (私有)、public (全局)、local (局部)(考点)

例如:dimension x(3) —> x(1), x(2), x(3)

dimension a(2,2) —> a(1,1) a(1,2) a(2,1) a(2,2)

6

南天内部资料,严谨出售

? 数组的赋值(考点)

? 数组声明后,初值为.F.

? 重新赋值后,数据类型由其值决定。

? 数组中各元素的数据类型可以相同,也可不同。

例:a(1,1)=13, a(1,2)=‘s’,a(2,1)=45? a=113 —>数组a中的所有元素赋以113 (5) 字段、对象(略) 3.运算符(考点)

运算符是用来处理同类型的数据,若类型不同,必须先转换类型。下面运算符的顺序(除关系运算符外)是按优先级由高到低排列:

? 数值运算符:()、**或^(乘方)、*、/、%(求余数)、+、-

%:运算结果的正负号由除数的正负号决定,运算结果的小数位数由被除数的小数位数决定。 例如:15%(-4)=-1, 15.25%(-5)=-4.75 ? 字符运算符:+、-、$

? “+”:连接,将两个字符串首尾相连。

例如:”abc ”+”123”=”abc 123”

? “-”:连接,同时将运算符左侧字符串尾部空格移到末尾。

例如:”abc ”-”123”=”abc123 ”

? “$”:查看运算符,查看左侧字符串是否包含在右侧字符串中,运算结果为逻辑型。

例如:”abc”$”abcdefjg”=.T., xb$”男女”

? 日期和日期时间运算符:+、-

? 日期-日期 结果是天数(数值型) ? 日期+天数 结果是日期型数据 ? 日期-天数 结果是日期型数据 ? 两个日期不能相加

说明:对于日期时间,“天数”改为“秒数” ? 关系运算符:<、>、=、<>或#或!=、<=、>=、==

可以用于任意数据类型,但是运算符前后的数据类型必须相同,运算结果是逻辑型。 ? 逻辑运算符:( )、NOT或!、AND、OR(考过优先级) ? 运算符的优先级:

( ) —> **或^ —> *、/ —> % —> +、- —> $ —>关系运算符 —> NOT或! —>AND—>OR 4.设置字符的排序序列

在比较字符串时,对于不同的字符的比较,是根据字符的排列顺序决定字符大小,字符序列的设置分为三种情况:

? Machine(机器)序列:按机器内码顺序排列,由小到大是:空格、大写字母、小写字母。 ? PinYin(拼音)序列:汉字按拼音顺序,对于西文,由小到大是:空格、小写字母、大写字母。 ? Stroke(笔画)序列:汉字按书写笔画的多少,对于西文,同拼音序列。 5.字符串精度比较(考点)

使用“=”比较时,受SET EXACT命令影响。当SET EXACT OFF(默认值)时,如果“=”右边的字符串长度比左边的短,则左边取右边长度比较;当SET EXACT ON时,首先将字符串短的一边尾部加上空格,使两边相等后比较。例如:

7

表达式 “BCDE”=“BC” “BC”=“BCDE” “BC ”=“BC” “BC”=“BCDE” “BCDE”=“BCDE” 6.函数:(考点)

SET EXACT ON返回值 .F. .F. .T. .T. .T. SET EXACT OFF返回值 .T. .F. .T. .F. .T. 所谓函数,就是针对一些常见问题预先编好的一系列子程序,当应用时遇到此类问题就可以调用相应的函数,也就是执行相应的函数子程序。由于一个函数接受一个或多个参数而返回单个值,因此函数可嵌入到一个表达式中。参数:是供函数或过程操作的一个值。 [说明]:

n表达式:表示数值表达式;c表达式:表示字符表达式;l表达式:表示逻辑表达式,等依次类推。 (1)数值函数,以下函数返回结果均为数值型。 ? ABS(n表达式):求一数值的绝对值,

? MAX(n表达式1,n表达式2… ):求最大值,在查询中表示MAX(cj),这里cj是一个字段,也是

一组数据的集合。

? MIN(n表达式1,n表达式2…):求最小值,在查询中表示MIN(cj),这里cj是一个字段,也是一

组数据的集合。

? INT(n表达式):求一数值的整数部分(考过)

? SQRT(n表达式):求一数值的平方根,参数必须不小于零。

? MOD(n表达式1,n表达式2):求数值表达式1 除以数值表达式2的余数。(考过)

[注]:MOD( )函数值的正负号由第二个参数的正负号决定,值的小数位数由第一个参数的小数位数决定。例如:mod(23,-3)=-1,mod(-23.25, 5)=1.75

? ROUND(n表达式1,n表达式2):求n表达式1四舍五入的结果,其四舍五入的位置由n表达式2

决定。

-3 -2 -1 0 1 2 3

? RAND( ):求一个0~1之间的随机数。

[注]: 其中的参数可以省略,可以为正数、负数和零。 (2)字符函数

? ALLTRIM(c表达式):删除字符串表达式开头和结尾的空格。返回结果类型为字符型。 ? TRIM(c表达式):删除字符串表达式结尾的空格。返回结果类型为字符型。 ? LTRIM(c表达式):删除字符串表达式首部的空格。返回结果类型为字符型。 ? LEN(c表达式):求字符表达式的长度。返回结果类型为数值型。

? AT(c表达式1,c表达式2[,n]):求字符表达式1在字符表达式2第n次出现的位置,如n省略则表示

第一次。返回结果类型为数值型。 [注]: AT( )区分大小写;ATC( )不区分大小写

? SUBSTR(c表达式,n[,m]):将字符表达式进行截取,n表示开始截取的位置,m表示截取的个数,

如m省略,则截取从n开始的所有字符。返回结果类型为字符型。(经常考)

? LEFT(c表达式, n):将字符表达式从最左边开始截取n个字符。返回结果类型为字符型。 ? RIGHT(c表达式,n):将字符表达式从最右边开始截取n个字符。返回结果类型为字符型。

8

[注]: 2 3 4 . 8 5 6 9 n表达式2的值就是要四舍五入的位置。

南天内部资料,严谨出售

? SPACE(n):返回指定个数的空格字符串,若SPACE(0):则表示空字符串。返回结果类型为字符型。 (3)日期/时间函数

? DATE( ):返回系统当前日期。返回结果类型为日期型。

? DATETIME( ):返回系统当前日期时间。返回结果类型为日期时间型。 ? TIME( ):返回系统当前时间。返回结果类型为字符型。

? DOW(d表达式):返回某个日期在一星期的第几天,星期天是第1天。返回结果类型为数值型。 ? DAY(d表达式):返回某个日期在某个月中的第几天。返回结果类型为数值型。 ? MONTH(d表达式):返回某个日期的月份。返回结果类型为数值型。 ? YEAR(d表达式):返回某个日期的年份。返回结果类型为数值型。 (4)数据类型转换函数 ? 字符<—>ASCII码值

? ASC(c表达式):返回单个字符或字符串的首字符的ASCII码值。返回结果类型为数值型。 ? CHR(n表达式):返回某数值在ASCII码表中对应的字符。 ? 字符串<—>数值

? VAL(c表达式):将字符串转换成数值。首字符必须是+、-、0~9数字,否则返回结果为0;并且只

能转换数字,除字符“E”和“.”之外的所有字符均不能转换;字符“E”是科学计数法。 [例]:VAL (“123-23”)=123 VAL(“123aaaa23”)=123 VALl(“1.23e+2”)=123

? STR(n表达式 [,n [,m]]):将数值转换成字符串。n是返回的字符串的宽度,省略为10个字节,

m是保留小数的位数。

[例]:STR(123456789012)=? 1.234E+11? 总宽度为10位,字符数为9,在最前面预留了符号位1位 ? 日期<—>字符串

? DTOC(d表达式 [,1]):将日期转换成字符串。参数1指返回结果形式唯一:yyyymmdd,否则返回

结果形式由系统当前的日期格式决定。

[例]:系统当前日期格式:mm/dd/yy DTOC(date( ))=”05/26/98” DTOC(date( ), 1)=”19980526” ? CTOD(c表达式):将字符串转换成日期。。 ? 日期时间<—>字符串

? TTOC(t表达式 [,1 | 2]):将日期时间转换成字符串。参数1与DTOC( )相同,参数2指只返回时

间部分。

? CTOT(c表达式):将字符串转换成日期时间。 (5)其他函数

? BETWEEN(表达式1,下界,上界):测试表达式1的值是否下界和上界之间。返回结果类型为逻辑

型。

? INKEY(秒数):返回键盘缓冲区中第一个按键的键码(ASCII)值。返回结果类型为数值型。 ? TYPE(c表达式):返回字符型表达式中引号括起来的表达式的类型。 [注]:其参数必须加引号,返

回结果类型为字符型。

[例]:TYPE(“123”) =?N? TYPE(“.T.”)=?L? TYPE(?ABC?)=?U? [注]:U:表示不确定的,由于ABC此变量没创建,所以不知道其数据类型。

? IIF(条件表达式,结果1,结果2):当条件表达式为.T.,函数返回结果1,当条件表达式为.F.,函数

返回结果2。返回结果类型不确定,由第二个和第三个参数的类型决定。(经常考)

? MESSAGEBOX(?显示文本?,对话框类型,?标题?) :弹出消息框。返回结果类型为数值型,不同的

按钮对应的数值不同,这样可以用在分支结构的程序中。

9

? FILE(c表达式):测试辅助存储器上是否存在指定的文件。返回结果类型为逻辑型。

[例]:? FILE(“a:\\data\\js.dbf”)

? GETFILE([c表达式1][, c表达式2]):显示“打开”对话框,并返回选定文件的名称。c表达式1:

文件的类型。c表达式2:指定文件文本框前的标签。

? DISKSPACE( ):返回默认值磁盘驱动器上可用的字节数(存储空间)。 7.表达式

任何有值的对象都可以成为表达式。常量、变量、函数是最基本的表达式,这些基本的表达式按照运算符的规则加上各种运算符就可以构成各种复杂的表达式。 ? 表达式类型

根据表达式所用到的运算符,可以把表达式分为: (1)数值型表达式

由数值型的常量、变量、函数和算术运算符构成的表达式,其运算结果仍为数值型。 (2)字符型表达式

由字符型的常量、变量、函数和字符运算符“+”和“-”组成的表达式,其运算结果仍为字符型。 (3)日期型(日期时间型)表达式

由日期型或数值型的常量、变量和日期运算符“+”和“-”(天数/秒数)组成的表达式,其运算结果为日期型(日期时间型)或数值型。 (4)关系型表达式

由关系运算符和数值表达式、字符表达式、日期表达式及货币表达式组成的表达式,但运算符两边的数据类型必须一致,其运算结果为逻辑值。 (5)逻辑型表达式

由逻辑运算符和逻辑型的常量、变量、函数及关系表达式组成,其运算结果仍是逻辑值。 (6)货币型货币型表达式

运算对象和运算结果都是货币型,其运算符同算术运算符,运算规则同数值型表达式。如: ? ? ?

yVar1 = $ 856.00

? yVar1 + $100 && 显示结果为:956.0000 ? yVar1 < $1000 && 显示结果为: .T.

? 优先级

这6种表达式,每一种表达式内有优先级,各种表达式之间也有优先级,其优先级顺序是:数据值表达式、字段型表达式、日期型表达式和货币型表达式为平级且优先级最高,其次是关系型表达式,而逻辑型表达式的优先级最低。例如: num1 = 60 num2 = 180

? NOT num1>num2 AND ″abc″ >″ad ″ OR num2+20 <=200 &&显示结果为:.T. ? 表达式值的显示

显示表达式的值,可使用单问号(?)或双问号(??) ? 名称表达式

由圆括号括起来的一个字符表达式,用来替换命令函数中的名称。 ? 宏替换(考点)

宏替换与名称表达式具有相似的作用,可使用宏替换的方法用内存变量替换名称。将连字符(&)放在变量前。

10

南天内部资料,严谨出售

例: CLEAR

x=”OK”

STORE “学习” TO y ok=”努力” ?&x+(y)

这里需要注意:变量x是字符型,宏替换替换的是变量x字符串的内容,即:?&x替换为OK,则最后一行就变成 ?OK+(y),所以运行结果为:努力学习。

? 8

? 排序优先于其他数据

? 在计算过程中或大多数函数中都可以用到NULL值 NULL值会影响命令函数,逻辑表达式和参数.空值处理 (1)空值的特点

? 等价于没有任何值

? 与0、空字符串(“”)及空格不同的行为可用.NULL.标记,或键入[ctrl]+[0] (2)几个函数(考点)

函数 EMPTY() ISBLANK() ISNULL() (3)注:NULL值不是一种数据类型 store 5 to nx nx=.NULL.

?TYPE(“nx”) &&&&&& 显示 N

二、程序设计基础

程序是能够完成一定任务的命令和语句的有序集合。这组命令和语句被存放在称为程序文件或命令文件的文本文件中。

? 程序文件的建立与修改 1.菜单命令

建立:文件----新建-----(或常用工具栏的“新建”按钮) 修改:文件----打开-----选一个文件 2. 项目管理器

建立:代码选项卡----程序-----新建按钮----进入编辑窗口 修改:代码选项卡----选一个程序-----修改按钮----进入编辑窗口 3. 在命令窗口中利用命令

MODIFY COMMAND [文件名|?]

进入编辑窗口,建立新文件或修改已存在的文件 4. 进入数据库的存储过程中

项目管理器----数据选项卡----存储过程----添加(或修改)按钮

? 程序文件的运行

11

空白 .T. .T. .F. 空字符串 .T. .T. .F. 0 .T. .F. .F. 空值 .F. .F. .T. 建立的程序可以形成一个独立的文件,也可以把多个程序放在一个称为过程文件的文件中,要运行放在过程文件中的程序,事先要执行命令: SET PROCEDURE TO 〈过程文件名〉 运行程序文件有以下方法:

1. 在命令窗口使用命令: DO 〈程序文件名〉

2.在项目管理器中 代码选项卡----选一个程序-----运行按钮

3. 工具栏的!按钮 ? 程序的组成

一个程序由两部分组成:

1.说明部分:

编制的程序中通常要用到好多不同的数据:数值的、字符的、日期的?。这些数据有的在程序运行中始终不变,有的在程序运行中随时在变。在程序运行中始终不变的量称为常量,随时变化的量称为变量。VFP程序中可以直接使用各种量,不用说明。说明部分主要用来说明程序中使用的一些特殊变量,如全局变量,数组等。 说明语句有以下几个:

PUBLIC 说明的变量在整个应用程序都可以使用 LOCAL 说明的变量只可以在本程序中使用

DECLEAR 或DIMENSION 说明的变量可以在本程序和它的子程序中使用

数组在使用之前必须说明,说明的格式是:

PUBLIC | LOCAL | DECLEAR | DIMENSION 〈数组名〉(行数[,列数])

2.语句部分:

语句部分也称程序体,由以下几种语句组成:

(1)顺序语句:包括赋值语句和VFP的一些命令 (2)分支语句:

·条件分支语句:语句格式为

IF 〈条件〉 〈语句序列1〉 [ELSE

〈语句序列2〉] ENDIF

·情况分支语句:语句格式为 DO CASE

CASE 〈条件1〉 〈语句序列1〉 CASE 〈条件2〉 〈语句序列2〉 ?

CASE 〈条件n〉 〈语句序列n〉 [OTHERWISH 〈语句序列n〉]

12

南天内部资料,严谨出售

ENDCASE (3)循环语句:

·FOR循环语句:语句格式为

FOR〈循环变量〉=〈初值〉TO〈终值〉[STEP〈步长〉] 〈循环体〉 ENDFOR(或NEXT)

该语句一般用于循环次数已知的情况,其中循环中自带了循环变量增加的语句: (循环变量=循环变量+步长) ·DO 循环语句:语句格式为 DO WHILE〈条件〉

〈语句序列1〉 [LOOP] 〈语句序列2〉 [EXIT]

〈语句序列3〉 ENDDO

该语句一般用于循环次数不知的情况,用〈条件〉满足与否来控制循环次数。条件满足(即表达式为“真”)执行循环,条件不满足(即表达式为“假”)退出循环。 ·SCAN循环语句:语句格式为

SCAN [FOR〈条件1〉][WHILE〈条件2〉] 〈循环体〉 ENDSCAN

该语句一般用于数据表,执行该语句时,记录指针自动、依次的在当前表的指定范围内满足条件的记录上移动,对每一条记录执行循环体内的命令。[注]:其中循环中自带了指针移动的语句:SKIP(考点)

(4)循环结构中的LOOP和EXIT语句(考点 在笔试和上机操作中的程序改错中经常出现)

?

LOOP语句:用于将控制直接返回给循环入口,忽略此后的循环体,重新循环,注意还在循环体内。可以理解为电路中的“短路”。

EXIT语句:是退出语句,EXIT语句将控制直接递给循环出口,即:“跳出”循环,不在循环体内。如循环体中含有EXIT语句,则当执行到EXIT语句时,无论循环结束条件是否满足,到将退出循环。可以理解为电路中“断路”。

?

(5)VFP系统函数调用语句

VFP的函数是一种预先编制好的程序代码,可供用户或程序调用。调用VFP系统函数的格式如下: 函数名([参数1[,参数2,?]])

参数1[,参数2,?]是函数接收的一个或多个参数,而最终返回一个值,因此函数调用可以出现在表达式或赋值语句中。

(6)函数和子程序(过程)调用语句(考点)

除在程序中使用VFP系统提供的函数外,用户还可以把程序中多次使用的、完成某一特定功能的一些语句单独定义成函数或子程序。定义子程序的格式是:

13

PROCEDURE 〈子程序名〉

[PARAMETERS〈形参变量1〉[,〈形参变量2〉,?]]] 〈命令序列〉

[RETURN 〈表达式〉] ENDPROC 定义函数的格式是:

FUNCTION 〈函数名〉

[PARAMETERS〈形参变量1〉[,〈形参变量2〉,?]〉] 〈命令序列〉

[RETURN 〈表达式〉] ENDFUNC 注意:

·函数和子程序除定义格式、调用方法不同外,没有本质区别。

·调用用户定义的函数的方法与调用系统函数相同,调用用户定义的子程序的格式有两种:

格式1:使用 DO 命令

DO 〈子程序名〉WITH〈实参1〉[,〈实参2〉 ?]

格式2:在名字后加一对小括号

〈子程序名〉(〈实参1〉[,〈实参2〉 ?])

如果希望函数和子程序能够接受不同的值而返回不同的结果,在函数和子程序定义中用PARAMETERS语句规定一些参数。在函数和子程序定义中规定的参数称为形式参数,形式参数可以是变量或数组元素。在调用语句中用的参数称为实在参数,实在参数将与形式参数一一对应,实现主程序向子程序传递参数的功能。传递参数有两种方法:按值传递和按地址(也称引用)传递。

按值传递:将参数的值传递给子程序,即使在用户定义的函数或子程序中修改了参数的值,主程序中的

参数原值仍保持不变。

引用传递:将参数的地址传递给子程序,因此如果在用户定义的函数或子程序中修改了参数的值,主程

序中该参数的值也跟着改变。(考点)

两者区别:按值传递将实际参数的值代入形式参数,而按引用传递则将实际参数的变量代入形式参数 注意:

·在系统默认情况下,将按值传递参数给函数,将按地址传递参数给子程序 ·在调用自定义函数或子程序之前,可以通过命令:

SET UDFPARMS TO REFERRENCE 设置按地址传递参数方式 SET UDFPARMS TO VALUE 设置按值传递参数方式

·在调用语句中,如用括号括起一个变量,则按值传递参数,而如果在变量前加@符号,则按地址

传递参数。

程序例子:

【例1】完善下列程序,以实现通过字符串变量操作竖向显示“天长地久”、横向显示“地久天长”的功能。程序清单如下:

SET TALK OFF

STORE “天长地久” TO ch CLEAR

14

南天内部资料,严谨出售

n=1

DO WHILE n<8

? (13) n=n+2 ENDDO ? (14) ??SUBSTR(ch, 1, 4) RETURN 分析:

(1)首先看有几个变量。本题有2个:ch、n (2)每个变量的类型。本题ch:字符型,n:数值型 (3)程序中结构。本题DO WHILE循环结构

(4)具体分析题意。本题循环题功能是:循环输出竖向“天长地久”,所以13空为:循环输出一个字,

即SUBSTR(ch, n,2)。??SUBSTR(ch, 1, 4)的结果为“天长”两个字,说明14空应该输出“地久”两个字,即RIGHT(ch, 4)。 (5)这里要注意细节:?和??的区别

【例2】随机产生一个要求在70~80之间的数。 X=0

DO WHILE .T. X=rand( )*100

IF X>70 AND X<80 EXIT ENDIF ENDDO ?X

【例3】求1~100之间非3的倍数的所有奇数之和。 S=0

FOR i=1 to 100 STEP 2 IF MOD(i,3)=0 LOOP ENDIF S=S+i ENDFOR 分析:

进入循环前:s=0 循环次数、变量 第一次 第二次 第三次 第四次

i 1 3 5 7 Mod(i,3) 1≠0 0 2≠0 1≠0 s s=0+1=1 不变 s=1+5=6 s=1+5+7=13 15

第五次

… … …. 【例4】将由ASCII码字符组成的字符串进行反序显示(即‘ABCD’显示‘DCBA’)(考点) store ?abcdef? to c,cc p=space(0) do while len(c)>0 p=left(c,1)+p c=substr(c,2) enddo

?cc+“的反序为”+p

循环结构分析表:分析每次循环各个变量的变化。 进入循环前:c=?abcdef?,p=?? 循环次数、变量 第一次 第二次 第三次 第四次 第五次 第六次 第七次 Len(c) 6>0 5>0 4>0 3>0 2>0 1>0 Left(c, 1) ?a? ?b? ?c? ?d? ?e? ?f? p ??+?a?=?a? ?b?+?a?=?ba? ?c?+?ba?=?cba? ?d?+?cda?=?dcba? ?e?+?dcba?=?edcba? ?f?+?edcba?=?fedcba? c ?bcdef? ?cdef? ?def? ?ef? ?f? ?? 0=0循环终止 【例5】将由任意字符(包括汉字)组成的字符串反序显示. STORE ?abc电脑de? TO c,cc P=SPACE(0)

DO WHILE LEN(c)>0 X=ASC(LEFT(c,1)) IF X>127 i=2 ELSE i=1 ENDIF P=LEFT(c,i)+P c=SUBSTR(c,i+1) ENDDO ?cc+“的反序为”+P

【例6】定义一个函数ntoc( ),当传递给一个0~9之间的数字时,返回一个中文的“零~九”(考点) FUNCTION ntoc PARAMETERS pDigit LOCAL cString

CString=“零一二三四五六七八九” RETURN SUBSTR(cString,pDigit*2+1,2) ENDFUNC

16

南天内部资料,严谨出售

【例7】计算S=1!+2!+3!+4!+5!(考点) S=0

FOR I=1 to 5 S=S+Fjc(i) ENDFOR ?S

FUNCTION Fjc PARAMETERS X P=1

FOR n=1 TO X P=P*N ENDFOR RETURN P ENDFUNC

第三章 表的创建与使用

第三章的考点分布在笔试和上机,笔试中经常会考一些理论分析,常出在选择题中,另外一个比较

重要的知识点是命令的掌握。不仅要会命令填空,而且还要会自己编写命令(经常出现在菜单操作题中)。 1.表的类型和组成

(1)类型:自由表和数据库表 (2)两者同:扩展名为DBF

(3)异:表设计器不同,数据库表与它所属的数据库之间有逻辑关系。 (4)组成:字段和记录

(5)字段:基本属性(字段名,数据类型,宽度,小数位数,空值支持) ? 字段名:每个字段的名字 ,用以在表中标识该字段。 ? 字段的数据类型:表中每个字段都有特定的数据类型。 数据类型 字符型 货币型 数值型 符点型 日期型 日期时间型 字母表示 C Y N F D T 宽度是否为固定 否 8 否 否 8 8 数据类型 双精度型 整型 逻辑型 备注型 通用型 字母表示 B I L M G 宽度是否为固定 8 4 1 4 4 ? 字段的宽度:是指该字段所能容纳数据的最大字节数。有一些数据类型的宽度是固定. ? 小数位数:对于数值型、浮点型和双精度型的字段,可以指定其小数的位数。如数据的整数部分不为0,则整个宽度至少应比小数位数大2,如是纯小数,则整个宽度只要比小数位数大1。 ? 空值支持(NULL):通过使用空值(NULL),就有了一个判定某个字段是否具有一个值的办法。 (6)扩展属性(格式,掩码,标题,注释,字段有效性规则),只有数据库表才有扩展属性 2.表的创建 (1) 操作(略)

17

(2) 命令:CREATE TABLE-SQL(考点)

CREATE TABLE 表文件名(字段名1 字段类型[(字段宽度[,小数位数])] [NULL|NOT NULL][,字段名2 ,?]) [例如]:某银行存款表(ck.dbf)的表结构如下所示。

字段名 zh crrq cq je 字段类型 字符型 日期型 数值型 货币型 宽度 15 8 3 8 小数位数 0 字段含义 帐号 存入日期 存期(月) 金额(元) 1)创建ck表的表结构,可以使用下列命令:

CREATE TABLE ck (zh C(15), crrq D, cq N(3,0),je (25) ) 3.表的修改

(1) 用表设计器修改(主要是表设计器的打开)

? 操作:在项目管理器中选择表,点击“修改”按钮,表设计器就打开了。 ? 命令:MODIFY STRUCTURE 打开当前工作区中表的设计器。 (2) 用ALTER-SQL命令(考点)

? 添加或修改字段

ALTER TABLE 表名 ADD|ALTER [COLUMN] 字段名 字段类型[(字段宽度[,小数位数])] 例如:ALTER TABLE xs ADD COLUMN bjmc c(12) ? 删除字段

ALTER TABLE 表名 DROP [COLUMN] 字段名 例如:ALTER TABLE xs RENAME COLUMN bjmc TO bj

? 字段重命名

ALTER TABLE 表名 ADD|ALTER|[COLUMN] 字段名 字段类型[(字段宽度[,小数位数])] 例如:ALTER TABLE xs DROP COLUMN bj

4.作区及当前工作区

(1)工作区:用以表示一张打开的表的区域,每个工作区有一个编号,称为工作区号。范围为1—

32747,前10个也可用A—J表示,所以通常表名不要取简单的英文字母,避免和工作区号混淆。后面可用W11—W32747表示。每个工作区只能打开一张表,如果打开第二张表,那么这个工作区中的前一张表将自动关闭。但是同一张表可以在不同的工作区中打开。 (2)当前工作区:VFP正在使用的工作区(默认的工作区),启动VFP后,默认为1 (3)当前工作区的命令设置:SELECT 工作区号|表别名 (考点)

(4)工作区号为0时,系统自动选择当前未被使用的最小编号的工作区。 SELECT 0(考点) (5)操作非当前工作区中的表的方法:

? 把非当前工作区的表选为当前工作区

? 在命令中强行指定工作区:IN 工作区号 | 别名 例如:GO TOP IN js(考点)

5.表的别名

这是对工作区中打开的表的一个临时的标识,利用它可以引用在工作区中打开的表,如未用ALLAS子句指定别名,则别名同表名,但如果一张表在多个工作区中打开且未指定别名,则除第一次打开的工作区中别名同表名,其它均用A—J及W11—W32747表示。 6.表的打开

18

南天内部资料,严谨出售

USE 表名 [IN 工作区号| 表的别名] [AGAIN] [ALLAS 表的别名] [NOUPDATE]

其中AGAIN表示再一次,只要不是第一次打开表,就要加它。IN 工作区号| 表的别名 表示在非当前工作区打开表。 7.表的关闭

USE 关闭最近打开的表

CLOSE DATABASES 关闭数据库及其中的表 CLOSE TABLES 关闭所有打开的表 CLOSE ALL 关闭所有打开的文件 8.表的独占和共享(考点)

? 设置独占与共享打开表的默认状态 工具—选项—数据

或 set exclusive off | on,其中exclusive表示独占。 ? 强行用一种方式打开表 打开窗口右下角有设置

或 use 表名 share | exclusive

注:当一个表被多次打开时,只能以第一次为准。 9.记录处理

(1)记录指针:用于指示当前处理的记录位置。打开表时,指向第一条记录。 (2)当前记录:记录指针所指向的记录

(3)记录号:当用户向表中输入数据时,VFP按顺序为每条记录指定一个记录号。第一条记录记录号

为1,以此类推。

(4)几个函数:(考点)

? RECNO(): 测试记录指针的值,也可从状态栏观察记录条数及当前的记录号;返回结果类型是

数值型。

? BOF(): 测试记录指针是否指向记录的开始标志;返回结果类型是逻辑型。 ? EOF(): 测试记录指针是否指向记录的结束标志;返回结果类型是逻辑型。

[注]:从第一条记录向上移动一个记录,BOF()为.T.,RECNO()值为1,如果继续 SKIP –1 出错。

从最后一条记录向下移动一条记录,则EOF() 为 .T.,RECNO()的值为记录总条数加1,继续SKIP 则出错。以上三个函数是对当前工作区中的表而言的。 ? select([0|1|别名]):返回工作区号;返回结果类型是数值型。

0:当前工作区号,1:当前未被使用最大工作区号, 别名:表别名所在的工作区号,别名必加引号。 例如:?select(“xs”)

? used([区号|别名]):测试指定表或工作区是否打开,返回结果类型是逻辑型。 ? alias([区号]):返回指定工作区中的表别名,返回结果类型是字符型。

? field(字段顺序号[,区号|别名]):返回已打开表的指定序号的字段名。返回结果类型是字符型。 ? fcount([区号|别名]):或fieldcount([区号|别名]) 返回已打开表的字段数。返回结果类型是数

值型。

? delete():测试表的当前记录是否带删除标记。返回结果类型是逻辑型。 (5)记录的输入:(操作略)

? 使用 INSERT-SQL 命令(考点)

19

INSERT INTO 表名[(字段1[,字段2?])] VALUES(表达式1[,表达式2?]) 其中字段与表达式是一一对应的,字段1与表达式1对应,即位置对应,类型也要对应。字段省略表示对表中每个字段都输入值,也可以为表中的某些字段的输入值,只要满足对应就行。 例:insert into xs(xh,xm,xb,csrq) values(?950101?,?王一平?,?男?,{^1983/08/06}) ? 使用APPEND 和APPEND FROM命令追加记录(考点)

APPEND [BLANK] [IN 区号|别名]

说明:APPEND 表示以追加方式追加记录,可以输入多条记录。

APPEND BLANK 表示追加一条空白记录 IN 区号|别名 表示操作非当前工作区的表 APPEND FROM 文件名 [DELIMTED|XLS]

说明:将某个文件中的记录追加到当前工作区中的表。DELIMTED 表示文本文件,XLS 表示

Excel电子表格文件,省略表示DBF表文件。

(6) 记录的定位:()

? 绝对定位 GOTO|GO N (直接将记录指针指向第N条记录)

? 相对定位 SKIP N 或 SKIP –N (指相对于当前记录向下 + 或向上- 移动N条记录) ? 条件定位 LOCATE [范围] FOR 或 SEEK, SEEK() ? 范围:ALL 表示表中所有记录;

NEXT N 从当前记录开始的N条记录 RECORD 指定的记录

REST N当前记录后的所有记录

? 命令 GO TOP (直接跳到第一条记录)

(7)记录的修改:(考点)

? 使用REPLACE命令

REPLACE 字段1 WITH 表达式1 [,字段2 WITH 表达式2 ]?[范围] [FOR 条件] 例如:use gz

replace jbgz with jbgz+200 for zc=”讲师” ? 使用UPDATE-SQL命令

UPDATE 表名 SET 字段1=表达式1 [,字段2=表达式2?] [WHERE 条件表达式] 例如:update gz set jbgz=jbgz+200 for zc=”讲师”

(8)记录的删除(考点)

首先要知道在VFP中要彻底删除表中的记录分两步走,第一步:作删除标记,即逻辑删除;第二步:彻底删除,即物理删除。 ? 作删除标记的命令

? VFP的命令:DELETE [范围] [FOR 条件表达式] [IN 工作区|别名] ? DELETE-SQL命令:DELETE FROM 表名 [WHERE 条件表达式] ? 彻底删除记录命令(要区分)

? PACK 彻底删除当前工作区中打开的表中有删除标记的记录。 ? ZAP 彻底删除当前工作区中打开的表中所有记录。 ? 恢复带删除标记的记录命令

RECALL [范围] [FOR 条件表达式]

GO BOTTOM (直接跳到最后一条记录)

RECALL 恢复当前记录,无论当前记录是否作了删除标记。

20

南天内部资料,严谨出售

RECALL ALL 恢复当前所有作删除标记的记录。

[例]: 恢复当前所有记录中学号的前两位为”02”的记录

RECALL ALL FOR LEFT(XH,2)=”02”

? 对带有删除标记记录的访问 SET DELETED ON |OFF ON忽略,OFF访问 [注]: 除非是彻底删除,否则在统计记录的条数时,带删除标记的记录仍包含在内。

[例]: SET FILETER TO XB=”女” 恢复 SET FILTER TO

[注]: 与字段的筛选区分 SET FIELD TO 字段名 [例]:set field to xh,xm,xb [注]: set field to不能恢复

(11)记录的浏览命令 (考点)

BROWSE [FIELDS字段列表][FOR 条件][RREEZE 字段名][NOAPPEND];

[NODELETE][NOMODIFY][TITLE 表达式]

说明:

? FIELDS 用于指定在浏览窗口中出现的字段,FOR 用于筛选记录,FREEZE 用于指定可以修改

的字段。NOAPPEND 指定不可追加记录,NODELETE 指定不可删除记录,NOMODIFY 指定不可修改记录,但可追加或删除记录,TITLE 指定浏览窗口的标题,缺省时为表名。 ? 这里用到了“;”分号,用于换行,上下两行是同一条命令。(考点) ? 浏览表记录的两条命令:

? BROWSE [FIELDS字段列表][FOR 条件][RREEZE 字段名][NOAPPEND];

[NODELETE][NOMODIFY][TITLE 表达式] ? SELECT-SQL

例如:browse fields xh,xm,xb for xb=”男”

select xh,xm from xs where xb=”男”

(12)数据的复制命令(考点)

copy to 文件名 [fields字段列表] [范围] [for 条件]

[[type] sdf | xls | delimted [with delimiter | with blank |

with tab | with character delimter]]

将当前工作区中的表的记录复制到指定的文件中,目的文件类型:DBF表文件、TXT文本文件、XLS电子表格文件。 [例]:use xs

copy to xs01 for xb=‘女’ &&&& 文件名:xs01.dbf copy to xs01 fields xh,xm sdf &&&& 文件名:xs01.txt copy to xs01 xls &&&& 文件名:xs01.xls (13)数据的统计命令

? count [范围] [for 条件] [to 变量名] &&& 统计个数

? sum [表达式] [范围] [for 条件] [to 变量名] &&& 求和,其中表达式是数值型的 ? Averge [表达式] [范围] [for 条件] [to 变量名] &&& 求平均值,其中表达式是数值型的 10. 表的索引

21

(9)记录的筛选命令 SET FILTER TO 条件表达式(考点)

(10)字段的筛选命令 set field to 字段列表

? 记录顺序:

? 物理顺序:录入记录的原始顺序,表中记录的存储顺序称为物理顺序,记录号表示了记录的

物理顺序。

? 逻辑顺序:表打开后被使用时记录的处理顺序称为逻辑顺序。

? 索引标识:为了区分一张表的不同索引,每一个索引都有一个索引名,即索引标识。

? 索引关键字:又称为“索引表达式”,它排序的依据。由一个字段或多个字段组成的表达式,当有

多个字段时,字符型直接用,如果类型不同,则通过函数变化,转换成相同类型,通常化成字符型。不能基于备注字段和通用字段建立索引。(考点) 例:

【单个字段】按ylbx(养老保险)创建一个普通索引,标识名为ylbx,要求按ylbx降序排序 【字符+数字】为gz表创建一个候选索引ghsfgz,要求按gh字段排序,gh相同再按sfgz排序 索引标识为:ghsfgz 表达式为 gh +Str(sfgz) sfgz为数值型

【字符+字符】为xs表创建普通索引xdhzydh,要求按xdh排序,xdh相同再按zydh排序 索引标识为:xdhzydh 表达式为 xdh + zydh 为什么不要加STR? 【字符+日期】为xs表创建普通索引xdhcsrq,要求按xdh排序,xdh相同再按csrq排序 索引标识为:xdhcsrq 表达式为 xdh + Dtoc(csrq,1) 为什么要用 ,1 【首字母+数值】为gz表创建普通索引ghsfgz,要求按gh排序,gh相同再按sfgz排序 索引标识为:ghsfgz 表达式为 Left(gh,1)+STR(sfgz)

【数值+数值】已知cj表中有两门课程成绩cj1和cj2,创建索引先按cj1排序,再按cj2排序 表达式为 STR(cj1)+ STR(cj2)

【数值+数值型】已知cj表中有两门课程成绩cj1和cj2,创建索引按总成绩排序

表达式为 cj1 + cj2

【其他】创建一个普通索引recsort,按物理记录顺序的倒序排序,即记录号为1的记录排最后。

表达式为 recno( ) 排序:降序

? 索引类型:主索引(数据库表特有),候选索引,普通索引,唯一索引

前两种索引用于约束表中记录的唯一性,唯一索引用于控制索引结果的唯一性,它不允许两个具有相同索引值的记录包含在同一个唯一索引中,但它并不要求表中的记录具有唯一性。 ? 索引文件种类:(考点)

? 结构复合索引文件(.CDX):文件名同表名,自动与表同步打开,关闭,更新。 ? 非结构复合索引文件(.CDX):文件名不同于表名,不会自动打开。 ? 独立索引文件(.IDX):文件名用户定,不会自动打开。 ? 主索引与主控索引

? 主索引是索引的一种类型。

? 主控索引是在某一时刻对表的显示或访问顺序起作用的索引,可以把复合索引中的住索引或其它类型的索引或独立索引设置为主控索引。 ? 与索引相关的一些命令

? 创建:INDEX ON 索引表达式 TAG 索引名 [[FOR 条件表达式];

[ASCENDING|DESCENDING] [UNIQUE| CANDIDATE]]

ASCENDING 表示索引排序是升序,DESCENDING 表示索引排序是降序,省略时表示升序。UNIQUE 表示唯一索引,CANDIDATE 表示候选索引,省略时表示普通索引。 [例]: INDEX ON XH TAG XH1

22

南天内部资料,严谨出售

? 删除:DELETE TAG 索引名1 [,索引名2] 或 DELETE TAG ALL ? 设置主控索引:

? 打开表的同时设置 USE XS ORDER XH ? 打开表后再设置 (考点)

SET ORDER TO [索引名][IN 区号|别名] [ASCENDING | DESCENDING] [例]:在工作区3中设置学生表中的学号为主控索引并将序排列

USE XS

SET ORDER TO XH IN 3 DESCENDING

? 索引快速定位记录的命令

SEEK 表达式 [ORDER 索引名 [ASCENDING | DESCENDING]]

注:只能在具有索引的表中使用,且只能基于索引关键字进行搜索。

第四章 数据库的创建和使用

1.数据库的创建命令

CREATE DATABASE [数据库名 | ?] 2. 数据库的组成 (1)数据库表

数据库表是从属于某一个数据库的表。数据库表与数据库之间的相关性是通过表文件(.dbf)与库文件(.dbc)之间的链接实现的。双链接包括前链和后链。 链接 前链 后链 (2)视图 (3)连接

(4)存储过程:即保存在数据库中的过程代码,由用户自定义函数或创建表与表之间的参照完整性规

则时系统创建的函数组成。设置存储过程的操作方法:选择“存储过程”,点击“新建”或“修改”按钮,在代码窗口中输入过程或函数代码,注意:一定要有过程或函数的开头和结尾。输入完成后,在存储过程的列表中将出现新输入的过程或函数名。

3. 数据库的打开命令:open database [库名] [exclusive | shared][noupdate][validate]

注:数据库与表不同,没有工作区的概念,可以同时打开多个数据库。(考点) 4. 设置当前数据库 多次打开数据库时,最后打开的一个数据库就是当前数据库。

方法:

? “常用”工具栏的“数据库”下拉列表选择当前数据库。 ? 命令:SET DATABASE TO 数据库名。 5. 关闭数据库

? “项目管理器”的“关闭”按钮

? close database 命令(关闭当前数据库) 6. 删除数据库

23

保存位置 .dbc数据库中 .dbf表头文件中 保存内容 表文件的路径和文件名 数据库文件的路径和文件名 在windows窗口或用delete file命令删除的数据库,不能删除链接信息。而使用“项目管理器”中的“移去”进行删除,则可删除链接信息,使库表变成自由表。 7. 数据库表

(1)创建:(操作略),如数据库已被打开,则使用creat table-sql创建表,如不用free,则该表不是自由表。 例如:

open database sjk

creat table xs1(xh c(6),xm c(8)) &&&& 数据库表 creat table xs2 free(xh c(6),xm c(8)) &&&& 自由表 (2)数据库表的字段的扩展属性和表扩展属性(略,参看上机知识点) (3)数据库表的添加与移去

? 数据库表的添加:添加表就是使自由表成为数据库表,本质上是建立表与数据库之间的双向链接。 操作:“项目管理器”—数据库—表—添加 “数据库设计器”—添加表

命令:add table 表名 [name 长表名]

? 数据库表的移去:移去表就是使数据库表成为自由表,本质是删除数据库表与数据库之间的双向链接。当数据库表变成自由表时,数据库表的字段扩展属性和表扩展属性将丢失(即无效),数据库表的主索引将自动变成侯选索引,其它的不变。(考点) 操作:“项目管理器”—数据库—表—移去 “数据库设计器”—移去表

命令:remove table 表名 [delete] (其中delete表示从磁盘中删除表) free table 表名

说明:如果数据库被删除,则库表的这些信息将丢失,此时需用FREE TABLE命令把表转换成自由表才可用。(考点)

8. 有关数据库及数据库表的几点说明 ? 数据库表与自由表有区别

? 打开或说明非当前数据库中的表,用“!” ? 在移动数据库文件的存储位置时,需考虑双向链接 ? 在移去数据库表时,其中的字段、表扩展属性等会丢失 ? 多次修改数据库、数据库表结构之后,应清理数据库 9. 表之间的联系

表之间的关系主要有三种:一对一,一对多,多对多。理解好“表之间的关系主要要掌握好主关键字和外部关键字”,如果两张表都具有相同的主关键字,则认为它们具有“一对一”关系,如果一张表的主关键字存在于另一张表中称为“外部关键字”,则认为它们具有“一对多”关系。 (1)一对一关系

设A、B两张表,A表中的一个记录在B表中只有一个记录与之对应,B表中的一个记录在A表中也只有一个记录与之对应。在很多情况下,两张表可以简单地合并成一个表。 (2)一对多关系

如A表中的任意一个记录在B表中可有多个记录与之对应,而B表中的每个记录,在A表中仅有一个记录与之对应,则称两表之间存在一对多关系。A为主表,B为子表。 (3)多对多关系

24

南天内部资料,严谨出售

若A表的一个记录在B表中可对应多个记录,而B表中的一个记录在A表中也对应多个记录,则称为多对多关系。

遇到多对多关系时,必须建立第三张表,把多对多关系分解成两个一对多关系。第三张表就称作“纽带表”。把两张表的主关键字都放在这个纽带表中。对于纽带表,除了包含两个外部关键字外,还可以有其他字段。纽带表的主关键字可以由两个外部关键字组成。 10. 参照完整性

是用来控制数据的一致性,尤其是控制数据库相关表之间的主关键字和外部关键字之间数据一致性的规则。

1)参照完整性的一般要求(一对多)v 子表的每一个记录在对应的父表中有一个父记录。 ? 在父表中修改记录时,如改了主关键字的值,则子表中相关记录的外部关键字值必须同时改。 ? 在子表中插入记录时,其外部关键字必须是主表主关键字值中的一个。 ? 在父表中删除记录,与该记录相关的子表中的记录必须全部删除。 2)完整性规则:包括更新、删除、插入(考点) ? 更新规则:级联、限制、忽略(对主表而言)

? 更新级联:当修改主表的关键字的值时,若子表有相应的记录,则同步修改子表的记录。 ? 更新限制:当修改主表的关键字的值时,若子表有相应的记录,则禁止对主表记录的修改。 ? 更新忽略:当修改主表的关键字的值时,不管子表有无相应的记录,只更新主表。 ? 删除规则:级联、限制、忽略(对主表而言)同更新规则 ? 插入规则:限制、忽略(对子表而言)

? 插入限制:当向子表中插入一个新记录或更新一个已经存在的记录时,若主表中不存在匹配的

关键字值,禁止插入。

? 插入忽略:当向子表中插入一个新记录或更新一个已经存在的记录时,不管主表,允许插入。 3)在利用“参照完整性生成器”对话框设置参照完整性规则时,系统会自动地生成完成改规则的程序代码。规则的代码被保存在数据库的存储过程中,而规则的实施由主表和子表的触发器完成。(考点) 4)完整性包括:实体完整性、参照完整性和用户自定义完整性。 ? 实体完整性包括两级:(通过对应的有效性规则实现)

? 字段的数据完整性:输入到字段的数据的类型或值必须符合某个特定的要求。 ? 记录的数据完整性:为记录赋予数据完整性规则。 ? 参照完整性:指相关表之间的数据一致性。

? 用户自定义完整性:指由用户通过编程实现对数据完整性的约束。

第五章 查询和视图

本章也是比较重要的章节,对于理论部分,经常会出一些查询和视图的理论分析,以选择题为多;另外一种重要的知识点就是:SELECT-SQL命令,这是每年必考的,除了命令的填空之外,近几年在上机操作的菜单题中经常要将整条命令书写,这是一个难点,也是今后练习的重点。上机操作的设计查询题目这里就不多说了,不过要注意,笔试和上机部分没有明显的区分,它们所含带的知识点都是一样的,只是考察这些知识点的方式不同,两种是相互融合的。 一、 SQL的基本概念 1.SQL语言主要特点

(1) SQL是一种一体化的语言。

它提供了一系列完整的数据定义、数据查询、数据操纵和数据控制等功能。 (2) SQL是一种高度非过程化的语言。

25

SQL语言不需要告诉计算机“如何”做,只需要描述清楚用户要“做什么”,系统就自动完成全部工作。

(3) SQL语言非常简洁。

虽然SQL语言功能强,但仅有为数不多的几条命令,语法也非常简单。 (4) SQL以统一的语法结构对待不同的工作方式。

SQL语言可以直接在VFP命令窗口中以人机交互方式使用,也可以嵌入到程序设计语言中执行

2.SQL语言的执行

SQL语句可以在命令窗口中执行,也可以作为查询或视图(的内容)被使用,还可以在程序文件中被执行。

二、SQL的查询功能(考点)

1.SQL的核心是查询功能,SQL的查询命令也称作SELECT命令,它的常用语法格式如下: SELECT [ALL|DISTINCT] [TOP 表达式] <目标列表达式>; FROM [数据库名!]<表名>

&& 说明要查询的数据

&& 说明数据来源 INNER|LEFT[OUTER]|RIGHT[OUTER]|FULL[OUTER]] && 说明与其他表联接方式

&& 说明查询的条件 && 对查询结果进行分组 && 限定分组满足的条件 && 对查询结果进行排序

JOIN 数据库名!表名 ON <联接条件>] [WHERE <条件表达式> ] [GROUP BY <分组依据>] [HAVING <条件表达式>] [UNION [ALL]??]

[ORDER BY <排序依据>[ASC|DESC]]

&& 对多个查询结果进行合并 [[INTO ARRAY 数组名| INTO CURSOR 表名|INTO DBF 表名|INTO TABLE 表名] [说明:]

(1) ALL:输出所有查询结果;

(2) DISTINCT:重复的结果只显示一次;(考点)

(3) TOP 表达式:输出结果中的前几条记录,或输出结果的百分之多少的记录;

例如:TOP 3(输出前三条)、TOP 30 PERCENT(输出结果数的30%) (4) 目标列表达式:(输出各列间用“,”隔开。)

? 字段:可以是某个表的字段,如果是两个表都的字段,要把该字段所在表也表示出,

例如:xs.xh, xm, xb

? 合计函数表达式:count( )、sum( )、avg( )、max( )、min( )(考点)

? Count( ):学生人数,教师人数,课程门数等这些是将表中的行进行数数,用Count(*) 没有条件限制;

? Sum( ):对某个数值型字段求和,如对cj求和得到总成绩,对xsl求和得到总销售量,对xf求和得到总学分,对jbgz求和得到工资总额;sum(cj)、sum(xsl)、sum(jbgz) ? Avg( ) :对某个数值型字段求平均,如对cj求和得到平均成绩;avg(cj) ? Max( )、Min( ):对某个字段求最大值,最小值(一般指数值型的字段) ? 其它函数表达式:例如:left(xh,2) as 年级,year(date( ))-year(csrq) as 年龄等 ? 字符串常量:在输出结果中该列将以字符串的内容为结果(考点)

? 说明:一般要给这些函数指定列标题,用AS短语实现,例如:sum(cj.cj) as 总分 (5) FROM子句:需要指出的是“FROM”单词不要书写错了,经常有些同学书写成“FORM”,因为它同

26

|[TO FILE 文件名 [ADDITIVE]|TO PRINTER [PROMPT]|TO SCREEN]] && 查询输出去向

南天内部资料,严谨出售

样是关键字,表示表单,在命令窗口中显示蓝色。

(6) 数据库!表名:如果数据源是非当前数据库中的表,则就用这种方式表示。数据源可以是表,也

可以是视图,但不能是查询。(考点) (7) 联接类型:

? INNER [OUTER] JOIN :内联接(以两张表相同字段的交集为输出结果)

? LEFT[OUTER] JOIN:左联接(以两张表相同字段中左边表字段的集合为输出结果) ? RIGHT[OUTER] JOIN:由联接(以两张表相同字段中右边表字段的集合为输出结果) ? FULL[OUTER] JOIN :完全联接 (以两张表相同字段的并集为输出结果)

(8) ON 联接条件:这是经常考到的,当基于多表查询,一定要建立联接条件,书写很简单:首先将

两张表的名字写在“=”的左右两边,同时别忘了表和字段的“.”,然后将两张表的公共字段写在两边的“.”后面,这样就书写好了。例如:js.gh=rk.gh, kc.kcdh=cj.kcdh。要了解“=”等号两边是具有相等值的两个字段,千万不要随便写,例如:xs.xm=cj.cj,这是错的。 (9) 联接条件书写另一种位置:也可以不放在FROM子句里,放在WHERE子句中,直接将联接条件写

在其中,注意:这里没有指出联接类型,指内联接,不能指出其他联接类型,如果需要指定的话,必须要将联接条件放在FROM子句中。

(10) WHERE 条件表达式:是对数据源的筛选记录,如果条件表达式是SELECT-SQL命令,则该查询

就是子查询。(考点)

(11) GROUP BY 分组依据:该子句是用于分组的。

? 为什么要分组呢?分组就将某个字段具有相同值的记录分别放在不同的组中,然后对每组记录进

行“压缩”,也就是统计个数、求和、求平均值、求最大、最小值,结果每组记录就被压缩成了一条记录。需要注意的是分组依据不同,分的组的个数不同,由于每组对应一条记录,最后输出结果的记录数也不同(考点分析输出结果的记录个数)。

? 如果不能深刻理解上面内容,可以用简单的方法:只要记住:“在前面只要用到合计函数中的任何

一种,百分之九十一定要分组。”,

? 有一种情况例外,统计是要对所有记录进行,例如统计全校所有学生的人数,不需要统计每个系

每个专业的人数,则是将所有学生记录分成一组,统计个数,所以不要分组。(课本P139例16)。 ? 那么具体对应分组的简单方法:分组的依据要看用到合计函数的字段的定语,例如要统计学生表

中各系各专业的人数,人数要用到合计函数count( ),那么人数前面的定语有两个“各系”和“各专业”,因此就依次先按系分组,再按专业分组,因此分组依据为:xdh,zydh。多个分组依据用“,”隔开。

? 在书写分组依据时,如果是很长的表达式,可以用数字代替,这里的数字代表着查询结果中输出

的第几列。

(12) HAVING 表达式:满足条件,对查询结果进行筛选,要和WHERE子句区分开来(考点)。一般是

计算的字段,例如总分、工资总额、人数等。

(13) ORDER BY 排序依据:对查询结果进行排序,排序依据也可以用数字代替,多个排序依据用“,”

隔开。ASC:升序,DESC:降序,省略为升序。

(14) UNION:将两个查询合并在一起,即将两个查询结果并在一起(课本P139例16)(考点)。与前

面提到子查询是有区别的。子查询是:外查询是基于某个查询的结果为筛选条件再进行查询,不是两个查询结果的合并。如果使用了UNION子句,要对最终查询结果排序,则需要使用1个ORDER BY 子句。(考点) (15) INTO 子句:

27

查询去向 数组 临时表 表文件 (16) TO 子句:

查询去向 ASCII文件 打印机 VFP主窗口 子句 INTO ARRAY 数组名 INTO CURSOR 表名 INTO DBF|TABLE 表名 子句 TO FILE 文件名 TO PRINTER TO SCREEN 2.例子:以上语句是必须要掌握的SQL SELECT命令,下面分别举例介绍各种用法。以下例子基于如下的数据库表: 学生表XS.DBF结构:

字段名 xh xm xb zydh ximing jg csrq zp 类型 C C C C C C D G 宽度 8 6 2 6 18 10 小数位数 字段含义 学号 姓名 性别 专业代号 系科名称 籍贯 出生日期 照片 成绩表CJ.DBF结构:

字段名 xh kcdh cj 类型 C C N 宽度 8 4 3 小数位数 字段含义 学号 课程代号 成绩 课程表KC.DBF结构:

字段名 kcdh kcm kss bxk xf (1)简单查询

简单查询有2种,一种由SELECT和FROM短语构成“无条件查询”;另一种由SELECT和FROM以及WHERE短语构成“条件查询”。

28

类型 C C N L N 宽度 4 18 2 1 小数位数 字段含义 课程代号 课程名 课时数 必修课 学分

南天内部资料,严谨出售

【例】查询学生表中所有字段

SELECT * FROM XS

注意:* 是通配符,代表全部字段列表。 【例】查询学生表中所有学号和姓名

SELECT xh ,xm FROM XS

注意:字段名之间要用英文逗号分隔。 【例】从学生表中查询所有系科名称,要求不重复显示相同的系科名称

SELECT DISTINCT ximing FROM XS

注意:如果要去掉重复值只需使用DISTINCT短语。 【例】从成绩表中查询所有成绩>85分的学号

SELECT DISTINCT xh FROM cj WHERE CJ.cj>85 注意:简单条件查询要使用WHERE短语。 (2)简单联接查询

联接是关系的基本操作之一,简单联接查询是一种基于多个关系(往往是基于多张表)的查询。 【例】查询至少有一门课程成绩大于85的学生姓名

SELECT xm FROM XS,CJ WHERE CJ.cj>85 and XS.xh=CJ.xh 注意:(1)这里所要查询的数据分别来自“学生表”和“成绩表”;

(2)如果在FROM之后有2个表,那么这2个表之间一定有一种关系,如本例中的

XS表和CJ表都有“学号”字段,否则无法构成检索表达式; (3) 本例中“XS.xh=CJ.xh”是联接条件;

(4)当FROM后面有多个关系含有相同的字段名时,必须用表别名前缀直接指

明字段所属的表,如“XS.xh” 。

(3)几个特殊运算符

在SQL语句的WHERE子句后的联接条件,除了使用VFP的关系表达式和逻辑表达式外,还可以使用几个特殊运算符:[NOT]IN/[NOT]BETWEEN?AND?/[NOT]LIKE 【例】在学生表中查询所有计算机系的学生,不要其他的学生信息。

SELECT * FROM XS WHERE ximing LIKE “计算机系”

注意:可以使用NOT运算符来设计否定条件,如查询所有非计算机系的学生 SELECT * FROM XS WHERE NOT (ximing LIKE “计算机系”) 【例】在学生表中查询所有姓李的学生。

SELECT * FROM XS WHERE xm LIKE “李%” 注意:%匹配多个任意符号,_匹配一个任意符号。 【例】查询所有成绩在80和90之间的学生。

SELECT XS.xm FROM XS,CJ WHERE (CJ.cj BETWEEN 80 AND 90) AND (XS.xh=CJ.xh)

(4)计算查询

【例】计算英语课程的平均成绩、最高成绩、最低成绩。

SELECT kcm,AVG(CJ.cj) as “平均成绩”, MAX(CJ.cj) as “最高成绩”; , MIN(CJ.cj) as “最低成绩” FROM CJ,KC ; WHERE kcm= “英语” and CJ.kcdh = KC.kcdh

注意:这里没有用分组,是因为题目只要统计英语课程的,就一组记录(英语课程),不需要其他课程的,只要将英语课程的记录筛选出来,然后统计即可,不需要分组。如果改成计算各门课程

29

的平均成绩、最高成绩、最低成绩,就需要分组了。 【例】统计学生表中专业数目。

SELECT COUNT( DISTINCT zydh ) FROM XS

注意:COUNT 函数的参数可以是字段名,也可用*号来通配,如COUNT(*)。

加DISTINCT是为了排除相同的项。

(5)分组查询

SQL不仅具有一般的检索功能,还可直接对检索结果进行计算,用于计算的函数有: COUNT()——计数

SUM()——求和

AVG()——求平均值

MAX()——求最大值

MIN()——求最小值

SQL提供的计算函数可以对满足条件的记录进行各种计算,这些函数还可以从一组值中计算出一个汇总信息,通常和GROUP BY分组子句配合使用,完成特定的查询。 【例】统计每门课程的名称、平均成绩。

SELECT KC.kcm,AVG(CJ.cj) as “平均成绩” FROM KC,CJ ; GROUP BY CJ.kcdh WHERE CJ.kcdh = KC.kcdh 【例】查询最少选修3门课程的学生姓名。

SELECT XS.xm FROM XS WHERE xh IN ;

(select xh from CJ group by xh HAVING count(*)>=3)

注意:HAVING子句的作用是指定查询的结果所满足的条件,通常和GROUP BY配合使用;

而WHERE子句的作用是指定参与查询的表中的数据所满足的条件。

【例】按系科统计各专业男、女生人数、系科名称、性别。

SELECT XS.ximing,XS.xb,COUNT(XS.*) as “学生人数” FROM XS ; GROUP BY XS.ximing , XS.zydh , XS.xb

注意:题目要求按系科、专业、性别进行统计,因此应按系科、专业、性别来分组;

分组表达式若有多个,用逗号分隔。

(6)排序

SQL使用ORDER BY进行排序的操作,默认是升序排序。 【例】按学号升序、成绩降序检索学生成绩。

SELECT * FROM CJ ORDER BY xh ASC , cj DESC

(7)查询输出去向

FROM子句中的INTO与TO选项用于指定查询结果的输出去向,默认为浏览窗口。INTO选项有3种输出去向:ARRAY <数组>、CURSOR <临时表>、TABLE|DBF <表名>;TO选项也有3种输出去向:文件、屏幕、打印机。

【例】查询学生名单,并生成永久表STUDENT.DBF。

SELECT * FROM XS INTO DBF STUDENT

【例】查询前10名学生名单,将查询结果保存在文本文件TMP.TXT中。

SELECT TOP 10 * FROM XS TO FILE TMP ADDITIVE 注意:TOP 10表示只取前10条记录。

ADDITIVE选项表示以追加方式在文件尾部添加数据,否则为覆盖方式。 【例】查询前10%的学生名单,将查询结果保存在临时表TEMP中。

SELECT TOP 10 PERCENT * FROM XS INTO CURSOR TEMP 注意:TOP 10 PERCENT表示只取全部记录的前10%条记录。

30

南天内部资料,严谨出售

【例】查询学生名单,将查询结果保存在数组A中。

SELECT * FROM XS INTO ARRAY A

(8)子查询(在上机操作题中考过。)

【例】显示js表中已担任课程教师的姓名和系名。

select js.xdh,js.xm from js where js.gh in (select rk.gh from rk) 在任课表中存在的教师的工号,说明该教师担任课程。

(9)组合查询

【例】查询全校师生名单。要求如果是教师必须注明“教师”,结果中包含四个列:系名、类别、姓名和性别,并按系名排序。

Select xim.ximing,’教师’as 类别,js.xm,js.xb from js,xim where js.xdh=xim.xdh; Union;

Select xs.ximing,’学生’ as 类别,xs.xm,xs.xb from xs,xim where xs.xdh=xim.xdh Order by 1

这里’教师’和 ’学生’是字符串常量。 三、SQL的操作功能

SQL的操作功能是指对数据库中表记录的操作功能,包括记录的插入、删除和更新操作。 (1)插入记录

在一个表的尾部追加记录时,使用插入操作,INSERT 格式:

INSERT INTO <表名>[(字段名列表)] VALUES(<表达式1[,表达式2?]>) 【例】在学生表中插入一条新记录。 INSERT INTO XS(xh , xm , xb , csrq);

VALUES(‘01001023’ , ‘王平’ , ‘男’ ,{^ 1984-05-03} ) (2)删除记录

用SQL语言删除记录的命令格式:

DELETE FROM <表名> WHERE <条件表达式> 【例】删除学生表中“王平”记录。 DELETE FROM XS WHERE xm= ‘王平’

注意:DELETE的结果只是逻辑删除记录,只有执行PACK才能物理删除。 (3)更新记录

更新是指对记录进行修改,用SQL语言更新记录的命令格式:

UPDATE <表名> SET <字段名1>=<表达式1>[,<字段名2>=<表达式2>?]; WHERE <条件表达式>

【例】将成绩表中所有课程代号为2的分数降低2% 。 UPDATE CJ SET cj=0.98*cj WHERE kcdh=’2’ 注意:若省略WHERE子句,将对表中全部记录进行修改。

四、SQL的定义功能

SQL的定义功能包括数据库的定义、表的定义、视图的定义、存储过程的定义、规则的定义和索引的定义的功能。

(1)表的定义(创建一个含有指定字段的表结构)

【例】创建自由表“成绩表”。

CREATE TABLE CJ FREE( xh C(8) , kcdh C(4) , cj N )

31

注意:若无FREE选项,将在打开的数据库中创建数据库表CJ。 (2)表的删除

删除表的SQL命令是:DROP TABLE <表名>

删除表将直接从磁盘上删除表DBF文件,因此应在当前打开的数据库中删除数据库表,否则以后在使用数据库时会出现错误。 【例】删除自由表“成绩表”。 DROP TABLE CJ (3)视图的定义

创建视图的SQL命令是:CREATE VIEW <视图名> AS SELECT ? 【例】创建一个包含姓名、性别、课程代号、成绩的视图MYVIEW。 CREATE VIEW MYVIEW AS SELECT XS.xm ,XS.xb ,CJ.kcdh ,CJ.cj ; FROM XS , CJ WHERE XS.xh = CJ.xh

五、查询与视图

1.查询与视图的基本概念和差异 (1)查询的主要特点

? 查询是一个扩展名为.QPR的文件。 ? 查询本质上是一条SQL语句。

? 通过DO命令来执行查询。运行查询的命令:DO 查询名.qpr(考点) ? 查询的结果可以是表、图形、磁盘文件。 (2)视图的主要特点

? 视图是一个利用SQL SELECT语句定制的虚拟表或逻辑表,保存在数据库中,没有文件扩展名,

当它所在的数据库被删除时,视图也不存在了。而查询和数据库没有这样的关系。 ? 视图具有查询的功能,即可以从多个表或其他视图中提取信息。

? 视图具有表的功能,即可以通过视图更新它所基于的源表的数据,而查询不可以。可以基于视

图建立查询,但是不能基于查询建立查询。

2. 查询设计器的使用(略)

3. 建立各种查询、选择查询结果去向、运行查询(略) 4. 本地视图的建立和视图设计器的使用 【例】打开“MYVIEW”视图。 OPEN DATABASE JXGL

USE MYVIEW

注意:使用视图前,应先打开视图所在的数据库。打开视图的同时,视图所基于的基表也会自动打开,但是关闭视图时,基表不会自动关闭。 【例】显示视图“MYVIEW”的结构。

USE MYVIEW NODATA SELECT MYVIEW BROWSE

注意:使用NODATA子句将不显示记录,只包含视图的结构信息。 【例】重新命名视图“MYVIEW”为“NEW_VIEW”。

RENAME MYVIEW TO NEW_VIEW

注意:在重新命名视图前,必须先打开要改名的视图。

32

南天内部资料,严谨出售

【例】删除视图“MYVIEW”。

DELETE VIEW MYVIEW

注意:在删除视图前,必须先打开视图所在的数据库并设置其为当前数据库。

第六、七、八章 表单和控件

这三章的内容是融合在一起的,考点可以是小知识点,也可以和前几章内容结合在一起出一些大的题目。这几章也是考试中的重点,大家应该发现,考题中小的知识点可以来自于某个章节,但是,有些题目经常是综合几章的知识点出的,所以,希望大家在掌握单个的知识点之外还要会综合应用,这是这几章比较重要的部分。 一、面向对象程序设计基本概念 1. 面向对象程序设计主要特点

? 问题对象的自底向上的功能综合,从内部结构上模拟客观世界。 ? 自然、直接地反映现实世界,降低开发工作量和系统维护费用。 ? 消息传递机制与分布式处理系统、网络通信等模型自然地融合

? 事件驱动,即系统引发事件时,才执行相应的事件代码(传统的面向过程的程序是按顺序执行的)。

? 面向对象程序设计是通过对类、子类和对象等的设计来体现的。 2. 类和对象

(1)类:类定义了对象特征以及对象外观和行为的模板,刻划了一组具有共同特征的对象。 (2)类的特征:(考点)

? 封装性:隐藏了类中对象的内部数据或操作细节,只看到外表信息。

? 继承性:任何类都可以从其它已有的类中派生,新类保持了父类中的行为和属性,但增加了

新的功能。体现了面向对象设计方法的共享机制。

? 多态性:相同的操作可作用于多种类型的对象上,并获得不同的结果。

? 抽象性:提取一个类或对象与众不同的特征,而不对该类或对象的所有信息进行处理。 (3)基类:VFP系统内部定义的类称为基类,如VFP表单和所有控件。它可作为用户自定义类的基础。

基类包括容器类和控件类。容器类是其他类的基类,如表格、选项按钮组;控件类是可以包含在容器类中的基类,不包含其他类,如命令按钮、文本框。 容器类 容器 页框 控件 控件类 复选框 文本框 工具栏 页面* 编辑框 形状 组合框 表单集 命令按钮组 列表框 线条 图像 计时器 表单 选项按钮组 标签 标头* OLE绑定型控件 命令按钮 表格 表格列* 微调框 选项按钮* OLE容器控件 分隔符* 自定义 注:* 这些类是容器类的集成部分,在类设计器中不能基于它们创建子类。

(4)容器类: 容器 命令按钮组 命令按钮

33

能包含的对象 集合属性 Buttons 计数属性 ButtonCount 容器 控件 表单集 表单 表格列 表格 选项按钮组 页框 页面 工具栏 任意控件 任意控件 表单、工具栏 页框、任意控件、容器或自定义对象 计时器和其他列对象以外的任意对象 表格列 选项按钮 页面 任意控件、容器和自定义对象 任意控件、页框和容器 Controls Controls Forms Controls ControlCount ControlCount FormCount ControlCount ControlCount ConlumnCount ButtonCount PageCount ControlCount ControlCount 标头对象以及除表单、表单集、工具栏、Controls Columns Buttons Pages Controls Controls (5)子类:子类是以其他类定义为起点,为某一种对象所建立的新类,子类将继承任何对父类(即子类所基 于的类)所做的修改。

(6)类库:存储类的文件,每一个以可视方式设计的类都存储在一个类库中。类库文件的扩展名为 .VCX 。

(7)对象:是类的实例,包括了数据(属性)和过程(操作)。每个对象都具有属性、事件和方法。

? 属性(Property)――定义对象的特征或某一方面行为,是由类所决定的(可以定义新属性)。属性的值可在设计阶段或运行阶段进行设置(只读属性例外,部分属性只能在执行阶段设置)。 ? 事件(Event)――是由对象识别的一个动作,用户可为其编写处理代码,每当事件产生,便执行相应的事件代码。事件可由用户产生(如CLICK,KEYPRESS事件),也可由程序和系统产生(如计数器TIMER事件)。用户不能新建事件。

? 方法(Method)――是对象能够执行的一个操作,是与对象相关联的过程(如THISFORM.RELEASE的RELEASE释放表单方法)。通常在事件代码中被调用,用户可新建新方法。

(8) 基类事件的最小集合(考点)

事件 Init Destroy Error 说明 当对象创建时激活。 当对象从内存中释放时激活。 备注 在考试时,要会找到事件 当类中的事件或方法过程中发生错误时激活。 (9) 基类属性的最最小集合

属性 Class BaseClass ClassLibrary ParentClass 该类属于何种类型。 该类由何种基类派生而来,例如 Form、Commandbutton 或 Custom 等 该类从属于哪种类库。 对象所基于的类。若该类直接由 Visual FoxPro 基类派生而来,则 ParentClass 属性值与 BaseClass 属性值相同。 (10) 属性、事件、方法的调用(考点)

? 设置对象属性

<引用对象>.<属性>=<值>

34

说明

南天内部资料,严谨出售

例:

thisformset.form1.text1.value=date()

thisformset.form1.text1.backcolor=rgb(192,192,192) thisformset.form1.text1.fontname=”黑体” 可简化为:

With thisformset.form1.text1 .value=date()

.backcolor=rgb(192,192,192) .fontname=”黑体” Endwith ? 调用方法 <引用对象>.<方法> 例:

thisform.release (或release thisform 特例) thisform.text1.setfocus

thisform.commandgroup1.setall(“enabled”,.f.) && 带参数的方法 ? 对象引用(考点)

this ――――当前对象

thisform ――――当前表单(当前对象所在地表单) parent ――――当前对象的直接容器对象 activeform ――――当前活动表单 activecontrol ――――当前活动控件 _screen ――――屏幕对象 _vfp ————VFP应用程序对象

二、表单和控件 1.一些通用属性: 属性 Caption Name Value Enabled Visible FontSize等 含义 标题 对象名 控件的值 可用 可见 字体等 控件 页面等 每个控件都有 文本框、列表框、组合框、微调框、命令按钮组、页框等 每个控件 每个控件 显示文字的控件 备注 的控件的改法 在设计器中有些控件内显示的就是控件的Name值。例如:文本框、列表框等。 在运行时有些控件内显示的就是控件的Value值。例如文本框、列表框等。 字体(FontName)、字号(FontSize)、粗体(FontBold)、斜体(FontItalic)等都Font开头 ForeColor/ BackColor

35

表单、按钮、标签、选项按钮、注意按钮组、选项按钮组、页框等“成组”前景色/背景色 显示文字的控件 显示文字的颜色/文字后面的颜色

Width/Height 宽度、高度 Left/Top Default/ Cancel Alignment 文本对齐方式 距表单 默认/取消 每个可见控件 按钮等 文本框、编辑框、微调框等 与“ENTER”键/与“取消”对应 2.一些常用方法: 属性 AddItem RemoveItem SetFocus Refresh Release Hide/Show Clear Cls SetAll 含义 添加条目 移除条目 设置焦点 刷新 释放 隐藏/显示表单 清除内容 清除内容 为容器对象中所有控件指定一个属性设置 3.一些常用事件 事件 Click/DbClick Init Activate GotFocus LostFocus Valid Unload Error Timer InterActiveChange

4.具体控件(各个控件的英文名字要记住,在第一题中会用到。) 1.表单(Form): 默认对象名:Form1等 属性 Caption Borderstyle Width

控件 列表、组合 列表、组合 备注 向其中添加一行 从其中移去一行 文本、编辑、表格等 使其获得焦点 表单、表格、页面等 使其刷新,从新获取数据 表单 表单 列表框、组合框 表单 页框、表格、命令按钮组、选项按钮组等 关闭表单 清除表单上绘制的图形、文字 触发时机 单击、双击 对象创建 对象激活 得到焦点 失去焦点 即将失去焦点 释放时候 出错误时候 计时器到时点 当列表框或文本框等中的内容发生改变的时候 控件 常用控件 每个控件 表单、表单集 计时器 文本框、列表框、组合框等 备注 含义 标题 边框类型 宽度 备注 在代码中其值为字符型 0-无边框,1-单线边框,2-固定对话框,3-可调边框 36

南天内部资料,严谨出售

AlwaysOnTop DeskTop ShowWindow MinButton MaxBbutton CtrolBox WindowType Icon MinHeight MinWidth 属性 RowSourceType RowSource 是否位于其他窗口之上 表单窗口的显示 是否有最小化按钮 是否有最大化按钮 左上角是否有图标 表单是否为模式表单 修改表单标题栏上的图标 表单的最小高度 表单的最小宽度 含义 数据源类型 数据源 0-在屏幕中,1-在顶层表单中,2-作为顶层表单 当两项同时为F.时,则两个按钮都不出现 同时右上角是否有按钮 0-无模式,1-模式 备注 常考的:1-值,2-别名,3-SQL语句,6-字段 考点:RowSourceType:6-字段,列表框要求显示kcdh,kcm两列信息,则RowSource:kc.kcdh, kcm 表单是否包含在VFP主窗口中 2.列表框(ListBox):默认对象名:List1等 ListCount Value BoundColumn ColumnCount ColumnLines ControlSource 属性 Style …… 属性 Caption Name Default Cancel Enabled Picture 属性 PageCount Caption

列表数据项的数目 列表框的值 包含多列的列表框中,哪一列绑定到该控件的Value属性上 列表框包含列的个数 显示或隐藏多列间的分隔线 字段源 运行时,列表框中的内容。 常考 列表框绑定到某一字段 备注 0-下拉组合框(运行后可以输入数据,即具有文本框功能),1-下拉列表框(运行后不能输入数据) 备注 命令按钮上显示的内容 运行后是否响应“回车键” 运行后是否响应“ESC”键 备注 增加一个页面,就是通过增加该属性的值 37

3.组合框(ComboBox):默认对象名:Combo1等 含义 控制组合框是否允许用户输入数据 其余与列表框相同 含义 标题 对象名 默认按钮 取消按钮 是否能用 按钮上显示的图片 含义 页面个数 每个页面的标题 4.命令按钮(CommandButton):默认对象名:Command1等 5.页框(PageFrame):默认对象名:Pageframe1等 ActivePage Pages Value 属性 BorderStyle ButtonCount Caption Value ButtonCount ControlSource 属性 BorderStyle ButtonCount Caption Value ButtonCount 页框中活动的页码 页框中各个页 值(其值为数值型) 含义 边框类型 命令按钮个数 每个按钮的标题 具体选定的第几个命令按钮 选项按钮个数 数据源 含义 边框类型 命令按钮个数 每个按钮的标题 页框的值表示,选定的是第几个页面 备注 其值为数值型 增加按钮,就是通过增加该属性的值 绑定到某一字段 备注 其值为数值型 增加按钮,就是通过增加该属性的值 0-未选种,1-选种 备注 常考的:0-表,1-别名,3-SQL说明 同时可以获得焦点 增加一列,就是通过增加该属性的值 0-无,1-水平,2-垂直,3-两者都有 备注 备注 运行时,控件中的内容。考点:默认值的设置,38

6.命令按钮组(CommandGroup):默认对象名:Commandgroup1等 7.选项按钮组(OptionGroup):默认对象名:Optiongroup1等 具体选定的第几个命令按钮 选项按钮个数 每个选项按钮的Value 按钮是否被选种 8.表格(Grid):默认对象名:Grid 1等 属性 ReacordSourceType ReacordSource ReadOnly DeleteMark ColumnCount RecordMark GridLines ScrollBars 属性 Enabled Interval 属性 SpinnerHightValue SpinnerLowValue KeybordHighValue KeybordLowValue Value

含义 记录源类型 记录源 只读 是否显示删除标记列 列的个数 是否显示记录选择器列 有无表格线 表格滚动条 含义 是否废止 时间间隔(毫秒) 含义 允许鼠标输入的最大值 允许鼠标输入的最小值 允许键盘输入的最大值 允许键盘输入的最大值 值 9.计时器(Timer):默认对象名:Timer1等 10.微调控件(Spinner):默认对象名:Spinner1等

南天内部资料,严谨出售

在设计器中,为Value输入的值。 Increment Alignment 属性 Value Caption 属性 Value PassWord ReadOnly Enabled Alignment Value Alignment ScrollBars 属性 Caption BackStyle AutoSize WordWrap 属性 BorderWidth: BorderStyle: LineSlant: 属性 Curvature FillStyle SpecialEffect 步长 文本对齐方式 含义 值 复选框显示的内容 含义 值 输入字符显示的内容 只读 是否废止 文本对齐方式 值 文本对齐方式 表格滚动条 含义 显示的内容 背景类型 是否可以自动调整大小 是否可以自动换行 含义 线宽 线型 线倾斜方向 含义 显示的图形样式 填充形状的图案 控件的不同样式选项 备注 运行时,列表框中的内容。考点:默认值的设置,在设计器中,为Value输入的值。 常考的:“#”,“*”,在代码中其值为字符型 同时可以获得焦点 不能获得焦点,数据不可修改 0-左,1-右,2-中间,3-自动(默认) 运行时,列表框中的内容。考点:默认值的设置,在设计器中,为Value输入的值。 0-左,1-右,2-中间,3-自动(默认) 0-无, 2-垂直 备注 0-透明,1-不透明 备注 备注 0-矩形,1~98圆角,99-椭圆 三维或平面 点击上下箭头每次改变的值,默认值为1 0-左,1-右,2-中间,3-自动(默认) 备注 .F.、.T.、.NULL.(0、1、2) 11.复选框(CheckBox):默认对象名:Check1等 12.文本框(TextBox):默认对象名:Text1等 13.编辑框(EditBox):默认对象名:Edit1等 14.标签(Label):默认对象名:Label1等 15.线条控件(Line):默认对象名:Line1等 16.形状控件(Shape):默认对象名:Shape1等 5.控件分类(考点)

根据控件与数据的关系划分:绑定型控件和非绑定型控件

ReacordSourceType属性:用于指定与表格控件相绑定的数据源类型。 ReacordSource属性:用于指定与表格控件相绑定的数据源。

39

RowSourceType属性:用于指定与列表框控件绑定的数据源类型。 RowSource属性:用于指定与列表框控件绑定的数据源。

ControlSource属性:用于指定与其他控件(除表格)相绑定的数据源。(考点) 注意:列表框也有ControlSource属性。

复选框 数据绑定控件 选项按钮 编辑框 命令按钮 非绑定型控件 表单 分隔符 表格列 选项按钮组 线条 表单集 页面 组合框 微调框 形状 图像 页框 容器 列表框 表格 命令按钮组 标签 标头 工具栏 OLE绑定型控件 文本框 OLE容器控件 计时器 6.在数据环境中将表或字段拖到表单上,直接生成控件。(考点)

创建的对象 表格 复选框 编辑框 文本框 OLE绑定型控件 拖动的项 表 逻辑型字段 备注型字段 其他类型字段 通用型字段 注意:这些都是默认的,在数据库表结构中通过修改“显示类”可以改变生成的控件。 【试题10.1】 在Visual FoxPro中表单(Form)是 _______。 A) 数据库中表的清单 B) 一个表中记录的清单 C) 数据库中可以查询的对象清单 D) 窗口界面 答案:D

分析:表单是Visual FoxPro 提供的最常见的数据交互式操作窗口界面,表单为数据库信息的显示、输入和编辑提供了非常简便的方法,表单的设计是可视化编程的基础。表单设计充分体现了面向对象程序设计的风格。面向对象程序设计有两个鲜明的特点:编程方式是可视化的,所见即所得;程序的执行由事件驱动,没有一定的顺序。

【试题10.2】关闭当前表单的程序代码是ThisForm.Release,其中的Release是表单对象的_______。 A)标题 B)属性 C)事件 D)方法 答案:D

分析:表单的方法程序是对象能够执行的、完成相应任务的操作命令代码的集合;是VFP为表单及其控件内定的通用过程。方法程序过程代码由VFP系统定义,对用户是不可见的。方法程序Release的功能是从内存中释放表单或表单集,也就是关闭当前表单。

【试题10.3】_______不是表单中使用的设计工具。

A) 属性窗口 B) 控件工具栏 C) 表单控制器 D) 数据环境设计器 答案: C

分析:表单设计中经常使用的主要设计工具有:表单设计器、表单向导、属性窗口、生成器、数据

40

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

Top