Visual FoxPro教程
第一章 Visual FoxPro基础
1.1数据库基础知识
1.1.1 计算机数据管理的发展(P1—P4)
1. 数据是指存储在某一种媒体上能够识别的物理符号。
数据处理是指将数据转换成信息的过程。
2. ①人工管理 程序与程序之间存在大量的重复数据,称为冗余。
②文件系统
③数据库系统l
④分布式数据库系统 分布式数据库系统是数据库技术和计算机网络技术紧密结合的产物。
1.1.2 数据库系统(P4—P5)
1. 有关数据库的概念
① 数据库 DB
数据库(DataBase)是信息存储在计算机存储设备上,结构化的相关数据集合。
② 数据库应用系统
数据库应用是指系统开发人员利用数据库系统资源开发出来的。
③ 数据库管理系统 DBMS
④ 数据库系统
由五部分:硬件系统、数据库集合、数据库管理系统及相关软件、数据库管理员(DBA)和用户
2. 数据库系统的特点
① 实现数据共享,减少数据冗余
② 采用特定的数据模型
③ 有较高的数据独立性
④ 有统一的数据控制功能
1.1.3 数据模型(P6—P9)
1.实体的描述
①实体 客观存在并且可以相互区别的事物称为实体。
②实体的属性 描述实体的特性称为属性。
2. 实体间联系及联系的种类
两个实体间的联系可以归结为三种类型
①一对一联系 1:1
②一对多联系 1:N
③多对多联系 M:N
3. 数据模型
① 数据模型
用树形结构表示实体及其之间联系的模型称为层次模型。
② 网状模型
用网状结构表示实体及其之间联系的模型称为网状模型。
③ 关系数据模型
用二维表结构来表示实体以及实体之间联系的模型称为关系模型。
1.2 关系数据库 VFP就是一种关系数据库管理系统
1.2.1 关系模型(P9—P12)
1. 关系术语
①关系:一个关系就是一张二维表。
VFP中,一个关系存储为一个文件,文件扩展名为.dbf,称为“表”。
② 元组:在一个二维表中(一个具体关系),水平方向的行称为元组每一行是一个元组。
元组对应一个存储文件中的一个具体记录。
③属性:二维表中垂直方向的列称为属性。每一列有一个属性名,在VFP中表示为字段名。
④域:属性的取值范围
⑤ 关键字:属性或属性的组合,其值能够惟一的标识一个元组。
⑥ 外部关键字:如果表中的一个字段不是本表的主关键字或候选关键字,而是另外一个表的主关键字或候选关键字,这个字段(属性)就称为外部关键字。
2. 关系的特点
① 关系的必须规范化。 /所谓规范是指关系模型中的每一个关系模式都必须满足一定的要求。最基本的要求是每个属性必须是不可分割的数据单元
② 在同一个关系中不能出现相同的属性名
③ 关系中不允许有完全相同的元组,即冗余。
④ 在一个关系中元组的次序无关紧要。
⑤ 在一个关系中列的次序无关紧要。
1.2.2 关系运算(P12—P14)
1. 传统的集合运算
① 并 两个相同结构关系的并是由属于这两个关系的元组组成的集合。
② 差 设有两个相同结构的关系R和S,R差S的结果是由属于R但不属于S的元组组成的集合,即差运算的果是从R中去掉S中也有的元组。
③ 交 两个具有相同结构的关系R和S,它们的交是由即属于R又属于S的元组组成的集合。交运算的结果是R和S的共同元组。
2. 专门的关系运算
① 选择 从关系中找出满足给定条件的元组的操作称为选择。
② 投影 从关系模式中指定若干个属性组成新的关系称为投影。
③ 联接 联接是关系的横向结合。
④ 自然联接 是去掉重复属性的等值联接。
1.3 数据库设计基础
1.3.1 数据库设计步骤(P14—P16)
1. 设计原则 / 为了合理组织数据库,应遵从以下基本设计原则:
① 关系数据库的设计应遵从概念单一化“一事一地”的原则。
② 避免在表之间出现重复字段。
③ 表中的字段必须是原始数据和基本数据元素。
④ 用外部关键字保证有关联的表之间的联系。
2. 设计的步骤 / 利用VFP来开发数据库应用系统,可以按照以下步骤来设计:
① 需求
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
。
② 确定需要的表。
③ 确定所需字段。
④ 确定联系。
⑤ 设计求精。
1.3.2 数据库设计过程(P16—P18)
3. 确定所需字段
④确定主关键字字段 VFP不允许在主关键字字段中有重复值或空值。
4. 确定联系
① 一对多联系 把“一方”的主关键字字段添加到“多方”的表中。
② 多对多联系 把多对多的联系分解成两个一对多联系。所创建的第三个表包含两个表的主关键字,在两表之间起着纽带的作用,称之为“纽带表”。
③ 一对一联系 如果在一对一联系的表,首先要考虑一下是否可以把这些字段合并到一个表中。
1.4 VFP系统概述 VFP6.0是32位微处理器的强大功能。
第二章 Visual FoxPro系统初步(P25—53)
2.1.2 启动VFP 6.0 (P27—P29)
2.退出系统
① 用鼠标左键单击VFP标题栏最右面的关闭窗口按钮。
② 从“文件”下拉菜单中选择“退出”选项。
③ 单击主窗口左上方的狐狸图标,从窗口下拉菜单中选择“关闭”,或者按Alt+F4键。
④ 在命令窗口中键入QUIT命令,单击Enter键。
2
2.2 VFP6.0的用户界面
2.2.1 VFP6.0的用户界面 (P29—P31)
VFP有三种工作方式:利用菜单系统或工具栏按钮执行命令;在命令直接输入命令进行交互式操作;利用各种生成器自动产生程序,或者编写FoxPro程序(命令文件),然后执行它。
有三种操作方法来显示与隐藏命令窗口:
① 单击命令窗口右上角的关闭按钮可关闭它,通过“窗口”菜单下的“命令窗口”选项可以重新打开。
② 单击“常用”工具栏上的“命令窗口”按钮
③ 按Ctrl+F4组合键隐藏命令窗口;按Ctrl+F4组合键显示命令窗口。
2.2.3VFP的配置 (P34—P37)
1.使用“选项”对话框
单击“工具”菜单下的“选项”
①设置日期和时间的显示格式 在“区域”选项卡中,可以设置日期和时间的显示方式。
③设置默认
目录
工贸企业有限空间作业目录特种设备作业人员作业种类与目录特种设备作业人员目录1类医疗器械目录高值医用耗材参考目录
2.3 项目管理器
2.3.1 创建项目 (P37—P41)
一个扩展名为.pjx的项目文件。
* 各类文件选项卡
“项目管理器”共有6个选项卡。
①“数据”选项卡:包含了一个项目中的所有数据——数据库、自由表、查询和视图。
②“文档”选项卡:包含了处理数据时所用的三类文件,输入和查看数据所用的表单、打印表和查询结果所用的报表及标签。
③“类”选项卡
④“代码”选项卡:包括三大类程序,扩展名为.prg的程序文件、函数库API Libraries和应用程序.app文件。
⑤“其他”选项卡:包括文本文件、菜单文件和其他文件,
⑥全部选项卡
第三章 数据与数据运算 (P54—P80)
3.1 常量与变量
3.1.1 常量(54—57)
1. 数值型常量 N
数值型常量也就是常数,由数字0~9、小数点和正负号构成,也可以使用科学记数法形式书写。
2. 货币型常量
货币型常量用来表示货币值,要加上一个前置的符号($)。货币数据在存储和计算时,采用4位小数,多余的小数位四舍五入。
3. 字符型常量
字符型常量也称为字符串,其表示方法是用半角单引号、双引号或方括号把字符串扩起来。这里的单引号、双引号或方括号称为定界符。
注意:不包含任何字符的字符串
4. 日期型常量 D
日期型常量的定界符是一对花括号。花括号内包括年、月、日三部分内容,各部分内容之间用分隔符分隔。分隔符可以是斜杠(/)、连字号(-)
日期型常量的格式有两种:
①传统的日期格式
系统默认的型数据为美国日期格式“mm/dd/yy”(月/日/年)
②严格的日期格式
{^yyyy-mm-dd},
注意:花括号内第一个字符必须是脱字符(^);年份必须用4位;年月日的次序不能颠倒、不能缺省。日期型数据用8个字节表示。
5. 日期时间型常量
日期时间型常量包括日期和时间两部分内容:{<日期>,<时间>}。日期时间型数据用8个字节存储。
3
6. 逻辑型数据只有逻辑真和逻辑假两个值。逻辑真的常量表示形式有:.T.、.t.、.Y.、和.y.。逻辑假的常量表示形式有:.F.、.f.、.N.、.n.。前后两个句点作为逻辑型常量的定界符是必不可少的,逻辑型数据只占用一个字节。
3.1.2 变量(57—59)
VFP的变量分为字段变量和内存变量两大类,表中的字段名就是变量称为字段变量。
内存变量的数据类型包括字符型(C)、数值型(N)、货币型(Y)、逻辑型(L)日期型(D)和日期时间型(T)。
1. 简单内存变量
如果当前表中存在一个同名的字段变量,则在访问内存变量时,必须在变量前加上前缀M.(或M->),否则系统将访问同名的字段变量。
变量的赋值命令有以下两种格式:<内存变量名>=<表达式>、STORE<表达式> TO<内存变量名表>
功能注释:等号一次只能给一个内存变量赋值。STORE命令可以同时给若干个变量赋予相同的值,各内存变量名之间必须有逗号分开。
2. 数组
创建数组的命令格式为:
DIMENSION<数组名> 和 DECLARE<数组名>
数组创建以后,系统自动给每个数组元素赋以逻辑假.F.。
① 在赋值和输入语句使用数组名时,表示将同一个值同时赋给该数组的全部数组元素。
3.1.3 内存变量常用命令 (P59—P620
5. 表中数据与数组数据之间的交换
① 将表的当前记录复制到数组
格式1:SCATTER[FIELDS<字段名表>]TO <数组名>
格式1的功能是将表的当前记录从指定字段表中的第一个字段内容开始,依次复制到数组名中的从第一个数组元素开始的内存变量中。如果不使用FIELDS短语指定字段,则复制除备注型M和通用型G之外的全部字段。
如果事先没有创建数组,系统将自动创建;如果已创建的数组元素个数少于字段个数,系统自动建立其余数组;如果已创建的数组元素个数多于字段数,其余数组元素的值保持不变。
② 将数组复制到表的当前记录
格式1:GATHER FROM<数组名>[FIELDS<字段名表>]
格式1的功能是将数组中的数据作为一个记录复制到表的当前记录中。如果缺省FIELDS选项,则依次向各字段复制。
3.2 表达式
3.2.1数值、字符与日期时间表达式(P62—P64)
1.数值表达式由算术运算符将数值型连接起来形成,其运算结果仍然是数值型数据。
算术运算符及其优先级
优先级
运算符
说明
1
( )
形成表达式内的子表达式
2
** 或^
乘方运算
3
*、/、%
乘、除运算、求余运算
4
+、-
加、减运算
② 运算%和取余函数MOD ()的作用相同。余数的正负号与除数一致。
2.字符表达式:字符表达式由字符运算符型数据连接起来形成,其运算结果仍然是字符型数据。字符串运算符有以下两个,的优先级相同:
+:前后两个字符串首尾连接形成一个新的字符串。
-:连接前后两个字符串,并将前字符串的尾部空格移到合并后的新字符串尾部。
3. 日期时间表达式
日期时间表达式的格式
格式
结果及类型
<日期>+<天数>
日期型
<日期>-<天数>
日期型
<日期>-<日期>
数值型
<日期时间>-<日期时间>
数值型
3.2.2 关系表达式 (P64—P67)
1.关系表达式
关系表达式由关系运算符将两个运算对象连接起来形成,其运算结果是逻辑型数据
关系运算符
4
运算符
说明
运算符
说明
<
小于
<=
小于等于
>
大于
>=
大于等于
=
等于
==
字符串精确比较
<>、#或!=
不等于
$
子串包含测试
① 数值型和货币型数据比较:按数值的大小比较
② 日期和日期时间型数据比较:越早的日期或时间越小,越晚的日期或时间越大
③ 逻辑型数据比较:.T.大于.F.
④ 子串包含测试:关系表达式<前字符型表达式>$<后字符型表达式>为子串包含测试,如果前者是后者的一个子字符串,结果为逻辑真(.T.),否则为逻辑假(.F.)。
3.字符串精确 比较与EXACT设置
在用双等号符==比较两个字符串时,只有当两个字符串完全相同时,运算结果才会是逻辑真.T.,否则为逻辑假.F.。在用单等号运算符=比较两个字符串时,运算结果与SET EXACT ON|OFF设置有关,
① 系统默认OFF状态。当处于OFF状态时,只要右边的字符串与左边字符串的前面部分内容相匹配,即可得到逻辑真.T.的结果。
② 当处于ON 状态时,比较到两个字符串全部结束。
3.2.3 逻辑表达式 (P67—P68)
1.逻辑表达式
逻辑表达式由逻辑运算符将逻辑型数据连接起来而形成,其运算结果仍然是逻辑型数据。逻辑运算符有三个:
.NOT.或!(逻辑非)、.AND.(逻辑与)以及.OR.(逻辑或)。也可以省略两端的点,写成NOT、AND、OR。
逻辑运算规则
<1E1>
<1E2>
.NOT.<1E1>
<1E1>.AND.<1E2>
<1E1>.OR.<1E2>
.T.
.T.
.F.
.T.
.T.
.T.
.F.
.F.
.F.
.T.
.F.
.T.
.T.
.F.
.T.
.F.
.F.
.T.
.F.
.F.
例如,查询基本工资高于1800元的讲师和副教授,条件表达式应当写成:
基本工资>=1800 AND职称=“讲师“ OR 基本工资>=1800 AND 职称=“助教“
或者写成:基本工资>=1800 AND (职称=“讲师“ OR 职称=“副教授“)
2.运算符优先级
运算优先顺序为:先执行算术运算符、字符串运算符和日期时间运算符,其次执行关系运算符,最后执行
逻辑运算符。圆括号作为运算符,可以改变其他运算符的运算次序。
3.3 常用函数
3.3.1 数值函数 (P69—P70)
1.绝对值和符号函数
格式:ABS
SIGN
功能:ABS()返回指定的数值表达式的绝对值
SIGN ()返回指定数值表达式的符号。当表达式的运算结果为正、负和零时,函数值分别为1、-1和0
2.求平方根函数
格式:SQRT
功能:返回指定表达式的平方根。
1. 求整数函数
格式:INT
CEILING
FLOOR
功能:INT()返回指定数值表达式的整数部分
CEILING()返回大于或等于指定数值表达式的最小整数
FLOOR()返回小于或等于指定数值表达式的最大整数
2. 四舍五入函数
格式:ROUND
功能:返回指定表达式在指定位置四舍五入后的结果。<数值表达式 2>指明四舍五入的位置
3. 求余数函数
5
格式:MOD
功能:返回两个数值相除后的余数。余数的正负号与除数相同。
4. 求最大值和最小值函数
格式:MAX
MIN
3.3.2 字符函数 (P70—P73)
1.求字符串长度函数
格式:LEN
功能:返回指定字符表达式值中的长度,即所包含的字符个数。函数值为数值型。
2.大小写转换函数
格式:LOWER
UPPER
功能:LOWER()将指定表达式值中的大写字母转换成小写字母,其他字符不变。
UPPER()将指定表达式值中的小写字母转换成大写字母,其他字符不变。
3.空格字符串生成函数
格式:SPACE
功能:返回由指定数目的空格组成的字符串。
4.删除前后空格函数
格式:TRIM
LTRIM
ALLTRIM
功能:TRIM()返回指定字符表达式值去掉尾部空格后形成的字符串。
LTRIM()返回指定字符表达式值去掉前导空格后形成的字符串。
ALLTRIM()返回指定字符表达式值去掉前导和尾部空格后形成的字符串。
5.取子串函数
格式:LEFT
RIGHT
SUBSTR
功能:LEFT()从指定表达式值的左端取一个指定长度的子串作为函数值。
RIGHT()从指定表达式值的右端取一个指定长度的子串作为函数值。
SUBSTR()从指定表达式值的指定起始位置取指定长度的子串作为函数值。
在SUBSTR()函数中,若缺省第三个自变量<长度>,则函数从指定位置一直取到最后一个字符。
6.计算子串出现次数函数
格式:OCCURS
功能:返回第一个字符串在第二个字符串中出现的次数,函数值为数值型。若第一个字符串不是第一个字符串子串,函数值为0。
7.求子串位置函数
格式:AT(<字符表达式1>,<字符表达式2>)
功能:AT()的函数值为数值型。如果<字符表达式1>是<字符表达式2>的子串,则返回<字符表达式1>值的首字符在<字符表达式2>值中的位置;若不是子串,则返回0。
8.子串替换函数
格式:STUFF
9.字符替换函数
格式:CHRTRAN
10.字符串匹配函数
格式:LIKE(<字符表达式1>,<字符表达式2>)
功能:比较两个字符串对应位置上的字符,若所有对应字符都相匹配,函数返回逻辑真(.T.),否则返回逻辑假(.F.)。
<字符表达式1>中可以包含通配符*和?。*可与任何数目的字符相匹配,?可以与任何单个字符相匹配。
3.3.3 日期和时间函数 (P73)
1.系统日期和时间函数
格式:DATE()
TIME()
6
DATETIME()
功能:DATE()返回当前系统日期,函数值为日期型。
TIME()以24小时制、hh:mm:ss返回当前系统时间,函数值为字符型。
DATETIME()返回当前系统日期时间,函数值为日期时间型。
2.求年份、月份和天数函数
格式:YEAR
MONTH
DAY
三个函数的返回值都为数值型。
3.3.4 数据类型转换函数(P74—P75)
1.数值转换成字符串
格式:STR(<数值表达式>[,<长度>[,<小数位数>]])
功能:将<数值表达式>的值转换成字符串,转换时根据需要自动进行四舍五入。
2.字符串转换成数值
格式:VAL(<字符表达式>)
功能:将由数字符号(包括正负号、小数点)组成的字符型转换成相应的数值型数据。若字符串内出现非数字字符,那么只转换前面部分。
3.字符串转换成日期
格式:CTOD
4.日期转换成字符串
格式:DTOC
5.宏替换函数
格式:&<字符型变量>[.]
功能:替换出字符型变量的内容。
3.3.5 测试函数 (P75—P79)
1.值域测试函数
格式:BETWEEN(<表达式T>,<表达式L>,<表达式H>)
功能:判断一个表达式的值是否介于另外两个表达式的值之间。
2.空值(NULL值)测试函数
格式:ISUNLL
判断一个表达式的运算结果是否为NULL值,若是NULL值返回逻辑真(.T.),否则返回逻辑假(.F.)。
3.“空”值测试函数
格式:根据指定表达式的运算结果是否为“空”值,返回逻辑真(.T.)或逻辑假(.F.)。
注意,这里所指的“空”值与NULL值是两个 不由的概念。函数EMPTY(.NULL.)的返回值为逻辑假(.F.)。
4.数据类型测试函数
格式:VARTYPE(<表达式>[,<逻辑表达式>])
功能:测试<表达式>的值,返回一个大写字母,函数值为字符型。
5.表文件尾测试函数
表文件的逻辑结构。最上面的记录是首记录,记为TOP,最下面的记录是尾记录,记为BOTTOM。在第一个记录之前有一个文件起始标识,称为(BOF);在最后一个记录的后面有一个文件结束标识,称为(EOF)。刚刚打开表时,记录指针总是指向首记录。
格式:EOF
测试指定表文件中的记录指针是否指向文件尾,若是返回逻辑 真.T.,否则返回逻辑假.F.。表文件尾是指最后一条记录的后面位置。
6.表文件首测试函数
格式:BOF
功能:测试当前表文件中的记录指针是否指向文件首,若是返回逻辑真.T.,否则返回逻辑假.F.。表文件首是指第一条记录的前面位置。
7.记录号测试函数
格式:RECNO
功能:返回当前表文件中当前记录(记录指针所指记录)的记录号。如果记录指针指向文件尾,函数值为表文件中的记录数加1。如果记录指针指向文件首,函数值为表文件中第一条记录的记录号。
8.记录个数测试函数
格式:RECCOUNT
7
功能:返回当前表文件中的记录个数。RECCOUNT()返回的是表文件中物理上存在的记录个数。不管记录是否被逻辑删除。
9.条件测试函数
格式:IIF(<逻辑表达式>,<表达式1>,<表达式2>)
功能:测试<逻辑表达式>的值,若为逻辑真.T.,函数返回<表达式1>的值,若为逻辑假.F.,函数返回<表达式2>的值。
10.记录删除测试函数
格式:DELETED
功能:测试指定的表,记录指针所指的当前记录是否有删除标记“*”。若有为真,否则为假。
第四章 Visual FoxPro数据库及其操作 (P81—P113)
在建立VFP数据库时。相应的数据库名称实际是扩展名为.dbc的文件名,与之相关的还会自动建立一个扩展名为.dct的数据库备注文件和一个扩展名为.dcx的数据库索引文件。
4.1.2 建立数据库 (P81—P83)
建立数据库的常用立法有以下三种
在项目管理器中建立数据库;
通过“新建”对话框建立数据库;
使用命令交互建立数据库。
1.在项目管理器中建立数据库
在项目管理中首先在“数据”选项卡中选择“数据库”,然后单击“新建”按钮并选择“新建数据库”
2.通过“新建”对话框建立数据库
单击工具栏上的“新建”按钮或者选择“文件”菜单下的“新建”,在“新建文件”按钮建立数据库。
3.使用命令交互建立数据库
CREATE DATABASE <数据库文件名>
4.1.3 使用数据库 (P83—P85)
打开数据库的命令是OPEN DATABASE <数据库文件名>
可以缺省数据库文件扩展.dbc
4.1.4 修改数据库 (P85—P86)
打开数据库设计器的命令是MODIFY DATABASE<数据库文件名>
4.1.5 删除数据库 (P86—P87)
删除数据库的命令是DELETE DATABASE<数据库文件名>
4.2 建立数据库表
4.2.1在数据库中建立表 (P87—P90)
一个对应于磁盘上的一个扩展名为.dbf的文件,如果有备注或通用型大字段则磁盘上还会有一个对应扩展名为.fpt的文件。
数据类型
字母表示
数据类型
字母表示
数据类型
字母表示
字符型
C
日期型
D
备注型
M
货币型
Y
日期时间型
T
通用型
G
它在表中占用4个字节
数值型
N
双精度型
B
字符型(二进制)
它在
表格
关于规范使用各类表格的通知入职表格免费下载关于主播时间做一个表格详细英语字母大小写表格下载简历表格模板下载
中占用4个字节,所保存的数据
浮点型
F
整型
I
备注型(二进制)
信息存储在以.dbt为扩展名的文件中。
逻辑型
L
3.空值
字段有“NULL”选项,它表示是否允许字段为空值。空值就是缺值或还没有确定值。
4.4 索引
4.4.1 基本概念 (P96—P97)
VFP索引是由指针构成的文件,不改变表中记录的物理顺序。创建索引是创建一个由指向.dbf文件记录的指针构成的文件。
VFP中的索引分为主索引、候选索引、唯一索引和普通索引四种。
1.主索引
在指定字段表达式中不允许出现重复值的索引,这样的索引可以起到主关键字的作用。建立主索引的字段可以看作是主关键字,一个表只能有一个主关键字,所一个表只能创建一个主索引。
2.候选索引
8
候选索引和主索引具有相同的特性,建立候选索引的字段可以看作是候选关键字,所以一个表可以建立多个候选索引。在数据库表和自由表中均可为每个表建立多个候选索引。
3.唯一索引
在一个表中可以建立多个唯一索引。
4.普通索引
普通索引不仅允许字段中出现重复值,并且索引项中也允许出现重复值。在一个表中可以建立多个普通索引。
4.4.2在表设计器中建立索引 (P97—P99)
1.单项索引
在表设计器界面有“字段”、“索引”和“表”有三个选项卡,在“字段”选项卡中有三个选项:无、升序和降序(默认是无)。如果选定了升序或降序,则在对应的字段上建立了一个普通索引。
2.复合字段索引
索引可以提高查询速度,系统会自动维护索引,也就是说索引会降低插入、删除和修改等操作的速度。
4.4.3 用命令建立索引 (P99—P100)
格式一:INDEX ON <字段名> TO <索引文件名> [FOR <条件>][UNIQUE]
建立了一个扩展名为.idx的索引文件
格式二:INDEX ON <字段名> TAG <索引名> OF <索引文件名> [FOR <条件>][ASCENDING/DESCENDING][UNIQUE]
建立了一个扩展名为.cdx的索引文件
格式三:INDEX ON <字段名> TAG <索引名>[FOR <条件>][ASCENDING/DESCENDING][UNIQUE][CANDIDATE]
建立了一个与表文件同名扩展名为.cdx的索引文件
ASCENDING/DESCENDING说明建立升序/降序索引,默认升序。
UNIQUE说明建立唯一索引。
CANDIDATE说明建立候选索引。
与表同名的.cdx索引是一种结构复合压缩索引,它是在VFP数据库中最普通也是最重要的一种索引,结构复合压缩索引文件具有如下特性:
在打开表时自动打开;
在同一索引文件中能包含多个索引
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
,或索引关键字;
在添加、更改或删除记录时自动维护索引。
4.4.4 使用索引 (P100—P101)
1.打开索引文件
与表名相同的结构索引在打开表时都能够自动打开,但是对于非结构索引必须在使用之前打开索引文件。打开索引文件的命令格式为:
SET INDEX TO <索引文件名表>
可以.idx索引和.cdx索引。
执行该命令后,索引文件列表中的第一个索引文件成为主控索引文件。
2.设置当前索引
SET ORDER TO
/[TAG]<索引名>
其中可以按索引序号或索引名指定索引项。
3.使用索引快速定位
SEEK <表达式>
4.删除索引
DELETE TAG <索引名>
如果要删除全部索引可以使用命令
DELETE TAG ALL
4.5 数据完整性
数据完整性一般包括实体完整性、域完整性和参照完整性等,VFP提供了实现这些完整性的方法和手段。
4.5.1实体完整性与主关键字 (P101)
实体完整性是保证表中记录惟一的特性,即在一个表中不允许有重复的记录。在VFP中利用主关键字或候选关键字来保证表中的记录惟一,即保证实体惟一性。
在VFP中将主关键字称作主索引,将候选关键字称作候选索引。
4.5.2 域完整性与约束规则 (P101—P102)
域完整性域约束性
域约束性也称作字段有效性规则,建立字段有效性规则,在表设计器的“字段”选项卡中,它们是“规则”、“信息”、“默认值”三项。
注意:“规则”是逻辑表达式,“信息”是字符串表达式,“默认值”的类型则以字段的类型确定。
4.5.3 参照完整性与表之间的关联 (P102—P106)
9
1.建立表之间的联系
在数据库设计器中设计表之间的联系时,要在父表中建立主索引,在子表中建立普通索引,然后通过父表的主索引和子表的普通索引建立起两个表之间的联系。
2.设置参照完整性约束
在建立参照完整性之前必须首先清理数据库,所谓清理数据库是物理删除数据库各个表中所有带有删除标记的记录。可以在“数据库”菜单下选择“清理数据库”,在清理完数据库后,用鼠标右键单击表之间的联系并从快捷菜单中选择“编辑参照完整性”,打开的参照完整性生成器界面。
参照完整性规则包括更新规则、删除规则和插入规则。
4.6数据库表与自由表
4.6.1 数据库表与自由表 (P106—P107)
所谓自由表就是那些不属于任何数据库的表,可以将自由表添加到据库中,使之成为数据库表;也可以将数据库表从数据库中移出,使之成为自由表。自由表不能建立字段级规则和约束等。
4.6.2 将自由表添加到数据库 (P107—P108)
ADD TABLE <表文件名>
4.6.3 从数据库中移出 (P108—P109)
REMOVE TABLE <表文件名>
如果使用选项DELETE,则在把所选表从数据库中移出之外,还将其从磁盘上删除。
4.7 多个表的同时使用
4.7.1多工作区的概念 (P109—P110)
系统默认总是在第1个工作区中工作,
指定工作区的命令是:
SELECT <区名>/<区号>/<别名>/0
最小的工作区号是1,最大的工作区号是32 767,即同一时刻最多允许打开32 767个表。如果这里指定为0则选择编号最小的可用工作区,即尚未使用的工作区。
每个表打开后都有两个默认的别名,一个是表名自身,
还可以在USE命令中用ALIAS短语指定别名。
在前10个工作区中指定的默认区名是工作区字母A到J
4.7.2 使用不同工作区的表 (P110—P111)
在一个工作区中还可以直接利用表名或表的别名引用另一个表中的数据,具体方法是在别名后加上点号分隔符“.”或“->”操作符,然后再接字段名。
4.7.3 表之间的关联 (P111)
SET RELATION TO <字段名> INTO <区名>/<别名>
一般是子表的普通索引。
当临时联系不再需要时可以取消,命令SET RELATION TO将取消当前表到所有表的临时联系。
第五章 关系数据库
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
语言SQL (P114—P142)
SQL是结构化查询语言Structured Query Language的缩写
5.1 SQL概述
最早的SQL标准是于1986年10月由美国ANSI公布的。随后,ISO于1987年6月也正式采纳它为国际标准。
① SQL是一种一体化的语言,它包括了数据定义、数据查询、数据操纵的数据控制等方面的功能。
② SQL语言是一种高度非过程化的语言。
③ SQL语言非常简洁。
④ SQL语言可以直接以命令方式交互使用,也可以嵌入到程序设计语言中以程序方式使用。
5.2 查询功能
SQL的核心是查询。SQL的查询命令也称作SELECT命令,它的基本形式由SELECT-FROM-WHERE查询块组成。
5.2.1 简单查询 (P117-P118)
DISTINCT短语的作用是去掉查询结果中的重复值。
其中"*"是通配符,表示所有属性,即字段。
这里用WHERE短语指定了查询条件,查询条件可以是任意复杂的逻辑表达式。
注意: ;是续行符号。
5.2.2 简单的联接查询 (P118-P119)
例如:"职工.仓库号=仓库.仓库号"是联接条件。
10
当FROM之后的多个关系中含有相同的属性名时,这时必须用关系前缀直接指明属性所属的关系,如职工.仓库号,"."前面是关系名,后面是属性名。
5.2.3 嵌套查询 (P119-P120)
IN相当于集合运算符∈(属于)。
5.2.4 几个特殊运算符 (P120-P121)
BETWEEN…AND…意思是在…和…之间",这个查询的条件等价于:例如,(工资>=1220) AND (工资<=1240)。
LIKE是字符串匹配运算符,通配符"%"表示0个或多个字符,另外还有一个通配符"__"表示一个字符。
在SQL中,"不等于"用"!="表示。另外还可以用否定运算符NOT写出等价命令:例如,SELECT * FROM供应商 WHERE NOT(地址="北京")
5.2.5 排序 (P121-P122)
ORDER BY <字段名>[ASC|DESC]。可以按升序(ASC)或降序(DESC)排序。
5.2.6 简单的计算查询 (P122-P123)
用于计算检索的函数有:①COUNT--计数
②SUM--求和
③AVG--计算平均值
④MAX--求最大值
⑤MIN--求最小值
5.2.7 分组与计算查询 (P123)
GROUP BY <字段名>[HAVING <条件>]。还可以用HAVING进一步限定分组的条件。
在分组查询时,有时要求分组满足某个条件时才检索,这时可以HAVING子句来限定分组查询。
HAVING子句总是跟在GROUP BY子句之后,不可以 单独使用。
5.2.8 利用空值查询 (P124)
注意:查询空值时要使用IS NULL,而=NULL是无效的,因为空值不是一个确定的值,所以不能用"="这样的运算符进行比较。
5.2.9 别名与自联接查询 (P124-P125)
在联接操作中,经常需要使用关系名作前缀,因此,SQL允许在FROM短语中为关系名定义别名,格式为:
<关系名><别名> 或 <关系名> AS <别名>
5.2.11 使用量词和谓词的查询 (P126-P128)
还有两类和子查询有关的运算符,它们有以下两种形式:
<表达式><比较运算符>[ANY|SOME|ALL](子查询)
[NOT]EXISTS (子查询)
ANY、ALL、SOME是量词,其中ANY和SOME是同义词,在进行比较运算时只要子查询中有一行能使结果为真,则结果就为真;而ALL则要求子查询中的所有行都使结果为真时,结果才为真。
EXISTS是谓词,EXISTS或NOT EXISTS是用来检查在子查询中是否有结果返回,即存在元组或不存在元组。
注意:这里的内层查询引用了外层查询的表,只有这样使用谓词NOT EXISTS才有意义。
[NOT]EXISTS只是判断子查询中是否有或没有结果返回,它本身并没有任何运算或比较。
5.2.12 超联接查询 (P128-P130)
VFP有专门的联接运算语法格式,它支持超联接查询。
SELECT <字段名表>
FROM <表文件名1>[INNER]|LEFT|RIGHT|FULL JOIN<表文件名2>
ON <联接条件>
WHERE <条件>
INNER JOIN等价于JOIN,为普通的联接,在VFP中称为内部联接。
LEFT JOIN为左联接。
RIGHT JOIN为右联接。
FULL JOIN可以称为全联接,即两个表中的记录不管是否满足联接条件将都在目标表或查询结果中出现,不满足联接条件的记录对应部分为NULL。
ON指定联接条件。
从以上格式可以看出,它的联接条件在ON短语中给出,而不在WHERE短语中,联接类型在FROM短语中给出。
5.2.13 集合的并运算(P130-P132)
SQL支持集合的并(UNION)运算,即可以将两个SELECT语句的查询结果通过并运算合并成一个查询结果。
1.显示部分结果
11
有时只需要满足条件的前几个记录,这时使用TOP [PERCENT]短语,是数字表达式,当不使用PERCENT时,说明显示前几个记录;当使用PERCENT时,说明显示结果中前百分之几的记录。需要注意的是TOP短语要与ORDER BY短语同时使用才有效。
2.将查询结果存放到数组中
格式:INTO ARRAY <数组名>
3.将查询结果存放到临时文件中
INTO CURSOR <临时文件名>
<临时文件名>可以是任意的数组变量名。当关闭文件时该文件将自动删除。
4. 将查询结果存放到永久表中
INTO DBF|TABLE <表文件名>
5.将查询结果存放到文本文件中
INTO FILE <文本文件名> 扩展名为.txt
5.3 操作功能
SQL的操作功能是,主要包括数据的插入、更新和删除三个方面的内容。
5.3.1插入 (P132-P134)
VFP支持两种SQL插入命令的格式,第一种格式是标准格式,第二种格式是VFP的特殊格式。
第一种格式:
INSERT INTO <表文件名>[(字段名表)]VALUES (表达式表)
第二种格式:
INSERT INTO <表文件名> FROM ARRAY <数组名>
其中:INSERT INTO <表文件名>说明向由<表文件名>指定的表中插入记录,当插入的不是完整的记录时,可以用 表文件名1,表文件名2…指定字段;
VALUES(表达式表)给出具体的记录值;
FROM ARRAY <数组名>说明从指定的数组中插入记录值。
5.3.2 更新 (P134)
UPDATE <表文件名> SET <字段名>=<表达式>[WHERE <条件>]
如果不使用WHERE子句,则更新全部记录。
5.3.3 删除 (P134)
DELETE FROM <表文件名>[WHERE <条件>]
WHERE指定被删除的记录所满足的条件,如果不使用WHERE子句,则删除该表中的 全部记录。
注意:在VFP中SQL DELETE命令同样是逻辑删除记录,如果要物理删除记录需要继续使用PACK命令。
5.4 定义功能
5.4.1 表的定义 (P135-P137)
在VFP中也可以通过SQL的CREATE TABLE命令建立表,相应的命令格式是:
CREATE TABLE |DBF <表文件名> [FREE](字段名表达式表[NULL|NOT NULL]
[CHECK <规则>[ERROR <信息>]]
[DEFAULT <默认值>]
[PRIMARY KEY|UNIQUE]
[FOREIGN KEY <字段名> TAG <索引名>]
REFERENCES <表文件名>)
用CREATE TABLE命令建立表,除了建立表的基本功能外,它还包括满足实体完整性的主关键字(主索引)PRIMARY KEY、定义域完整性的CHECK约束及出错提示信息ERROR、定义默认值的DEFAULT等。另外还有描述表之间联系的FOREIGN KEY和REFERENCES等。
FREE:建立的表不添加到当前数据库中,即建立一个自由表。
NULL或NOT NULL:说明字段允许可不允许为空值。
UNIQUE:说明建立候选索引(注意不是惟一索引)。
5.4.2 表的删除 (P138)
DROP TABLE <表文件名>
DROP TABLE直接从磁盘上删除 表文件 所对的dbf文件。
5.4.3 表结构的修改 (P138-P139)
格式1:ALTER TABLE <表文件名> ADD|ALTER[COLUMN]<字段名表>
该格式可以添加(ADD)新的字段或修改(ALTER)已有的字段。
格式2:ALTER TABLE <表文件名> ALTER[CONUMN]<字段名表>
[SET DEFAULT <默认值>][SET CHECK <规则>[ERROR <提示>]]
[DROP DEFAULT][DROP CHECK]
12
格式3:ALTER TABLE <表文件名>[DROP[COLUMN]<字段名表>]
[ADD PRIMARY KEY <字段名表> TAG <索引名>]
[DROP PRIMARY KEY]
[ADD UNIQUE <字段名表> TAG <索引名>]
[RENAME COLUMN <字段名表> TO <表达式表>]
该格式可以删除字段(DROP[COLUMN])、可以修改名(RENAME COLUMN0)。
5.4.4 视图的定义 (P139-P141)
在VFP中视图是一个定制的虚拟表,可以是本地的、远程的或带参数的。视图可以引用一个或多个表,或者引用其他视图。视图是可更新的。
CREATE VIEW <视图名>
AS <子查询>
其中 子查询 可以是任意的SELECT查询语句。
4.视图的删除
DROP VIEW <视图名>
第六章 查询与视图 (P143-P156)
6.1 查询
6.1.1 查询设计器 (P143-P145)
1.查询的概念
实际上,查询就是预先定义好的一个SQL SELECT语句,查询是以扩展名为.qpr的文件保存在磁盘上的,这是一个文本文件,它的主体是SQL SELECT语句。
2.查询设计器
① 可以用CREATE QUERY命令打开查询设计器建立查询。
② 如果读者熟悉SQL SELECT,还可以直接编辑.qpr文件建立查询。
l "字段"选项卡对应于SELECT短语,指定所要查询的数据。
l "联接"选项卡对应于JOIN ON短语,用于编辑联接条件。
l "筛选"选项卡对应于WHERE短语,用于指定查询条件。
l "排序依据"选项卡对应于ORDER BY短语,用于指定排序的字段的排序方式。
l "分组依据"选项卡对应于GROUP BY短语和HAVING短语,用于分组。
l "杂项"选项卡可以指定是否要重复记录(对应于DISTINCT)及列在前面的记录(对应于TOP短语)等。
6.1.3 查询设计器的局限性 (P147)
当建立完查询并存盘后将产生一个扩展名为.qpr的文件,它是一个文本文件。如果熟悉SQL SELECT,则可以直接用各种文体编辑器,通过自己写SQL SELECT语句来建立查询最后只要把它保存为扩展名为.qpr的文件 即可。事实上,查询设计器只能建立一些比较规则的查询,而复杂的查询它就无能为力了。
6.1.4 运行查询 (P147-P149)
DO <查询文件名>
其中 查询文件名 ,此时必须给出查询文件的扩展名.qpr。
6.2 视图
视图的概念
使用当前数据库中VFP表建立的视图是本地视图,使用当前数据库之外的数据源(SQL Server)中的表建立的视图是远程视图。
视图是操作表的一种手段,通过视图可以查询表,也可以更新表。
6.2.2 建立视图 (P150-P151)
1.建立视图的方法
用CREATE VIEW命令打开视图设计器建立视图。
2.视图设计器
视图设计器和查询设计器的使用方式几乎完全一样。主要有以下几点不同:
① 查询设计器的结果是将查询以.qpr扩展名的文件保存在磁盘中;而视图设计完后,在磁盘上找不到类似的文件,视图的结果保存在数据库中。
② 由于视图是可以用于更新的,为此在视图设计器中多了一个"更新条件"选项卡。
③ 在视图设计器中没有"查询去向"的问题。
6.2.3 远程视图与连接 (P151-P155)
13
为了建立远程视图,必须首先建立连接远程数据库的"连接"。
第七章 程序设计基础 (P157—P189)
7.1 程序与程序文件
7.1.1 程序的概念 (P157—P158)
① 命令注释:
以NOTE或*开头的代码行为注释行。命令行后也可添加注释,这种注释以符号&&开头,注释为非执行代码,不会影响程序的功能。
② SET TALK ON|OFF命令
默认值为ON。
③ 命令分行
程序中每条命令都以回车键结尾,一行只能写一条命令。若命令需要分行书写,应在一行终了时键入续行符“;”,再按回车键。
7.1.2 程序文件的建立与执行 (P158—P160)
1. 程序文件的建立与修改
程序文件的默认扩展名是.prg。
也可以用命令方式建立和修改程序文件。命令格式为:
MODIFY COMMAND <文件名> 如果没有给定扩展名,系统自动加上默认扩展名.prg。
2.执行程序文件
命令方式: DO <文件名>
① RETURN:结束当前程序的执行,返回到调用字的上级程序,若无上级程序,则返回到命令窗口。
7.1.3 简单的输入输出命令 (P160—P161)
1.INPUT命令
INPUT[<字符表达式>]TO <内存变量>
① 输入字符串时必须加定界符,输入逻辑型常量时要用圆点定界(如.T.、.F.),输入日期时间型常量时要用大括号。
2.ACCEPT命令
ACCEPT[<字符表达式>]TO <内存变量>
① 该命令只能接收字符串。用户在输入字符串时不需要加定界符。
3.WAIT命令
WAIT[<字符表达式>][TO <内存变量>][WINDOW[AT <行>,<列>]]
[TIMEOUT <数值表达式>]
① 如果没有指定<字符表达式>,则显示默认的提示信息“按任意键继续…”
② 如果指定了WINDOW子句,则会出现一个WAIT提示窗口,用以显示提示信息。
③ TIMEOUT子句用来设定等待时间(秒数)。一旦超时就不再等待用户按键,自动往下执行。
7.2 程序的基本结构
顺序结构、选择结构和循环结构是程序的三种基本结构。
7.2.1 选择结构 (P162—P165)
1.条件语句
IF <条件>
<语句序列1>
[ELSE
<语句序列2>]
ENDIF
有ELSE子句时,如果<条件>成立,则执行<语句序列1>,转向ENDIF的下一条语句;否则直接转向ENDIF的下一条语句去执行。
2.分支语句
DO CASE
CASE <条件1>
<语句序列1>
CASE <条件2>
<语句序列2>
……
CASE <条件n>
14
<语句序列n>
[OTHERWISE
<语句序列>]
ENDCASE
语句执行时,依次判断CASE后面的条件是否成立。当发现某个CASE后面的条件成立时,就执行该CASE和下一个CASE之间的命令序列,然后执行ENDCASE之间的命令序列,然后转向ENDCASE后面的语句。
7.2.2 循环结构 (P165—P170)
循环结构也称为重复结构,VFP支持循环结构的语句包括:DO WHILE – ENDDO、FOR – ENDFOR和SCAN – ENDSAN语句。
1.DO WHILE – ENDDO语句
DO WHILE <条件>
<条件序列1>
[LOOP]
<语句序列2>
[EXIT]
<语句序列3>
ENDDO
执行该语句时,先判断DO WHILE处的循环条件是否成立,如果条件为真,则执行DO WHILE与ENDDO之间的命令序列(循环体)。当执行到ENDDO时,返回到DO WHILE,再次判断循环条件是否为真,以确定是否再次执行循环体。若条件为假,则结束该循环语句,执行ENDDO后面的语句。
① 如果循环体包含LOOP命令那么当遇到LOOP时就结束循环体的本次执行,不再执行其后面的语句,而是转回DO WHILE处重新判断条件。
② 如果循环体包含EXIT命令,那么遇到EXIT时,就结束该语句的执行,转去执行ENDDO后面的语句。
2.FOR – ENDFOR语句
FOR <循环变量>=<初值>[STEP <步长>]
<循环体>
ENDFOR|NEXT
执行该语句时,首先将初值赋给循环变量,然后判断循环条件是否成立(若步长为正值,循环条件为<循环变量> <= <终值>;若步长为负值,循环条件为<循环变量>>=<终值>)。若循环条件成立,则执行循环变量增加一个步长值,并再次判断循环条件是否成立,以确定是否再次执行循环体。若循环条件不成立,则结束该循环语句,执行ENDFOR后面的语句。
①<步长>的默认值为1。
③ EXIT和LOOP命令同样可以出现在该循环语句的循环体内。当执行到LOOP命令时,结束循环体的本次执行,然后循环变量增加一个步长值,并再次判断循环条件是否成立。
3.SCAN – ENDSCAN语句
SCAN[<范围>][FOR <条件1>][WHERE <条件2>]
<循环体>
ENDSCAN
执行该语句时,记录指针自动、依次地在当前表的指定