搜索
您的当前位置:首页VFP重点整理

VFP重点整理

时间:2023-02-09 来源:爱问旅游网


1.1 数据管理技术的三个发展阶段

(1)人工管理阶段 (2)文件系统阶段 (3)数据库系统阶段

1.2 数据库系统的组成

(1)数据库(DataBase)

①定义:是以一定的数据模型组织的、长期存放在辅助存储器上的、可共享的相关数据的集合。

②组成:由数据和元数据两部分组成。

③特点:具有较小的冗余度、较高的独立性和易扩展型、可供多个用户或多类应用共享。 (2)数据库管理系统(DataBase Management System,DBMS) 是用于建立、使用和维护数据库的系统软件。 (3)应用程序 (4)用户

数据库系统(DataBase System)从广义上讲是由数据库、数据库管理系统 、计算机支持系统、应用程序和有关人员组成。

三个概念之间的联系:在数据库系统中通过数据库管理系统来建立和使用数据库。

1.3 了解数据库系统的模式结构

①三级模式结构:

外部层:单个用户的视图,对应于数据库模式的外模式。

概念层:全体用户的公共视图,可理解为数据库管理员所看到的数据库,对应于数据库模式的模式。

内部层:存储视图,可理解为机器―看到‖的数据库,对应于数据库模式的内模式。 ②两级映射:

概念层与内部层之间的映射:通过它实现数据的物理独立性。 外部层与概念层之间的映射:通过它实现数据的逻辑独立性。

1.4 数据模型

(1)了解信息的三个世界及数据模型

三个世界中有关的对应关系:

现实世界(特征)→观念世界(属性)→数据世界(字段) 现实世界(事物)→观念世界(实体)→数据世界(记录) (2)了解E-R模型

①3个基本概念:实体、联系(1:1,1:n,m:n)、属性 ②E-R图:是E-R模型的图形表示 实体→矩形框表示 联系→菱形框表示 属性→椭圆形表示

(3)关系模型:

①关系:是以二维表结构来表示实体集及其实体间的联系。

关系模型的数据结构(也称关系模式):是对关系结构的描述。如CJ(XH,KCDH,CJ) ②关键字:

超关键字:能唯一确定记录的一列或几列的组合。

候选关键字:最简练的超关键字。

主关键字: 候选关键字中选一个作为主关键字,不重复且不能为空。

外部关键字:当A表的主关键字被包含到B表中时,则称A表的主关键字为B表的外部关键字。

③关系运算

传统的集合运算:并(∪)、差(-)、交(∩)等。 专门的关系运算:

选择:在关系R中选择满足条件的元组,它是对关系的水平分解。

投影:在关系中选择出若干个属性组成新的关系,它是对关系的垂直分解。 联接:根据给定的联接条件将两个关系拼成一个新的关系。 ④关系的规范化 关系模型的性质:

属性值是原子的,不可分解的;

二维表的记录数随数据的增删而改变,但其字段数是相对固定的; 二维表中的每一列均有唯一的字段名; 二维表中不允许出现完全相同的两行;

二维表中行的顺序、列的顺序均可以任意交换。

关系模式存在的异常情况:数据冗余、插入异常、删除异常 关系的规范化:

目的:使结构合理,尽可能地消除异常情况。

方法:将关系模式投影分解为两个或两个以上的关系模式。

规范化级别:每级称为一个范式,记作n范式。n表示范式的级别,一般要求满足3NF。 ⑤关系模型的完整性:域完整性(属性的取值范围)、实体完整性(主关键字满足唯一且不为空)、参照完整性(主关键字和外部关键字之间的一致性)

1.5 关系数据库标准语言SQL(Structured Query Language, SQL)。 数据定义语言(DDL): 用来建立所需的数据库。 数据查询语言(SQL-SELECT)

操作操纵语言(DML): 用来对数据库进行更新、插入、删除等维护操作。 主要内容参见第三、四章

1.6 数据库设计基础

⑴数据库设计过程中需求分析阶段,经常使用的方法是结构化分析方法(SA)。 结构化分析方法常用的描述工具是数据流程图(DFD)和数据字典(DD)。

数据流程图中使用的基本图形符号有4个,外部实体(矩形)、数据处理(椭圆形)、数据流(箭头)和数据存储。

数据字典是关于数据库中数据的描述,即元数据,不是数据库本身。

⑵系统设计包括概念结构设计、逻辑结构设计和物理结构设计。一般用E-R模型作为概念结构设计的基本工具;逻辑结构设计主要是表结构的设计;物理结构主要是数据的存储方式设计。

系统测试分模块测试、系统测试和验收测试。

系统运行与维护:包括日常维护、监控与分析、性能调整、扩展与增强

1.7 主流的DBMS产品 (前三个分别为Oracle,IBM,Sybase公司产品,后三个均为微软) 常用的DBMS产品有Oracle,DB2,Sybase,MS-SQL Server,Access ,VFP

第2章 VFP数据库管理系统概述

2.1 VFP的操作环境

(1)界面基本组成:标题栏、主菜单栏、工具栏、主窗口、命令窗口、状态栏 (2)命令窗口中常用的几个命令

?(先输出换行再输出?后面的内容)和??(直接输出??后的内容) *(在命令前注释)、&&(在命令后注释) MD 创建文件夹(也称目录) CD 进入到指定路径 RD 删除指定文件夹

Copy file 源文件 to 目的文件 Rename 源文件 to 目的文件 Run 运行可执行程序(.exe) QUIT 退出VFP

(3)改变系统状态的命令 SET DEFAULT TO

SET SAFETY ON/OFF :决定改写已有文件之前是否显示对话框 SET DATE TO :指定日期(时间)表达式的显示格式

改变系统的状态可以在―工具‖——―选项‖中进行。设置完后按住shift+确定,则会在命令窗口显示当前设置的命令。

2.2 VFP 文件类型

项目文件(.PJX) 表文件( .DBF)数据库文件( .DBC)

表单文件(.SCX) 查询文件(.QPR) 报表文件(.FRX) 标签(.LBX) 菜单文件(.mnx) 类库文件(.vcx) 程序文件(.prg)

2.3 VFP的项目管理器

①项目:是一个系统中文件、数据、文档等对象的集合。

②项目管理器:是开发VFP应用系统的一个工具,它生成一个项目文件,项目文件的扩展名为 .PJX,项目备注的扩展名为:.PJT。

③项目管理器的功能:组织和管理所有与应用系统有关的各种类型的文件。

④项目管理器窗口的组成:由6大类数据项(全部、数据、文档、类、代码、其他)和10个命令按钮(新建、添加、修改、浏览、关闭、打开、预览、运行、移去、连编)组成。 注:粗斜体表示的命令按钮根据用户选择的不同对象动态地出现。

⑤项目菜单的组成:多个子菜单(其中一部分与项目管理器中的命令按钮功能相同)。 可以利用项目管理器来创建、打开、浏览、修改所有VFP文件并运行其中的表单、报表、标签、菜单、程序等。特别是可以利用它来连编项目、应用程序(扩展名为.APP,在VFP环境下执行)和可执行文件(扩展名为.EXE,能脱离VFP环境执行)。 有关―包含与排除‖:注意包含和排除的符号与含义。包含在项目中的文件连编后运行时是只读的。如果运行过程中需要修改的,应设置为排除。

主文件:项目中只能设置一个主文件。表单、菜单、程序等可以设置为主文件。主程序是一个应用系统运行时的起点,是应用系统执行时首先被执行的程序。 项目间可以共享文件。一个数据库可以同时属于不同的项目。

2.4 VFP语言基础

1.数据类型:为了便于对数据进行加工和处理,需要对数据进行分类。注意各种数据类型的字母表示以及各种类型存储时所占据的存储空间。

一般的数据类型 :字符型C 货币型Y 日期型D 日期时间型T 逻辑型L 数值型N 仅用于字段的:双精度型Double 浮点型Float 整型Integer 通用型G 备注型M

*字符型:最多254个字符 日期(时间)型:8字节 数值型:内存8字节表中1~20字节 逻辑型:1字节 备注型&通用型:4字节(表备注文件.FPT)

2.常量与变量

(1)常量(constants):在操作过程中保持不变。

(2)变量(variables):是内存中的一个存储单元,其中的内容可以变化,但标识该存储位置的名称(即变量名)不变。

掌握变量的命名规则。 P41

例如,CSTR、X1、_PP、学号是合法的名称。1X、USE是非法的名称。因为1X数字开头,USE是打开表的命令,属于系统保留字。

字段名、表索引标识名最多10字符,其余名称1~128个字符

① 变量的赋值方式:

1)用 STORE 命令 如:STORE \"王兰\" TO cStud

2) 用赋值操作符―=‖ 如:cStud = \"王兰\" (右边赋值给左边) ②变量的作用域: 即变量使用的有效范围。

PUBLIC 说明的变量在整个应用程序都可以使用,用来定义全局变量。 LOCAL 说明的变量只可以在本程序中使用,用来定义局部变量。 PRIVATE 说明的变量可以在本程序和它的子程序中使用,用来定义私有变量。 注意:在命令窗口中使用的变量都是全局变量。

③变量的访问: 当变量和字段同名时,字段有优先被访问权。访问同名变量时,要在变量名前加 m.,如 m.xm。

④变量的保存与恢复

内存变量是系统在内存中设置的临时存储单元。当退出系统时,内存中的数据自动丢失。若想保存这些变量的值,可以用SAVE to 命令。例如,将当前内存中的A开头的第3个字符是B的所有变量保存到文件VARFILE中,可用如下命令: SAVE TO VARFILE all like A?B*

如果下次要恢复内存文件中的所有变量,可用RESTORE FROM 命令。

(3)数组(array):是存储在一个变量中由单个变量名引用的有序数据集合。在 VFP中,一个数组中的数据不必是同一种数据类型。常用的有一维数组、二维数组。 ①数组元素的标识:通过一个数值下标来引用,如 AA(2),AA( 2,3) ②数组类型的声明:

用DECLARE 或 DIMENSION定义 (私有数组)

例如:DIMENSION ARRAY[3]

则定义了一维数组ARRAY,数组下标为3,有三个数组元素,分别为ARRAY[1]、ARRAY[2]、ARRAY[3]。

例如:DECLARE BB[2][3]

则定义了二维数组BB,数组下标有两个,分别为2和3,有2*3共6个数组元素,按先行后列的

顺序排列,分别为BB[1][1],BB[1][2],BB[1][3],BB[2][1],BB[2][2],BB[2][3]。 二维数组各元素在内存中按行的顺序存储,而且也可以按一维数组来表示其数组元素。例如上述二维数组BB中的元素BB[2][2]数组声名后,位于第5位,所以该元素也可用BB[5]访问。 当数组被声明后,每个数组元素被默认地赋予逻辑型,值为.F.。 ③数组元素的赋值:

可以给数组的单个数组元素赋值,也可以给整个数组(数组名)赋值。 例如:

DIMENSION AA[3] AA[1]=123 AA[2]=456

?AA[1],AA[2],AA[3] 输出结果是:123 456 .F. 例如:

DIMESION BB[3][4]

BB=123 &&给数组名赋值相当于对整个数组元素赋值。 ?BB[1][1],B[1][2] 输出结果为:123 123

3、函数

系统函数: 主要掌握函数的功能与使用方法(名称、功能、参数、返回值) 1、字符函数:

ALLTRIM():去除首尾空格 TRIM():去除尾部空格

AT()/ATC():检测子串在主串中的位置(AT where) P50 LEFT()/RIGHT():取串左/右边子串 LEN():求串长 (字符数目length) SPACE():产生空格

SUBSTR():取子串 (subordinates) P51

BETWEEN():是否在两个相同数据类型表达式之间,返回.T.,.F.,.NULL. EMPTY():是否为空

2、数值函数

MAX()/MIN():取最大/小值 ABS():取绝对值(absolute) INT():取整 (integret)

MOD():取余 (被除数与除数*商的符号一致,除数、余数符号一致) ROUND():四舍五入函数(圆整) P49 3、日期函数

DATE():取系统日期

DATETIME():取系统日期时间 DAY():取系统日期中的日 DOW():取星期几(1—7)

MONTH():取月份

TIME():当前系统时间,注意返回值是字符型的 YEAR():取年份

4、数据转换函数

CHR():根据所给ASCII码值给出字符

CTOD():字符型转日期型(character to date) DTOC():日期型转字符型

ASC():取最左边字符ASCII码值

STR():数值型转字符型 ,转换后默认的长度为10 P54 VAL():字符型转数值型

5、其他函数

DBC( ):当前打开的数据库完整文件名

DBUSED( ): 指定的数据库文件是否已经打开。返回逻辑值 TYPE():测试类型

GETFILE():弹出―打开‖对话框

IIF():条件成立返回第一结果,否则返回第二个结果 INKEY():等待键盘输入的时间

MESSAGEBOX():消息对话框,函数返回值是数值型的。 P57 FCOUNT() :返回表的字段总数

FIELD() :返回表的字段名 (字段——fields) USED() :测试表是否打开

RECCOUNT() :返回记录总数 (count records) BOF() :测试记录开始标记 EOF() :记录结束标记

DBSETPROP()设置属性 (DB SET PROP) DBGETPROP()返回属性 (DB GET PROP) RECNO() :当前记录号(record number)

4、运算符与表达式

(1)数值运算符 (按优先级排序)

( )、**or^、*or/、%取余、+or-

字符运算符:+:将字符串连接在一起

-:将运算符左侧字符尾部空格移至连接后字符串的末尾 $:匹配。左串是否包含在右串中,返回逻辑值

关系运算符:<、<=、>、>=、<>or!=or#不等于、==精确比较

逻辑运算符:()表达式分组、NOT or !(非) 、AND(与)、OR (或) 日期和日期时间运算符 :+、-,注意:日期型(天数) 时间型(秒数)

特殊的运算符 :圆点运算符(.):用于分隔对象的名称以及分隔对象中属性、事件、方法 作用域运算符(::):提供了从一个子类中调用一个父类的方法。

(2)表达式:由常量、变量、操作符、函数、字段名等组合构成的,能求出一个值的式子。 ①算术表达式:由算术运算符和数值型数据构成的表达式。 ②字符表达式:由字符运算符和字符型数据构成的表达式。

③日期表达式:由日期运算符和日期、时间型数据构成的表达式。

④关系表达式:用关系运算符将数据连接起来的式子。

⑤逻辑表达式:由逻辑运算符和逻辑型数据构成的表达式。

⑥名称表达式:由圆括号括起来的一个字符表达式,用来替换命令或函数中的名称。

例:DBF_NAME=\"XS\"

USE (DBF_NAME) &&等价于命令USE XS

⑦宏替换:用宏替换符号 & 表示,将双引号里的内容替换出来,它与名称表达式具有相似的作用。

例:已知 A=\"1\则 C12=\"GOOD\"

第3章 数据库与表的创建与使用

3.1 数据库概述

在使用数据库管理系统对数据库中数据进行管理之前,一般先充分了解用户的需求,根据用户的要求进行分析和研究,然后根据数据库系统的设计规范创建数据库。设计数据库一般包括以下步骤:

1、确定创建数据库的目的,进行数据需求分析。 2、确定需要的表 3、确定表的字段

4、确定表与表之间的关系

关系数据库处理的主要是一对多的关系,当遇到―多对多‖的情况时,必须建立第三张表,把多对多的关系分解成两个一对多的关系,这时的第三张表称为纽带表。

5、设计的优化

在VFP中创建数据库后,从项目管理器可以看到数据库是由表、本地视图、远程视图、连接和存储过程组成的。

3.2 数据库的创建、打开与使用

在VFP中创建一个数据库xsgl后,此时在磁盘的默认文件夹下产生3个文件:xsgl.dbc 、xsgl.dct 和xsgl.dcx。

在同一时刻,可以同时打开多个数据库,但当前数据库只有一个。

数据库和数据库中表之间是通过前链和后链相关联的。前链保存在数据库中,后链保存在表中,一旦移动了库或表,它们之间的关联将被破坏,这时可用以下命令定位修复。 Validate database recover(以独占方式打开)

3.3 表的创建与使用

在VFP中,表分两种类型:数据库表和自由表。 1、 表结构概述

建立表的步骤是:先设计表的结构,再在VFP 中使用命令或表设计器建立表的结构,并保存为表文件,然后再输入记录。

表结构包括:字段名(Field Name)、字段的数据类型(Type)、字段宽度(Width)、. 空值支持(NULL)

2、 利用表设计器创建和修改表结构

创建表结构主要有两种方法:利用表设计器和使用create table命令。 e.g.create table xs(xh C(6),xm C(8),xb C(2),zydh C(6))

在建立数据表结构后,若想修改表结构,利用表设计器或ALTER TABLE –SQL命令修改。 e.g.alter table xs add column xx &&增加字段

rename column xx &&重命名字段

alter column xx C(10) &&字段宽度改为10

drop column xx &&将xx字段删除 3、字段属性和表属性

数据库表的字段除了具有字段的基本属性(字段名、类型、宽度、小数位数)外,还含有如下自由表所没有的扩展属性:字段的显示格式、输入掩码、默认值、标题、注释以及字段的验证规则等。

字段属性的设置在数据库表的表设计器中进行,需要注意的事项:

标题不带双引号,注释的内容可以带双引号也可不带双引号。

字段的默认值设置时必须根据字段的数据类型,给出该字段默认值的常量表示。

1)默认值如果是字符型,需加上英文双引号,例:xb字段的默认值:‖男‖ 2)如果是日期型,需加上{^ },例:csrq字段的默认值:{^1991/02/11}。 3)如果是数值型,直接输入数值,例:CJ字段的默认值为:60

字段的有效性规则用来控制输入到字段中的数据的取值范围,是一个逻辑表达式,如果字

段的值使得表达式的结果为.T.,则允许该字段值的存在,否则不允许。例:价格(JG)必须大于等于0,则设置规则:jg>=0

字段的有效性信息是对有效性规则的说明,有效性信息是一个字符表达式,需要带西文双

引号,例如:\"价格必须大于0,不能为负数!\"。如果信息内容本身含有双引号,则信息中的双引号使用中文方式下的双引号,例如:\"性别只能是“男”或“女”\" 注意,如果表中现有的数据不满足有效性规则,则若要强行设置,则需要在保存时不选择―用此规则对照现有数据‖选项。 字段的默认控件类:当表中的字段在表单上显示时,常用的类型如字符型、日期型等字段在用表单向导创建表单时,以文本框显示,如果想以其他控件显示,可以在“匹配字段类型到类”中设置。例如,“性别”字段可以设置用“选项按钮组”

长表名和表注释: 在默认情况下,表名就是文件名,例如,JS、XS,这样的表名使用方便,但不直观。对于数据库表来说,可以定义长表名,长表名的最大长度为128个字符,一旦设置好长表名以后,在项目管理器中以长表名代替表名。例如,定义JS表的长表名为―教师表‖,XS表的长表名为―学生表‖。

记录的有效性规则和信息:在向表中输入记录时,希望表中两个以上的字段之间满足一定的条件,可以为表设置记录有效性规则。和字段级规则一样,记录的有效性规则也是逻辑表达式,有效性信息是一个字符型表达式。例如,销售日期必须在生产日期之后,年龄必须比工龄大20。

表的触发器:触发器实际上是绑定在表上的一个逻辑表达式,如果字段的值使得表达式的结果为.T.,则允许相应的操作(删除、插入、更新),否则不允许。当表中的任何记录被指定的操作命令修改时,触发器被激活。

对于表中的记录有三种动作:插入记录、更新记录和删除记录。因此,对于每张表有三个触发器:插入触发器、更新触发器及删除触发器。

设置表的触发器可以在数据库表的表设计器中进行。 4、表的打开与关闭

VFP 在使用表时,首先必须把表打开,一张打开的表必须占用一个工作区。一个工作区在某一时刻只能打开一张表。如果在一个工作区中已经打开一张表,再在此工作区中打开另一张表时,前一张表将自动被关闭。一张表也可以在多个工作区中多次被打开。

工作区是用以标识一张打开的表的区域。每个工作区有一个编号。在工作区中打开的表都有一个别名。

选择工作区的命令:

SELECT 区号/别名

SELECT 0 是指选择当前未被使用的最小编号的工作区,而不是选择0 号工作区。

一张表可以同时被多个用户打开,称为表的共享使用。反之,当一张表只能被一个用户打开时,称为表的独占使用。

当打开一张表时,如果没有指定用何种方式打开,则系统以默认的方式打开。系统的默认打开方式可以通过―工具‖菜单中的―选项„‖命令来设置。也可以用命令SET EXCLUSIVE ON|OFF 来设置。

在打开表时,亦可以用显式指定的独占或共享方式打开。在―打开‖窗口的右下角有―独占‖复选框,选中表示独占,否则表示共享。或使用命令USE js SHARED|EXCLUSIVE

5、记录的处理

(1)使用INSERT – SQL 命令追加记录

命令语法:INSERT INTO 表名[(字段1[,字段2])] VALUES(表达式1 [,表达式2 ]) e.g. Insert into cpb(cph,cpm,sccj,jg,scrq)values(―p02‖,‖电冰箱‖,‖北

京‖,4800,{^2002-2-14})

备注型字段显示―memo‖,表示无内容,双击备注型字段或按CTRL+HOME,出现编辑窗口输入。备注型字段若显示―Memo‖,表示有内容。

通用型字段显示―gen‖,表示无内容,双击通用型字段或按CTRL+HOME,出现编辑窗口后利用菜单命令―编辑‖→―插入对象‖输入。通用型字段若显示―Gen‖,表示有内容。 (2)用BROWSE命令浏览

例如,浏览学生表中性别为男的学号、姓名字段。

Browse fileds xh,xm for xb=―男‖ (3)记录的筛选

可以使用SET FILTER TO 命令设置。 例如:仅显示学生表中性别为女的学生。 Set filter to xb=‖女‖ BROWSE

(4)限制对字段的访问

可以使用SET FIELD TO 命令设置。 例如:仅显示学生表中学号、姓名字段。 Set field to xh,xm BROWSE

(5)记录的定位

记录的定位方式可分为:记录的绝对定位、记录的相对定位和条件定位。 绝对定位命令: GOTO N 相对定位命令: SKIP [n]

条件定位命令:LOCATE FOR 条件

CONTINUE命令需要与条件定位命令联合使用,即定位到下一个满足条件的记录。 (6)记录的修改

可以用界面方式的记录修改也可以使用命令修改记录 UPDATE SQL命令

语法:UPDATE 表名 SET 字段1=表达式1[,字段2=表达式2 ]WHERE 条件表达式 例如,对教师表中计算机系的教师基本工资上浮20% Update js set jbgz=jbgz*1.2 where ximing=‖计算机系‖ REPLACE命令 语法:

REPLACE 字段1 WITH 表达式1 [ADDITIVE ],[字段2 WITH 表达式2,„][SCOPE][FOR 条件] Replace all jbgz with jbgz*1.2 for ximing=‖计算机系‖ (7) 记录的删除与恢复

在Visual FoxPro 中提供了逻辑删除和物理删除两种删除方式。

逻辑删除:为了防止误删除,只在要删除的记录前作一个删除标记。

物理删除:是将记录真正的删除掉,数据表中不再保留这些记录,而且删除后不能够恢复。

a) 标记要删除的记录

命令操作:使用DELETE 命令或DELETE  SQL命令 DELETE 命令语法:DELETE [Scope][FOR 条件表达式] DELETE-SQL语法:DELETE FROM 表名 [WHERE 条件表达式] b) 恢复带删除标记的记录: RECALL [Scope][FOR 条件表达式] 例如:对教师表中工龄大于30的教师删除标记恢复 RECALL ALL FOR WHERE year(date())-year(gzrq)>30

c) 彻底删除记录

使用PACK 或 ZAP命令,PACK命令删除带删除标记的记录,ZAP命令物理删除所有记录。注意使用PACK命令时表必须以独占方式打开。 d) 对带有删除标记的记录的访问

使用SET DELETED ON|OFF命令可以指定VFP是否处理带有删除标记的记录。 SET DELETED ON &&忽略标有删除标记的记录 SET DELETED OFF &&允许访问标有删除标记的记录 (8)数据的复制

数据复制可以使用copy to命令。

语法:COPY TO Filename [FIELDS FieldList ] [Scope] [FOR | Expression] [SDF|XLS] 利用copy to 命令可以将当前表中的记录复制到新表中。新表可以是VFP类型,也可以是EXCEL类型(加XLS)或文本类型(加SDF)。复制到新表中的记录可以是满足条件的记录。

e.g. 将JS表中的所有男教师的记录复制到EXCEL表MAN中。

USE JS

COPY TO MAN FOR XB=‖男‖XLS USE

6、 索引的创建与使用

表中记录的存储顺序称为物理顺序。记录号标识了记录的物理顺序。表打开后被使用时,记录的处理顺序称为逻辑顺序。 (1)索引文件类型:

结构复合索引文件——索引文件的主名由系统给定,与表名相同,扩展名为.CDX,一个结构复合索引文件可存储一个或多个索引信息。结构复合索引文件随表的打开而自动打开,随表的关闭而自动关闭,并在使用过程中自动更新。

非结构复合索引文件——一个非结构的复合索引文件也可存储一个或多个索引信息。非结构复合索引文件的主名由用户给定,与表名不同,扩展名为.CDX。非结构复合索引文件不会随表的打开而打开。

独立索引文件——一个索引文件只可存储一个索引信息。独立索引文件的名字由用户给定,扩展名为.IDX。独立索引文件不随表的打开而打开。

(2)索引的类型: 普通索引、唯一索引、候选索引、主索引(一个表只能创建一个,只用于数据库表;组成主索引的字段或表达式,在表的所有记录中不能有重复的值)

(3)索引表达式:

索引表达式是建立索引的依据,通常有一个或多个字段组成。多个字段一定要保持多个字段的数据类型一致,若不是相同类型,需要通过一系列的函数进行转换。例如,先按性别排,性别相同的再按出生日期排,索引关键字应为:js.xb+DTOC(js.csrq,1)‖。常用的转换函数有DTOC( ),STR()。

注意:不能对备注型字段和通用型字段建立索引。 (4)索引的使用:

VFP中为数据表建立的索引都存储在以 .CDX为扩展名的复合结构索引文件中,在打开数据表的同时,索引文件也会随之打开。在该索引文件的多个索引中,在某一时刻只有一个索引对表起作用,这个索引标识称为主控索引。 使用SET ORDER TO命令可设置主控索引

利用索引快速定位记录:使用SEEK命令可以进行记录的快速定位。

SEEK命令只能在具有索引的表中使用。SEEK命令的结果反映在FOUND()函数上,如果有相匹配的记录, FOUND()的结果为.T.;否则指针指向文件尾,FOUND()的结果为.F.。

7、 自由表

所谓自由表,就是不隶属于任何数据库的表。自由表不能创建数据库表具有的那些扩展属性。自由表不能创建主索引。自由表可以添加到数据库中,成为数据库表;反之,数据库表从数据库中移出,成为自由表。

需要注意的是:一张表在同一时间内只能属于一个数据库。

将属于A数据库的表添加到B数据库中的办法:先将A数据库中的表后链解除,然后添加到B数据库中。解除后链的方法可以使用“移去”按钮,也可以用命令:

FREE TABLE 表名

3.4 永久性关系与参照完整性 1.永久关系

永久关系是库表之间的一种关系,一旦创建不仅在运行时存在,而且一直保留,拥有永久关系的表必须在数据库中。

表间的永久关系是使用索引建立的。建立永久关系的一般步骤如下: ①确定两张具有一对多或一对一关系的表。 ②建立主表的主索引或候选索引。

③如果是一对多关系,则在子表中以主表的外关键字建立普通索引;如果是一对一关系,则在子表中以与主表相同的关键字建立主索引或候选索引。

④在数据库设计器窗口,将主表的主索引或候选索引标识拖放到子表相应的索引标识上,即完成永久性关系的建立。 2、参照完整性

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

参照完整性的一般要求 :①子表中的每一条记录在对应的主表中必须有一个父记录。 ②在子表中插入记录时,其外部关键字必须是父表主关键字值中的一个。 ③在父表中删除记录时,与该记录相关的子表中的记录必须全部删除。

在VFP中,参照完整性规则分为更新规则、删除规则和插入规则,更新和删除规则有级联、限制、忽略三种设置,插入规则只有限制和忽略两种设置。 3、 VFP数据完整性综述

VFP实现了关系数据库的三类完整性:

实体完整性:包括字段的数据完整性和记录的数据完整性 参照完整性:相关表之间的数据一致性 用户自定义完整性

3.5 有关数据库及其对象的常用函数 DBGETPROP( )函数 利用DBGETPROP( )函数可以返回当前数据库的属性,或者返回当前数据库中字段、表或视图的属性。

例如,要查看js 表及它所在的jxsj数据库的注释 ? DBGETPROP(―jxsj‖, ‖DATABASE‖,‖Comment‖) ? DBGETPROP(―js‖, ‖TABLE‖,‖Comment‖)

DBSETPROP( )函数

利用DBSETPROP( )函数,可以给当前数据库或当前数据库中表的字段、表或视图设置属性。该函数只能设置部分属性。

例如:要设置jxsj数据库和js表的注释分别为―教学数据库‖、―教师表‖ =DBSETPROP(―jxsj‖, ‖DATABASE‖ , ‖Comment‖ ,‖教学数据库‖) =DBSETPROP(―js‖, ‖TABLE‖ , ‖Comment‖ ,‖教师表‖)

第4章 查询与视图

4.1 查询的本质

查询是一个指向数据库发出检索信息的请求,它使用一些条件提取特定的记录。查询基于的数据源可以是一张或多张自由表、数据库表或视图。查询的结果是一组只读型的检索结果。一个查询保存为一个扩展名为.QPR的文件。在查询文件中保存的是实现查询的SELECT-SQL命令,而非查询的结果。查询的本质是 SELECT-SQL命令的可视化设计方法。

4.2 查询的创建和使用 (1)打开查询设计器

(2)定义查询的输出内容 (3)设置查询的筛选条件

(4)设置查询结果的排序依据(即排序选项卡) (5)设置查询结果的分组依据(即分组选项卡)

所谓分组就是将一组类似的记录压缩成一个结果记录,这样就可以完成基于一组记录的计算。

分组与某些合计函数联合使用

COUNT( ): 用于计算 SUM( ): 用于求和

AVG( ): 用于求平均值 MAX( ): 求最大值 MIN( ): 求最小值

如果在分组的表达式上还需对查询结果进行记录的筛选,可以使用―分组依据‖选项卡上的―满足条件‖按钮。

(6)查询结果的其它设置(杂项选项卡)

①―无重复记录‖:将排除结果中所有重复的记录。

②设置结果的记录范围: 全部、前n个记录、前n%个记录 (7)查询结果的输出类型

默认的输出方式是―浏览‖,可以设置输出到临时表、表、屏幕、报表等,注意不能输出到表单。

(8)保存查询文件。扩展名为.qpr

(9)运行查询

当用DO命令来执行查询时,查询文件的扩展名(.QPR)不能省略。 多表联接的类型有内联接、左联接、右联接和完全联接。

注意左联接的含义:查询结果中包括左表的记录和满足条件的记录。

4.3 SELECT –SQL 语句

SQL(Structured Query Language,结构化查询语言)

SELECT-SQL命令

SELECT—SQL命令的语法比较复杂,可以通过将它分解为以下几个组成部分来掌握。 (1)查询内容:[Alias.] Select_Item [AS Column_Name]子句 1)Alias. 表的别名和一个句点,以防止出现重复的列。

2)Select_Item 指定包含在查询结果中的项,可以是字段、常量、表达式和用户自定义函数。

3)AS Column_Name 指定查询结果中的标题。特别是当Select_Item是一个表达式或是一个函数时,很有用。

(2)查询对象:FROM子句 列出所有从中检索数据的表。 (3)查询结果去向:INTO子句 指定在何处保存查询结果。 ARRAY 数组名

INTO CURSOR 临时表名 DBF 表名

FILE 文本文件名 [ADDITIVE] TO PRINTER 打印机 SCREEN 屏幕

(4)条件查询:WHERE子句

指定筛选条件。当多表查询时,也可以用WHERE子句实现多表之间的联接。 (5)分组查询:GROUP BY子句 按列的值对查询结果进行分组。

i. GroupColumn 可以是字段名或表达式,也可以是该列在查询结果中的列位置(最左边的列编号为1)

ii. HAVING子句指定包括在查询结果中的组必须满足的筛选条件,它应该同GROUP BY一起使用。

(6)查询结果的排序:ORDER BY子句 根据列的数据对查询结果进行排序。

i. 每个Order_Item必须对应查询结果中的一列。

ii. Order_Item 可以是输出列的列名或别名,也可以是查询结果中的列位置(最左

边的列编号为1)

(7)杂项

[ALL|DISTINCT]:设置是否允许重复记录。

[TOP nExpr[PERCENT]]:设置结果的记录范围。 (8)联合查询:UNION P125例4.13

把一个SELECT—SQL 语句的最后查询结果同另一个 SELECT—SQL语句的最后查询结果组合起来。

UNION子句遵守下列规则:

i. 不能使用 UNION来组合子查询。

ii. 两个SELECT—SQL命令的查询结果中的列数必须相同。

iii. 两个SELECT—SQL查询结果中的对应列必须有相同的数据类型和宽度。

iv. 只有最后的SELECT—SQL 中可以包含 ORDER BY 子句,而且必须按编号指出所输出的列。

(9)子查询:IN

一个SELECT语句中还可以包括SELECT语句。子查询通常使用在WHERE子句中。

4.4 视图的创建和使用

视图是一个虚拟表。所谓虚拟,是因为视图的数据是从已有的数据库表或其它视图中抽取得来的,这些数据在数据库中并不实际存储,仅在其数据字典中存储视图的定义。但视图一经定义,就成为数据库的组成部分,可以像数据库表一样接受用户的访问。

创建视图和创建查询的过程类似,主要的差别在于视图是可更新的,而查询的结果是只读的。 可以创建两种类型的视图:本地视图和远程视图。 1、创建本地视图

(2) 使用视图设计器

视图设计器基本上与查询设计器一样,只是比查询设计器多了一个―更新条件‖。

2、使用视图更新源表数据

―视图设计器‖对话框中的―更新条件‖选项卡,可以控制把对数据的修改回送到数据源(基表)中。

3、创建参数化视图 在筛选条件中用? 4、视图的使用

视图建立之后,不但可以用它来显示和更新数据,而且还可以通过调整它的属性来提高性能。处理视图类似处理表。 (1)视图的打开与浏览

①可以在―项目管理器‖中选择一数据库,或在―数据库设计器‖窗口中选择视图名,然后按―浏览‖按钮打开。

②也可以用命令:USE 视图名 打开后,再用BROWSE命令打开―浏览‖窗口。 ③或者也可以在―数据工作期‖窗口中打开视图并显示。 (2)视图的修改、重命名、删除 (3)集成视图

基于视图还可以创建视图

第5章 程序设计基础

5.1 程序设计概述

VFP支持结构化的程序设计和面向对象的程序设计。

结构化的程序设计的本质是功能设计。面向对象的程序设计的核心是类的设计。 与程序相关的几个概念:

(1)程序:为解决某一问题而设计的一系列指令。 (2)主程序:通常被用户直接执行的程序。 (3)子程序:在程序中被调用的程序。

(4)源程序(.prg):用源语言编写的计算机程序,必须翻译成机器语言后才能被执行。 (5)可执行程序:源程序被编译后产生的可被机器直接执行的程序,具有.EXE 扩展名。在VFP中是指由项目管理器连编生成的、可脱离VFP环境运行的程序。

5.2 结构化程序设计 1、创建、修改和运行程序 (1)创建程序文件 MODIFY COMMAND [程序名] (2)程序文件的运行

在命令窗口,用 DO 程序名

2、程序结构

结构化程序设计的基本思想是将应用程序划分为几个功能相对独立的模块,每个模块完成一个功能,各个模块之间通过程序调用和数据传递把它们结合在一起。整个程序流程由逻辑控制结构决定。VFP包括三种最基本的逻辑控制结构:顺序结构、分支结构和循环结构。 1)顺序结构

顺序结构按命令的书写顺序依次执行,它是程序中最基本的结构。

2)分支结构

计算机具有逻辑判断功能,判断就是根据不同的条件,转向执行不同的语句实现相应的功能。VFP能用条件语句构成分支结构,根据条件成立与否来决定程序执行的流向。 ①单分支结构的语法格式: IF 〈逻辑表达式〉 〈命令系列〉

ENDIF

②双分支结构的语法格式: IF 〈逻辑表达式〉 〈命令系列1〉 ELSE

〈命令系列2〉 ENDIF

③多分支结构

用IF语句的嵌套可以实现多分支的情况,若用DO CASE 语句则程序结构更清楚。 情况语句语法格式: DO CASE

CASE 〈情况1〉

〈语句序列1〉

CASE 〈情况2〉

〈语句系列2〉 „„

CASE 〈情况N〉

〈语句序列N〉 [OTHERWISE]

〈语句系列〉

ENDCASE

注意:DO CASE 与第一个CASE之间不能有任何语句。 3)循环结构

循环结构用于控制部分命令的反复执行,有DO WHILE „„ENDDO,FOR „„ENDFOR ,SCAN„„ENDSCAN三种形式。 ①FOR „„ENDFOR形式 语句格式:

FOR 〈变量〉=〈初值〉 TO 〈终值〉 [STEP 〈步长〉] 〈语句组〉

ENDFOR/NEXT

功能:主要用于已知执行次数的循环,只要〈变量〉的值不超过终值,程序将重复执行循环体中的语句。

说明:[STEP 〈步长〉]为可选项,当步长为1,可缺省。

FOR循环一般用于固定次数的循环,而DO WHILE循环既可用于固定次数的循环,也可用于不确定次数的循环,可以说凡是能用FOR循环的地方都可以用DO WH ILE循环实现。 ②DO WHILE „„ENDDO循环 语句格式:

DO WHILE 〈条件〉 〈语句系列〉 ENDDO

功能:根据指定的逻辑条件,控制语句序列执行的次数。只有DO WHILE 条件为假时,才结束循环。

在循环语句中,有两个特殊的语句:EXIT 和LOOP EXIT:循环出口语句,遇到EXIT 循环结束。

LOOP:短路语句,遇到 LOOP回到循环的开始而短路了LOOP与ENDDO之间的语句。 在任何时候都可以通过使用EXIT命令从当前循环中退出,或者使用LOOP命令来跳过当前循环体中的后续处理。

对FOR循环和DO WHILE循环,在一般的高级语言中都有,只是语法规则稍有差异。而下面介绍的SCAN循环是VFP特有的,专门用于表文件。 ③SCAN„„ENDSCAN

语句格式:

SCAN [〈范围〉] [FOR 〈逻辑表达式1〉] [WHILE 〈逻辑表达式2〉]

〈语句系列〉 ENDSCAN

说明:SCAN循环主要用于表文件的循环。〈范围〉子句表示记录的范围,缺省值为ALL。语

句执行时在〈范围〉中依次寻找满足FOR条件或WHILE条件的记录,并对满足条件的记录执行语句系列,每次遇到ENDSCAN记录指针自动加1。FOR条件是对指定范围内所有满足条件的记录进行操作;而WHILE条件是从当前记录开始在指定范围内循环,一旦遇到不满足条件的记录,即使后面还有满足条件的记录,结束循环。

3、过程和用户自定义函数: (1)过程定义格式: PROCEDURE 过程名 [PARAMETERS 参数表] 命令组

[RETURN 表达式] [ENDPROC]

(2)调用方法:DO 过程名 [WITH 参数表] (3)自定义函数定义格式: FUNCTION 函数名

[PARAMETERS 参数表] 命令组

[RETURN 表达式] [ENDFUNC]

(4)调用方法:与VFP中的的标准函数的调用方式完全相同,函数名(实在参数)

5.3 面向对象的程序设计基础 1、类和对象

类的特征:继承性、多态性、封装性。

对象是类的实例, 每个对象都有属性、事件和方法,其中,属性和方法可以自定义,事件不能。

2.Vfp的基类

类可以分为三类:基类、子类和用户自定义类。 基类根据是否包容其他类分为容器类和控件类。

容器类是包含其他类的基类。例如,表单集(表单、工具栏)、选项按纽组。 控件类是可以包含在容器类中的基类。例如,命令按钮和文本框就属于控件类。

基类的最小属性集

Class 该类属于何种类型

BaseClass 该类由何种基类派生而来 ClassLibrary 该来属于那种类库 ParentClass 对象所基于的类

基类的最小事件集

Init 当对象创建时激活

Destroy 当对象从内存中释放时激活

Error 当类中的事件或方法程序运行中发生错误时激活

3、对象的引用:绝对引用、相对引用 相对引用的关键字: This 该对象本身

Thisform 该对象所在的表单

Thisformset 该对象所在的表单集

Parent 包含该对象的直接容器 _Screen 屏幕对象

设置对象的属性

格式:引用对象.属性名=属性值 如:thisform.Text1.Value=DATE()

同时设置一个对象的多个属性,采用WITH„ENDWITH结构

调用对象方法程序的语法为:引用对象.方法程序

例如:设置输入焦点在文本框上: thisform.text1.SetFocus

事件激发的顺序

Load,Init,Activate,Destroy,Unload When ,Gotfocus ,Valid, Lostfocus

4、事件循环驱动和事件循环

1)事件驱动(Event Driven):在面向对象的程序设计中,程序代码大多数是为对象或对象的某个(某些)事件而编写,程序代码的执行总是由某个事件的发生而引起。即采用面向对象的程序设计方法设计的应用程序,其功能的实现是由事件驱动的。

2) 事件循环(Event Loop):利用VFP进行应用程序设计时,必须创建事件循环。 READ EVENTS命令:启动事件循环,以等待用户操作并进行响应。 CLEAR EVENTS命令:终止事件循环。

第6章 表单及其控件的创建与使用

6.1 表单概述

表单是VFP 人机交互的主要工具。设计一个表单,第一步是选择数据源,也就是数据环境的问题,第二步是向表单或表单集中添加对象,第三步是对表单或表单集中的对象进行处理,最后是管理表单的问题。设计表单时可以使用表单向导或表单设计器。

1、表单的数据环境

―数据环境‖是包含了表单、表单集和报表所需的表、视图和表之间的临时关系的容器。使用―数据环境‖可以简化程序的设计。凡是在表单、表单集和报表中要处理表或视图数据,应尽可能地利用“数据环境‖。

直接从数据环境中拖放以下对象,默认的情况下会在表单上生成的 控件如下: 表 → 表格

逻辑型字段 → 复选框 备注型字段 → 编辑框

通用型字段 → OLE绑定型控件

其他类型的字段 → 文本框 2、表单的保存与运行

创建表单后,生成两个文件:扩展名为.scx,.sct 运行表单的命令是: DO FORM 表单名

3、表单集

表单集:可包含一张或多张表单的容器。

表单集中如果包含3个表单,在保存表单集时还是两个文件.scx,.sct 表单集中有多少张表单取决于Formcount属性。

有关单文档和多文档界面: 如果表单为顶层表单,则ShowWindow的属性值为2;如果

表单为子表单,则ShowWindow的属性值为0或1,且Desktop属性值为.F.;如果表单为浮动表单,则ShowWindow的属性值为0或1,且Desktop属性值为.T.。

6.4 控件的创建与使用

控件分为:绑定型控件和非绑定型控件。

绑定型控件——指其内容可以与后端的表、视图或查询中的字段或内容变量相关联的控件。通常用于输入、显示、修改数据等。复选框、列表框、组合框、编辑框、选项按钮、文本框、表格等控件都可以与数据绑定。ControlSource属性用于指定与其他控件相绑定的数据源。RecordSource属性用于指定与表格控件相绑定的数据源。

非绑定型控件——指其内容不与后端的表、视图和查询中的字段或内容变量相关联的控件,如形状、标签等。 1、标签(label) 主要属性

Caption :指定在对象标题中显示的文本,属性值为字符串,允许包含的最大字符数目

为256个。

BackStyle:指定显示的标签是否透明。

AutoSize:决定是否可以自动地调整标签的大小。 WordWrap:确定标签上显示的文本能否换行。 Fontsize:字体大小 Fontname:字体名称 Forecolor:前景色 Backcolor:背景色

2、文本框和编辑框(TEXTBOX、EDITBOX) 主要属性

ControlSource 指定与文本框绑定的数据源 Value 指定文本框的当前选定的值。

InputMask 指定文本框中数据的输入格式和显示方式。

Format 指定控件的Value属性的输入和输出格式,即指定数据输入的限制条件和显示格

式。

PasswordChar 用设定的字符来显示用户输入的值,而实际输入保存在value属性中。 主要事件和方法

事件:

GotFocus对象接受焦点时发生

KeyPress用户按下或释放键时发生 Valid失去焦点之前发生

LostFocus对象失去焦点时发生

方法:

SetFocus设置输入焦点

因篇幅问题不能全部显示,请点此查看更多更全内容

热门图文

Top