教学内容与目的:
⑪了解计算机数据管理的发展历程;
⑫掌握数据库系统的基本概念、数据库管理系统的功能; ⑬掌握关系数据库的特点及关系运算; ⑭了解数据库设计的主要过程;
⑮了解VFP(Visual Foxpro)系统的概述和特点。
教学重点: 数据库系统 教学难点: 关系数据库
课时分配: §1.1 :4课时 §1.2 :2课时 §1.3 :1课时 §1.4: 1课时
引入:为什么要学数据库管理?
计算机应用领域
任一企事业单位都涉及到数据处理,称“五M管理”:
科学计算过程控制数据处理___占80%计算机处理份额
人 man 财 money 物 material 设备 machine
方法 methodology 制度等
-1-
Visual FoxPro基础
§1.1数据库基础知识
§ 1.1.1 计算机数据管理的发展
一、数据与数据处理
1.数据:是描述客观事物的符号记录,是用物理符号记录下来的可以鉴别的事物
特性。包括:数字、文字、图形、图像、动画、声音等。
2.信息:是数据经过加工处理后的有用结果。或是能表示一定含义的数据。
例:
数据描述: 王阳,9098135,男1980,江苏,计算机系,1998。 经过简单的推论后,可得出这样的信息:
王阳是位男大学生,学号为9098135,1980年出生,江苏人,1998年考入计算机系。
3.数据处理:将数据转换成信息的过程。 内容包括:
数据收集 →数据整理(鉴别) → 存储数据 → 使用数据(计算、统计、查询等) →维护数据
故通过数据处理可以获取信息,然后对信息进行解释、推论、归纳、分析、综合等而产生决策。
在一个企事业单位中,数据的处理与作用呈金字塔形,如下图所示:
战略层
高层 中层 基层
战术层 数据管理任务 操作层
二、数据管理技术的发展
计算机对数据的管理是指对数据的组织、分类、编码、检索和维护所提供的操作手段。
经历了:人工管理、文件系统、数据库系统、分布式数据系统、面向对象数据库系统。
1、人工管理
20世纪50年代中期以前
特点:①程序员必须掌握数据在计算机中的存储地址和方式,才能在程序中正确的使用数据。
-2-
——Visual FoxPro程序设计 ②程序与数据不,数据不能保存,程序之间有数据冗余。 2.文件系统
20世纪50年代后期至60年代中期
特点:①数据存储在数据文件中,由文件管理系统使用数据。
②数据文件和程序文件相互依赖,数据冗余度大,且造成数据的不一
致性。
3.数据库系统
20世纪60年代后期至今
特点:①数据库诞生, 数据库通过数据库管理系统进行管理。 ②数据冗余度减小,共享性提高。 4.分布式数据库系统
20世纪80年代,随着网络技术的发展,适应C/S系统结构的数据库系统。 特点:①在一个分布式数据库中,一个应用可以对其所需的数据进行透明的
操作,这些数据在不同的数据库中分布,由不同的数据库管理系统管理,在不同的机器上运行,由不同的操作系统支持,被不同的通信网络支持。
透明:指从逻辑角度看,应用程序所操作的数据好像是由运行在一
台机器上的单一的数据库管理系统管理着。
②由很多物理上分开的数据库系统通过通信网络连在一起,不同位置
的数据库协同工作,用户可以访问到网络上任何位置的数据库中的数据,就好像在本机访问一样。
5.面向对象数据库
是数据库技术与面向对象程序设计相结合的产物,是面向对象的方法在数据库领域中的实现和应用。
基本思想:用户程序不应与面向机器的结构如字段和记录直接打交道,而应该直接对对象和建立在对象之上的操作进行处理。
OODB(OAbject Oriented Database)技术可以满足的应用包括: ① CAD
② 计算机辅助软件工程 ③ 多媒体数据库 ④ 办公自动化 ⑤ 超文本数据库
§1.1.2数据库系统
一、数据库的概念
1.数据库(DB—Database):(是以一定的组织方式存储在计算机的存储设
-3-
Visual FoxPro基础
备上的相互关联的数据集合。)
①定义:是存储在计算机存储设备上,结构化的相关数据集合。它能以最佳.......
的方式、最少的重复为多种应用服务
②特点:
1)数据的共享性:库中的数据可为多个程序、用户服务。
2)性:数据文件与用户的应用程序彼此,即修改数据时,不必修改
使用数据的程序
3)数据库的数据冗余(重复)少。 例:学生信息库
学号,姓名,性别,年龄,特长,各门课程学习成绩,家庭住址,学习经历
等。
应用1: 班主任了解学生基本状况→住址,学习经历 应用2:开运动会挑选运动员→特长 应用3:文艺活动→特长
应用4:评三好学生、优秀毕业生,或用人单位筛选→学生成绩 2.数据库应用系统
定义:指系统开发人员利用数据库系统资源开发出来的,而向某一类实际应
用的应用软件系统。
如:劳资系统、人事管理系统、学生信息系统、员工培训系统、物资管理系统、教学管理系统、维修系统、客户跟踪系统等。
3.数据库管理系统(DBMS—Database Management System)
① 定义:是用来管理数据库数据的大型程序,是用户与数据库的接口。 ② 说明:
1)DBMS 提供各种命令对DB进行操作,可以帮助用户完成数据库的建立、询问、显示、修改、打印报表等工作。
2)DBMS包括数据描述语言及其翻译程序、数据操纵语言及其编译程序、数据库管理例行程序。
3)通俗地说:数据库是存放数据的地方,而DBMS是指在数据库的环境下,如何存取数据等多种管理数据库的功能。
4.数据库系统
①定义:指引进数据库技术后的计算机系统有组织地,动态地存储大量相关数据提供数据处理和信息资源共享的便利手段
②组成有五部分:硬件系统、数据库集合、DBMS及相关软件、数据管理员和用户。
数据库系统如图1-1所示。
-4-
——Visual FoxPro程序设计 用户1 用户2 „„ 数据库 管理系统 DBMS 数据库 计算机软硬+ 件系统 用户n DB DBS
图1-1 数据库系统组成
二、数据库系统的特点
1.实现数据共享,减少数据冗余。 2.采用特定的数据模型
结构化的数据通过数据模型表现出来,事物内部属性间的联系和事物与事物之间的联系。 3.具有较高的数据性
用户只需操作数据,而无需考虑数据在存储上的物理位置与结构。 4.有统一的数据控制功能
DBS提供了必要的保护措施,包括 :
用并发访问控制:多用户对数据的并发使密和破坏安全性控制:以防破坏,不合法的使用而造成泄完整性控制:库中的数据在操作和维护过程中可以保持正确无误
§1.1.3数据模型
一、实体的描述
1、实体
客观存在并且可以相互区别的事物实体 2、实体的属性 属性:描述实体的特性 3、实体集和实体型
实体集:同类型的实体的集合(行)
实体型:属性的集合表示一种实体的类型(列) 二、实体间的联系及联系的种类
-5-
Visual FoxPro基础
联系:实体之间的对应关系。
联系的种类:指一个实体型中可能出现的每一个实体与另一个实体型中多少个具体实体存在联系。
实体联系有三种:
① 一对一联系 (1:1) 例:班长与班级
② 一对多联系 (1:n) 例:系与教师、班级与学生 ③ 多对多联系 (m:n) 例:学生与课程、教师与课程 三、数据模型简介
1.模型:是实现世界特征的模拟和抽象。
数据模型:是实现世界数据特征的抽象。
⑪数据模型用来表示数据库中数据的结构,即事物本身属性间及事物之间的各种联系。
⑫数据模型是DBS的基础,因此任何一个DBMS都是基于某种数据模型的,其分为三种:
层次模型、网状模型、关系模型 2.层次数据模型
定义:用树型结构表示实体及其之间联系的模型,支持层次模型的DBMS称为层次DBMS,在此系统中建立的DB是层次数据库。
特点:①有且只有一个根结点;
②除根结点之外的其他结点有且只有一个双亲结点; ③结点间的关系是父子之间的一对多的联系。 例:家谱 、单位部门 、学院机构等。 3.网状模型
定义:用网状结构表示实体间联系的模型 特点:①允许一个以上的结点无父结点;
②一个结点可以有多于一个的父结点双亲。 4.关系数据模型
关系模型:用二维表结构来表示实体以及实体间联系的模型。
特点:概念描述单一。每个关系就是一个二维表,无论实体本身还是实体间
的联系均用二维表来表示
§1.2关系数据库
§1.2.1关系模型
关系数据模型:用二维表的形式表示实体和实体间联系的数据模型。 一、关系术语
-6-
——Visual FoxPro程序设计 1.关系:一个关系就是一张二维表,每个关系有一个关系名。 说明:①在VFP中,一个关系存储为一个文件,文件扩展名为dbf,称为
“表”。
②对关系的描述为关系模型,一个关系的模式对应一个关系的结构,其格式为:关系名(属性名1,属性名2,...,属性名n) 在VFP中表示为表结构:
表名(字段名1,字段名2,...,字段名n) 2.元组:表中的一行称为一个元组,在VF中称为记录。 注:元组对应存储文件中的一条记录
3.属性:表中的一列称为一个属性,每一列有一个属性名。每个属性有属性
名、数据类型、宽度)
注:在VFP中表示为字段. 4.域:属性的取值范围。
例:职工的年龄在18~60岁,性别的属性域为(男、女)
5.关键字(PK---Primary Key):属性或属性的组合,其值能唯一确定一个元组,例:学号。
候选关键字:满足关键字特性的最小属性组合都叫候选关键字。 注:每个关系都必须选择一个候选关键字作为主关键字。
6.外部关键字(FK---Foreign Key):如果表中的一个字段不是本表的主关键字或候选关键字,而是另外一个表的主关键字或候选关键字,这个字段就称外部关键字。
例: 学生表 成绩表
S_NO S C_NO
SC
二、关系的特点
SC_NO S_NO(FK) C_NO(FK) 1.关系必须规范化:即每一个关系模式都必须满足一定的要求。(巴科斯范式)
最基本的要求:每个属性必须是不可分割(每个字段必须是初等项)的数据
-7-
Visual FoxPro基础
单元。
例学生成绩:分割为各科成绩。
2.在同一类关系中不能出现相同的属性名 即一个表中不能有相同的字段名(列唯一) 3.关系中不允许有完全相同的元组,即冗余(行唯一) 4.在一个关系中元组的次序无关紧要 5.在一个关系中列的次序无关紧要 即:行,列次序可以任意交换
总结 :属性初等项、行和列唯一、行列任意交换 .....................三、实际关系模型
VFP中一个数据库中,包含相互之间存在联系的多个表,这个库文件就代表一个实际的关系模型。教材P11例1.1和1.2。
例: 学生 — 选课 —课程关系模型 有三个关系模式:
student(学号,姓名,性别,年龄) sc(学号,课程号,成绩) course(课程号,课程名,学分) 关系模型如下图所示:
-8-
——Visual FoxPro程序设计 FK PK PK FK Student SC Course 学号 学号 姓名 S1 S2 S3 S4 S5 3 SC3 99 C1 71 C1 79 统的集合运算2 SC2 年龄 李小平 15 王大海 16 刘小娟 15 张萍 16 刘小林 15 男 男 女 女 男 2 SC3 90 1 SC1 92 1 SC3 85 性别 1 SC2 S课程号 成绩 C1 98 课程号 课程名 学分 C1 C2 C3 VF 2 C++ 4 VB 3 §1.2.2 关系运算 关系的基本运算有两类: ①传(并、差、交等); 3 S4 S5 ②专门的关系运算(选择、投影、联接)
一、传统的集合运算:进行运算的关系须有相同的结构
1.并:由属于这两个关系的元组成(R∪S) 2.差:从前一个关系去掉后一个关系中也有的元组
(R-S )----结果为属于R但不属于S的元组 3.交:由相同属于两个关系的元组组成的集合(R∩S) 例: R S
A1 B1 C1 A B C A B C A1 B2 C2 A1 B2 C2 A1 B3 C2
A2 B2 C1 A2 B2 C1
-9-
Visual FoxPro基础
A B C A B C
RUS
A1 B2 C2 A2 B2 C1 A1 B1 C1 二、专门
1.选定
A1 B1 C1 的关系运算 A1 B2 C2 A2 B2 C1 A1 B3 C2 A B C 择 Select
义:从关系中找出满足给定条件的元组的操作
条件由逻辑表达式给出
水平方向的选择----- 行(选行操作) 结果是原关系的一个子集
例:查询总分在480以上的考生 2.投影 Project
含义:从关系模式中指定若干个属性组成新的关系
垂直方向的选择 —选列
例: 显示学生信息表的特长属性
只产生由学号,姓名,特长,组成的新表
3.联接 join
含义:将两个关系模式组合,生成的新关系中包含满足联接条件的元组
两表横向结合
例:学生表和成绩表,通过学号连接。 4.自然联接
-10-
——Visual FoxPro程序设计 等位联接:按照字段值对应相等为条件进行的联接操作 自然联接:去掉重复属性的等值联接
§1.3数据库设计基础
§1.3.1数据库设计步骤
一、设计原则
1.关系数据库的设计应遵从概念单一化“一事一地”原则 ....
即将不同的信息分散到不同的表中,一实体对应一表,以使数据的组织和维护工作简单
例:学绩管理系统—学生表、课程表、选修表 2.避免在表之间出现重复字段
除外键外,尽量不出现重复字段而使数据冗余 3.表中的字段必须是原始数据和基本数据元素
不包括通过计算可得到的“二次数据”或多项数据的组合 例:年龄可以通过计算得到
4.用外部关键字保证有关联表之间的联系
用FK维系表之间的关联,以反映实体间客观存在的联系 二、设计步骤
1.需求分析
2.确定需要的表,抽象实体 3.确定所需字段 4.确定表间联系 5.设计求精
分析并测试数据记录,查找错误
§ 1.3.2数据库设计过程
一、需求分析
1.信息需求 2.处理需求
3.安全性和完整性要求
此过程由开发人员与业务人员交流进行 二、确定需求的表 三、确定所需字段
-11-
Visual FoxPro基础
⑪每个字段直接和表的实体相关 ⑫以最小的逻辑单位储存信息 ⑬表中的字段必须是原始数据 ⑭确定主关键字
一个或一组字段可惟一确定表中每个记录 四、确定表之间的联系
⑪一对多联系 ⑫一对一联系 ⑬多对多联系
为避免数据重复存储,需创建第三个表,将多对多关系转化为一对多关系 五、设计求精
§1.4 Visual FoxPro系统概述
一、Visual FoxPro 发展
1.80年代初期:dbaseⅡ/Ⅲ、dbaseⅢplus、dbaseⅣ 2.80年代中期:FoxBASE (1987)、 Fox plus 、 FoxBASE 3.90年代早期:FoxPro 引入了图形化用户界面
多媒体技术,面向对象技术和查询优化技术
4.1995年6月:随着面向对象技术的成熟和可视化编程技术的推广,微
软推出了 Visual FoxPro了3.0版
98年MicroSoft发布了可视化编程语言集成包 Visual Staolio6.0 VFP6.0为其中一员
二、Visual FoxPro 6.0 的特点
1.特点概述
可视化的操作界面,面向对象程序设计方法 2.增强的项目及数据库管理 3.提高应用程序开发的生产率 4.互操作性和支持Internet 5.充分利用已有数据
-12-
——Visual FoxPro程序设计
第二章 Visual FoxPro 系统初步
教学内容与目的:
了解VFP使用环境 、系统安装与启动、用户界面; 初步了解项目管理器、向导、设计器及生成器。
教学重点: Visual FoxPro的用户界面 教学难点: 项目管理器
课时分配: §2.1 :0.5课时 §2.2 : 0.5课时
§2.3 :0.5课时 §2.4 : 0.5课时
§2.1 Visual FoxPro 6.0的安装和启动
一、系统配置:
1.处理器:PC486以上兼容机
2.硬盘:典型安装需85M;最大安装90M
-13-
Visual FoxPro系统初步
3.内存:16MB以上,推荐使用24M内存
4.鼠标、光驱;推荐使用VGA或更高分辨率的监视器 5.操作系统:Win95/98、 NT或更高版本的操作系统 二、安装Visual FoxPro6.0 三、启动 Visual FoxPro6.0
①单击第一个按钮,可建立一个项目文件,并打开项目管理器 ②单击“关闭此屏”按钮,直接打开主界面
③选中“以后不在显示次屏”复选框,以后启动会直接进入主界面 四、退出系统
①单击关闭窗口按钮 ②文件表单“退出”
③单击狐狸图标,关闭或Alt+F4 ④命令窗口键入QUIT命令
§2.2 Visual FoxPro 的用户界面
VF有三种工作方式:
1.利用某单系统或工具栏按扭执行命令; 2.在命令窗口中直接输入命令进行交互或操作;
3.利用各种生成器自动产生程序或编写 FoxPro 程序,然后执行它。
§2.2.1 VF的主界面
一、菜单操作
⑪鼠标操作 ⑫键盘操作 ⑬光标操作
当运行的程序不同,所显示的横向主菜单和下拉菜单的选项也不尽相同 二、命令操作
在命令窗口输入命令,回车执行 显示与隐藏命令窗口:
⑪命令窗口右上角关闭按钮关闭,“窗口”中的“命令窗口”打开 ⑫用常用工具栏上的命令窗口按钮显示或隐藏 ⑬Ctrl+F4关闭命令窗口,Ctrl+F2显示 三、项目管理器窗口
是VF中各种数据和对象的主要组织工具
项目管理器用图形化分类的方法来管理属于同一个项目的文件 项目:是文件、数据、文档和对象的集合
-14-
——Visual FoxPro程序设计 项目文件扩展名为pjx或pjt
“项目管理器”是系统的“控制中心”
§2.2.2工具栏的使用
一、工具栏包括11个
常用工具栏 查询设计器 报表控件 打印预览 报表设计器 调色板 表单控件 视图设计器 表单设计器 数据库设计器 布局
二、显示或隐藏工具栏
⑪“显示”菜单→“工具栏”
⑫鼠标右键单击任何一个工具栏的空白处,选择之 三、定制工具栏
用户可以创建或修改工具栏。
用户可以将常用的工具集中在一起,建立起自己的工具栏。
“显示”→“工具栏”→“新建”→键入工具栏名称→用鼠标选择分类里的按扭拖到新建工具栏上即可。 四、修改现有工具栏
“定制”按钮 “重置”恢复系统默认
§2.2.3 Visual FoxPro的配置
了解:
“工具”→“选项”→共12个选项卡
§ 2.3项目管理器
项目:是指文件、数据、文档和VF对象的集合、包括:表、数据库、表单、..
报表、查询、类、程序等等。 项目管理器:将一个应用程序的所有文件都集合成一个有机的整体形成一.....
个扩展名为PJX的项目文件
-15-
Visual FoxPro系统初步
一、创建项目
1、创建项目
内涵:仅创建一个项目,用来分类管理其他文件
“文件”→“新建”→“项目”单选项→“新建文件”→“创建”对话框→项目文件名→保存。 2.打开和关闭项目
“文件”→“打开”→“项目”。 关闭:项目管理器右上角的“关闭”按扭 空项目:未包含任何文件的项目 3.各类文件选项卡
项目管理器包括:全部、数据、文档、类、代码、其他6个选项卡 ⑪“数据”选项卡
数据库自由表包含:
查询视图表单⑫\"文档\"选项卡报表
标签⑬\"类\"选项卡
*.prg函数库 ⑭\"代码\"选项卡,包括三大类程序
应用程序*.app文件文本文件 ⑮\"其他\"选项卡菜单文件
其他文件 ⑯全部选项卡:以上各类文件的集中显示窗口 二、使用项目管理器
1、 2、 3、 4、
使用项目管理器创建文件 添加文件
将一个已存在的文件添加到项目中 修改文件
移去文件:可以从项目中移去不需要的文件
1、浏览2、关闭/打开3、预览4、运行5、连编5、
其他按扭
-16-
——Visual FoxPro程序设计 三、制定项目管理器
改变项目管理器的外观 1、 2、 3、
移动、缩放和折叠 拆分项目管理口
停放项目管理器
§2.4 Visual FoxPro向导、设计器、生成器简介
一、Visual FoxPro的向导
VF中带有的向导超过20个 1.启动向导
单击“向导”图表按扭 2.使用向导
单击“上一步”、“下一步” 3.修改用向导创建的项
在退出向导前 4.VFP新增的向导 二、VFP的设计器
VFP设计器是创建和修改应用系统各种组件的可视化工具 1.各种设计器
教材P48表2.3 2.打开设计器
三、Visual FoxPro的生成器
生成器是带有选项卡的对话框,用于简化对表单、复杂控件和参照完成性代码的创建和修改过程
1.启动表单生成器
2.对表单中的控件使用相应的生成器 3.使用自动格式生成器来设置控件格式 4.使用参照完整性生成器 5.应用程序生成器
-17-
Visual FoxPro系统初步
第三章 数据与数据运算
教学内容与目的:
掌握Visual FoxPro6.0系统中的
常量、变量、函数、表达式的定义、格式、功能及其运算。
教学重点: 常量、变量、表达式 教学难点: 函数
课时分配: §3.1:2课时 §3.2:2课时 §3.3:4课时
§3.1常量与变量
将各种形式的数据经过数字化存入计算机,都须确定其:
型:类型数据
值:取值在VFP中,常量、变量、函数和表达式的类型包括6种:字符型、数值型、货币型、逻辑型、日期型、日期时间型。
§3.1.1常量
-18-
——Visual FoxPro程序设计 常量:在程序运行过程中保持不变的量
1. 数值型常量(常数)
⑪格式:由数字0~9、小数点和正负号构成,很大或很小的数用科学记数法表示
⑫长度:8个字节
2. 货币型常量
格式:表示货币值,是在数值型常量之前,加前缀$,但不能用科学记数法来表示货币型常量。
例:$-3456 、 $0.1415, 但$3E-5是错误的
货币型常量的小数位不能超过4位,若超过4位,多余的位将被四舍五入。
3. 字符型常量
格式:又称字符串,是由任意字符、数字、汉字组成的字符序列,用定界符“” 、‘’、[ ]成对括起来,如果字符串的内容中包含了某个定界符,则需要用另一种定界符做为该字符串的定界符。
例:‘12.356 ’ 、“姓名”、 [红的]
“abc[dcf]ghj” 、[abc’def’ghj] 注意:“”空串与空格字符串“ ”不同 补:显示值命令
⑪?功能:在下一行显示若干个表达式的值 ⑫??功能:在同一行显示表达式的值
4. 日期型常量
格式:用{}将年、月、日括起,年、月、日之间用分隔符,分隔符可以是/、_、和空格。
日期型常量有两种格式:严格的日期格式和传统的日期格式 ⑪传统的日期格式
{mm/dd/yy},年份可以是2位数字或4位数字,此格式命令会受语句SET DATE TO和SET CENTURY TO设置的影响
⑫严格的日期格式
{^yyyy-mm-dd} 例:{^1999-10-02}
年份必须是4位数字,年月日的次序不能颠倒,不能缺省,用8个字节表示 取值范围是:{^0001-01-01}~{^9999-12-31} ⑬影响日期格式的设置命令 A格式:SET MARK TO [日期分隔符]
功能:设置日期型数据的分隔符,若SET MARK TO 表示恢复默认斜杠分隔
-19-
数据与数据运算 符
B格式:SET DATE TO MDY |DMY|YMD„„ 功能:设置日期显示的格式
C格式:SET CENTURY ON/OFF[世纪值] 功能:设置(或关闭)成用4位数字显示年份 例:SET CENTURY ON ?{10/02/1999}
5、日期时间型常量(占用8个字节) 日期时间型常量可以同时表示日期和时间 格式为:{<日期>,<时间>} 与日期型常量完全相同 时间格式为:[hh[:mm:[ss]][a/p]]
例: {^2002-9-17,9} 表示2002年 9月17日上午9点 6、逻辑型常量
数据: 逻辑真---.t.、.T.、.y.、.Y.
逻辑假----.F.、.f.、.N.、.n. 占用一个字节。
§3.1.2变量
定义:在程序运行过程中变化着的量。 说明:
前表字段变量:表中的字段,字段名为变量名值为当①分类 域,是数据的载体,内存变量:与DB无关,是内存中的一个存储区变量的类型取决于变量 值的类型
②有6种类型:
字符型(C)数值型(N)货币型(Y)逻辑型(L)日期型(D)日期时间型(T)
1.简单内存变量 赋值:
格式1:<内存变量名>=<表达式>
-20-
——Visual FoxPro程序设计 格式2:STORE <表达式> TO <内存变量名表>
说明:⑪当内存变量与字段变量同名时,在内存变量名前加M.(或M->)区分
同名的字段变量。
⑫格式1一次只能给一个变量赋值;
格式2一次可以给多个用逗号分隔的变量赋值。
⑬在使用变量之前不需要定义,当使用赋值命令后,即建立了内存变量
⑭可以通过对内存变量重新赋值来改变其内容和类型。 例: ZF1=‘银川’
STORE 18.4 to A1,A2,A3 L1=.T. S1=$500.
Store {^2004-09-15} to RQ1,RQ2 ?? ZF1,A1,A2,A3,L1,S1,RQ1,RQ2 2.数组
⑪定义:是内存中连续的一片存储区域,数组中的每个变量称为数组元素,每个数组元素的数据类型可以不相同,每个数组元素通过数组名及相应的下标来访问。 ⑫创建命令:
DIMENSION 〈数组名〉(〈下标上限1〉[,〈下标上限2〉])[,„„] DECLEAR <数组名〉(〈下标上限1〉[,〈下标上限2〉]) [,„„] 例: dimension x(8),y(3,4)
8个元素 12个元素
§3.1.3内存变量常用命令
1.内存变量的赋值 2.表达式值的显示 3.内存变量的显示 格式1:
LIST MEMORY [LIKE〈通配符〉][TO PRINTER|TO FILE 〈文件名〉] 格式2:
DISPLAY MEMORY [LIKE〈通配符〉][TO PRINTER| TO FILE〈文件名〉] 功能:显示内存变量的当前信息,包括变量名、作用域、类型、取值。
-21-
数据与数据运算 说明:①选用LIKE只显示与通配符相匹配的内存变量。
②[TO PRINTER]显示的同时送往打印机;
[TO FILE] 存入给定文件名的文本文件.TXT中。
③ LIST滚动显示,DISP分页显示 4.内存变量的清除
格式1:CLEAR MEMORY
格式2:RELEASE<内存变量名表> 格式3:RELEASE ALL [EXTENDED]
格式4:RELEASE ALL [LIKE<通配符>|EXCEPT<通配符>] 5.表中数据与数组数据之间的交换 ①将表的当前记录复制到数组
格式1:SCATTER [F1ELDS<字段名表>] [MEMO] TO <数组名> [BLANK] 功能:复制表的当前记录的指定字段到数组元素,若不指定字段 ,则复制除备注型M和通用型G之外的全部字段。
格式2:SCATTER [F1ELDS LIKE<通配符>|FIELDS EXCEPT<通配符>][MEMO]TO<数组名>[BLANK]
功能:复制用通配符指定包括或排除的字段 ②将数组数据复制到表的当前记录。
格式1:GATHER FROM <数组名>[FIELDS <字段名表>][MEMO]
功能:将数组中的数据作为一个记录复制到表的当前记录中,若数组元素个
数多于记录中字段的个数,则多余部分被忽略。
格式2:GATHER FROM <数组名>[FIELDS LIKE<通配符>|FIELDS EXCEPT<通配符>][MEMO]
功能:复制用通配符指定包括或排除的字段
§3.2表达式
定义:同类型的各种数据(常量、变量、函数)通过同类型运算符按一定规则连接起来的式子。
型:N、C、D、L出表达式的值值:按运算符的运算规则求§3.2.1数值、字符与日期时间表达式
一、数值表达式
定义:由算术运算符将数值型常量、变量、函数连接起来形成,运算结果仍
-22-
——Visual FoxPro程序设计 为数值型。 ⑪算术运算符优先级
A.( ) > B. **或^ > C.*、/、% > D.+、_ ⑫求余运算
%或MOD( ) 求余或取模,余数的正负号与除数一致 ........二、字符表达式
定义:由字符运算符与字符型常量、变量、函数构成,运算结果仍为字符型 +:将两个字符串连接形成一个新字符串
-:连接前后两个字符串,并将前字符串的尾部空格移到合并后的新字符
串尾部
三、日期时间表达式
定义:由日期型运算符与日期型或数值型的常量、变量或函数构成。运算结
果为日期型或数值型。 日期运算符:+、-
对日期表达式的格式有一些,合法的如教材P表3.3 ? {^2005-09-16,10:10:10AM}-{^2004-09-16,09:10:10AM}
§3.2.2关系表达式
定义:也称简单逻辑表达式,由关系运算符与其他表达式组成,其作用是比
较两个表达式的大小或前后,其运算结果是逻辑型。 1.形式:<表达式1><关系运算符><表达式2> 说明:①数值型和货币型数据比较
按数值的大小比较
②日期和日期时间型数据比较
早的日期或时间小,晚的日期或时间大
③逻辑型数据比较 .T. 大于.F.
④子串包含测试
测试前字符串是否为后字符串的子字符串 2.设置字符的排列次序
当字符串比较时,按从左向右顺序比较,对字符序列的排序设置友人机会话和命令两种方式
①在人机会话方式下设置
Machine“工具”→“选项”→数据选项卡→排序序列→ PinYinStroke ②命令方式设置
机器拼音笔画-23-
数据与数据运算 SET COLLATE TO “<排序次序名>” 次序名 说明:
A.Machine: 按ASCⅡ码值排列
空格<“0”<“1”<„„<“9”<“A”<“B”<„„<“Z”<“a”<”b”<„„<”z”<任何汉字
B.PinYin:按照拼音次序排列 空格<小写字母<大写字母
C.Stroke : 无论中文、西文,按照书写笔画的多少排序。 3.字符串精确比较与EXACT设置 SET EXACT ON/ OFF
⑪set exact off 非精确比较
右边的字符串与左边字符串的前面部分内容相匹配,即可得到逻辑真 .T.
⑫set exact on 精确比较
当=时,现在较短字符串尾部加上若干个空格,使两个字符串长度相等,再比较
当==时,须两个字符串完全相同(包括空格及各字符的位置)
MachinePinYinStroke§3.2.3逻辑表达式
定义:由逻辑运算符将逻辑数据连接起来的式子,其运算结果为逻辑值。 1.逻辑运算符: .NOT. 、.AND. 、.OR.(NOT>AND>OR)
2.运算符优先级: 算术运算符>字符运算符和日期时间运算符>关系运算符>逻辑运算符
例:? X<50 .OR. “A”>“B”
? (3*6<>20/4) .AND.(‘A’>‘B’)
? (‘微型计算机’==‘计算机’) OR (‘计算机’$‘计算机世界’) 年龄=20
性别 =“男” 婚否=.F. 学历=“大学”
? 年龄>18 .AND. (.NOT. (性别=“女”))
-24-
——Visual FoxPro程序设计 ? 婚否=.F. .AND. 学历=“大学”.OR. 性别=“女” ? .NOT. 性别=”男” .OR. .NOT. 婚否=.T.
§3.3常用函数
函数特点:自由变量(或称参数)的值,经过某些特定的运算后,得到相应的
函数值
格式:函数名(自变量1,自变量2,„„自变量N) 类型:每个函数的自变量和函数值都有规定的数据类型 掌握:⑪自变量类型 ⑫函数名和功能 ⑬函数值类型
数值函数字符函数分为5类日期和时间函数
数据类型转换函数测试函数§3.3.1数值函数
特点:自变量和返回值都是数值型数据
1. 绝对值和符号函数
格式: ⑪ABS(<数值表达式>)
⑫SIGN(<数值表达式>) 功能:⑪返回绝对值
1正 1 ⑫返回符号负 0 02. 求平方根函数
格式:SQRT(<数值表达式>)
功能:返回指定表达式的平方根,自变量不能为负
3. 圆周率函数
格式:PI( )
功能:返回圆周率 A=PI( )
4. 求整数函数
格式: ①INT (<数值表达式>)
-25-
数据与数据运算 ②CEILING(<数值表达式>) ③FLCIOR(<数值表达式>) 功能: ①返回整数部分
②返回大于或等于指定数值表达式的最小整数 ③返回小于或等于指定数值表达式的最大整数
5. 四舍五入函数
格式:ROUND(<数值表达式1>,<数值表达式2>) 功能:返回在指定位置四舍五入后的结果。 说明:若表达式2为负,则舍入到对应整数位 例: ROUND(123.456.2) →123.46 X=67.5678
? ROUND(X,3), ROUND(X,0) ROUND(X,-1),ROUND(X,-3)
6. 求余数函数
格式:MOD(〈数值表达式1〉,〈数值表达式2 〉) 功能:返回余数,余数的正负号与除数相同。
7. 求最大和最小值函数
格式:⑪MAX(〈数值表达式1〉,〈数值表达式2〉)[,〈数值表达式3〉„„]
⑫MIN(〈表达式1〉,〈表达式2〉[,〈表达式3〉„„]) 功能:⑪返回最大值 ⑫返回其中的最小值
说明:自变量表达式可以是:数值型、字符型、货币型、双精度型、浮点
型、日期型和日期时间型,但所有表达式类型须相同
§3.3.2字符函数
指自变量一般是字符型数据的函数
1. 求字符串长度函数
格式:LEN(〈字符表达式〉)
功能:返回字符表达式的长度,结果为数值型 2.大小写转化函数
格式: ①LOWER(〈字符表达式〉)
②UPPER(〈字符表达式〉)
3.空格字符串生成函数 格式:SPACE(〈数值表达式〉)
-26-
——Visual FoxPro程序设计 功能:生成指定数目的空格字符串 4.删除前后空格函数
格式:①TRIM(〈字符表达式〉)
②LTRIM(〈字符表达式〉) ③ALLTRIM(〈字符表达式〉) 5.取子串函数
格式:①LEFT(〈字符表达式〉,〈长度〉)
②RIGHT(〈字符表达式〉,〈长度〉)
③SUBSTR(〈字符表达式〉,〈其始位置〉,[〈长度〉]) 功能:①从左端取一个指定长度的子串 ②从右边取一个长度的子串 ③从指定起始位置取指定长度的子串 6.计算子串出现次数函数
格式:OCCURS(〈字符表达式1〉,〈字符表达式2〉)
功能:返回第一个字符在第二字符串中出现的次数,函数值为N型 7.求子串位置函数
格式:⑪AT(〈字符表达式1〉,〈字符表达式2〉,[〈字符表达式〉])
⑫ATC(〈字符表达式1〉,〈字符表达式2〉,[〈字符表达式〉]) 功能:若串1是串2的子串,则返回串1首字符在串2中的位置,否则返
回0。
〈数字表达式〉指明串1在串2中第N次出现的位置。 例:AT(“IS”,“THIS IS A BOOK”) AT(‘5’,‘123456’) AT(‘安’,‘西安’) 8.子串替换函数
格式:STUFF(<字符表达式C1>,<起始位置N1>,<长度>N2,<字符表达式2>) 功能:用C2替换C1中起始位置开始的N个字符 注: ①N1大于C1的长度.则将C2连到C1后面;
②N2=0,将C2插到C1中第N1个字符后面;
③C2是空串,则删除C1中由N1指定的N2长度的字符串。 例: C1=“abcdef”
? stuff(C1,2,3,“12345”) ? stuff(c1,2,0,“12345”) ? stuff(c1,2,3,“”) 9.字符替换函数
格式:CHRTRAN(<字符表达式C1>,<字符表达式C2>,<字符表达式C3>) 功能:当C1中的一个或多个字符与C2匹配时就用C3中对应字符替换这些
-27-
数据与数据运算 字符;
若C3串字符少于C2中时,则C1中会被删掉字符; 若C3中字符多与C2中时,多余被忽略。 10、字符串匹配函数
格式:LIKE(<字符表达式C1>,<字符表达式C2>)
功能:C1与C2所有对应位置都匹配,则返回.T., 否则返回.F. 注:C1中可以包含通配符*和?
例:? LIKE(“XY?”,“XYZ”),LIKE(“38*”,“38.29”)
§3.3.3日期和时间函数
1.系统日期和时间函数 格式: DATE( )
TIME( ) DATETIME( )
功能:分别返回当前系统日期、时间、日期时间。 2.求年份、月份和天数函数
格式:YEAR( 格式: HOUR(<日期时间表达式>) MINUTE( 功能:分别取表达式中的时,分,秒部分 §3.3.4数据类型转换函数 1.数值转换成字符串 格式:STR(<数值表达式>[,<长度>[,〈小数位数〉] 功能:按长度和保留的小数位数,将数字转成字符串。 说明: ①若省略小数位,则转为正数,小数四舍五入 ②若同时省略长度和小数位,则小数位为0,长度为10。 ③当长度<实际转换后的长度时,不能转换 。 2.字符串转换成数值 -28- ——Visual FoxPro程序设计 格式:VAL(<字符表达式>) 功能:从第1个字符开始到第1个非数字字符间的字符串转换成对应数值。 注:若以非数字开头,则返回O。 例: ?val(“34.85abc”) ?val(“315计划”) ?val(“ABC123546”) 3.字符串转成日期或日期时间 格式: CTOD(<字符表达式>) CTOT(<字符表达式>) 功能:将字符表达式的值转换成日期或日期时间型. 4.日期或日期时间转换成字符串 格式: DTOC( TTOC( 选1时按约定格式, 例: ? DTOC (date ()), DTOC (date (),1), TTOC (datetime()) ? TTOC (datetime(),1) 5.宏替换函数 格式: &<字符型变量>[.] 功能: 替换出字符型变量的内容,当需要用一个表达式代替许多可变的内 容时,取变量当前值 例: ①城市=“北京” STORE “向&城市.致敬!” TO A ? A ②X1=’10’ X2=’10’ ? &X1*&X2 → 100 ③ABC=“FoxPro” X=“B” Y=“C” Z=“A&”+“X&”+“Y” ?&z →FoxPro ④BJ=“96(2)” XSK=“A:XS”+BJ USE &XSK → A:XS96 (2) -29- 数据与数据运算 §3.3.5测试函数 1.值域测试函数 格式:BETWEEN(<表达式T>,<表达式L>,<表达式H>) 功能:测试一个表达式的值是否介于另外两个表达式之间。 函数值为.T. 、.F. 或 NULL值。 注:三个自变量类型须一致 2.空值测试函数 格式:ISNULL(<表达式>) 功能:判断一个表达式的运算结果是否为NULL值。 3.空值测试函数 格式:EMPTY(<表达式>) 功能:表达式结果为空,则 .T. ;否则.F.。 注:“空”与NULL不同 4.数据类型测试函数 格式:VARTYPE(<表达式>[,<逻辑表达式>]) 功能:返回表达式的类型字母, 5.表文件尾测试函数 格式:EOF([<工作区号>|<表别名>]) 功能:测试记录指针是否向文件尾,若是为.T.; 否则是.F.。 6.表文件首测试函数 格式:BOF([<工作区号>|<表别名>]) 功能:测试记录指针是否指向文件首,若是为.T.; 否则是.F.。 7.记录号测试函数 格式:RECNO([<工作区号>|<表别名>]) 功能:返回当前表文件的当前记录号 8.记录个数测试函数 格式:RECOUNT([<工作区号>|<表别名>]) 功能:返回当前表的记录个数。 9.条件测试函数 格式:IIF(<逻辑表达式L>,<表达式1>,<表达式2>) 功能:测试L值,若为.T.返回表达式1的值;若为.F., 返回<表达式2>的值。 10、记录删除测试函数 格式:DELETED([<表的别名>|<工作区号>]) 功能:测试指定工作区中的表,当前记录是否被逻辑删除,若有*,则返回.T. 否则返回.F. -30- ——Visual FoxPro程序设计 表中概念补充: 1.首记录:表文件的第一个记录叫文件首记录。 2.末记录:表文件的最后一个记录叫文件末记录。 3.记录号:能够表明每个记录在表文件中存放的前后次序的,叫记录序号, 每条记录都有一个记录号,它由系统在内部赋给每条记录。 4.记录指针:在表文件中,用来指示记录位置的指针。每个表文件、排序文 件或索引文件都设置有一个记录指针,由系统内部设置,在对表文件进行数据操作过程中,记录指针是可以移动的。 5.当前记录:记录指针指向的记录被称作当前记录。任何时候,记录指针都 指向一个记录。 6.记录函数: RECNO(),用来记录当前记录序号的函数。 第四章 Visual FoxPro数据库及其操作 教学内容与目的: ⑪掌握数据库,数据库表和自由表的建立,管理以及它们之间的关系; ⑫掌握字段的各种属性和字段有效性规则; ⑬学习索引的概念,建立和使用方法; ⑭了解数据完整性,多工作性的基本内容和方法。 ⑮了解VF。 教学重点: 数据库,表的建立和管理 教学难点: 索引的建立和使用 课时分配: §4.1: 2课时 §4.2:2课时 §4.3: 2课时 §4.4: 2课时 §4.5:2课时 §4.6: 0.5课时 §4.7: 1课时 §4.8 :0.5课时 §4.1 Visual FoxPro数据库及其建立 一、说明:①DB是一个逻辑上的概念和手段,是一个容器,通过一组系统文件统 一组织和管理相互关联的数据库表及其相关的DB对象。 dbc库文件dct备注文件dcx索引文件 -31- Visual FoxPro数据库及其操作 ②建立DB时,产生三个同名文件 二、建立数据库 ①在项目管理器中②新建对话框③命令方式1.在项目管理器中建立数据库 项目管理器→“数据”→“数据库”→“新建”→“新建数据库”→库名.dbc 2.通过“新建”对话框建立数据库 “文件”→“新建”→文件类型→数据库 3.使用命令交互建立数据库 格式:CREATE DATABASE [Database Name|?] 说明: ①1、2方法会自动打开库设计器,3打不开。 ②若库名已存在,则会覆盖。 命令: SET SAFETY ON/OFF 设置警告。 三、使用数据库 据库在项目管理器中打开数据库通过打开对话框打开数使用命令打开数据库命令格式: OPEN DATABASE [Filename|?] [EXCLUSIVE|SHARED] [NOUPDATE] [VALIDATE] 说明:①filename是数据库名,若使用?则显示打开对话框。 ②EXCLUSTVE|SHARED:以独占或共享方式打开数据库。 ③NOUPDATE:以只读方式打开指定DB。 ④VALIDATE:检查在数据库中引用的对象是否合法。 注意:①NOUPDATE实际不起作用。 ②当DB打开后,库中的表还需要用USE打开。 ③当USE打开一个表时,首先在当前库中找,找不到时会继续在库外找并打开表。 ④指定当前库命令: SET DATABASE TO [DataBaseName] SET data to 含义:所有打开DB都不是当前DB 四、修改数据库 -32- ——Visual FoxPro程序设计 用户可以在DB设计中完成对DB的建立,修改和删除 DB设计器从项目管理器中打开 方法 从\"打开\"对话框中打开DB设计器使用命令格式:MODIFY DATABASE [DatabaseName |?] [Nowait] [Noedit] 说明:①[Nawait]在程序中继续执行此命令后的语句; 若无,则DB设计器关闭后程序才继续执行。 ②[Naedit]只是打开DB设计器,但禁止对DB修改。 五、删除数据库 移去:从项目管理器中删除删除相应的DB通常在项目管理器中 删除:从项目管理器和磁盘上取消 命令删除格式: DELETE DATABASE DATABASENAME|?[DELETTABLES][RECYCLE] 说明:①[DELETETABLES]删除DB时删除库所包含的表。 ②[RECYCLE]将删除的DB和表放入回收站。 ③在SET SAFETY ON 时会提示,否则直接删。 §4.2建立数据库表 一、在数据库中建立表 ㈠操作方式 1.字段名:以字母或汉字开头,由字母、汉字、数字和下划线组成,不能包含空格。 2.字段类型和宽度 字符型、货币型、数值型、浮点型、日期型、日期时间型、双精度型、整数型、逻辑型、备注型、通用型。 3.空值:是否允许为NULL 4.字段有效性规则:字段值的约束 5.显示组框 可以定义字段显示的格式,输入的掩码或字段标题 ①格式:是输出掩码,字段的显示风格 ②输入掩码:用以或控制用户输入的格式 例:X、A、9、#、!等 ③标题:字段的描述 -33- Visual FoxPro数据库及其操作 6.字段注释: 为字段添加注释 ㈡命令方法: 用OPEN DATABSE 打开 DB 用CREATE建立表 格式:CREATE <表名> 说明:①可以不打开库,直接建自由表 ②新建表处于打开状态 ③打开/关闭表命令 USE TABLENAME 打开 USE 关闭 二、修改表结构 ㈠操作方式 →DB设计器中右单击表→“修改”→表设计器 ㈡命令方式: MODIFY STRUCTURE 练习:教材P113学生管理系统和P103、P116订货管理系统。 §4.3表的基本操作 §4.3.1使用浏览器操作表 一、使用BROWSE浏览器: ①项目管理器→选择表→单击“浏览”按钮 ②数据库设计器→选择表→ 数据库菜单→浏览 右单击→快捷“浏览” ③命令方式: use 表名 browse↙ 二、浏览操作 ↑、↓、←、→、 PageDown、PageUp、Tab、Shift+Tab. 添加记录 :①Ctrl+Y ②“表”菜单→“追加新记录” 之后在表末会添加一条空白记录,输入新记录值即可。 三、修改记录 直接光标定位修改 四、删除记录 逻辑删除:只在记录旁做删除标记,必要时可以恢复记录 -34- ——Visual FoxPro程序设计 物理删除:将有删除标记的记录真正删除 逻辑方法:①命令:Ctrl+T ②表菜单→切换删除标记 物理方法:“表”菜单→“彻底删除: §4.3.2增加记录的命令 1.APPEND命令 格式:APPEND [BLANK] 功能:①在表的尾部追加记录,可以连续输入多条。 ②在表尾增加一条空白记录。 2.INSERT命令 格式:INSERT [BEFORE] [BLANK] 功能:在表的任意位置插入新的记录,不指定[Before]插当前记录后,否 则插当前记录前。 注意:若表上建立了主索引或候选索引则不能用APPEND或INSERT命令插 入记录。 §4.3.3删除记录的命令 1.置删除标记命令 格式:DELETE [FOR条件] 功能:逻辑删除符合条件的所有记录,若无条件则只逻辑删除当前一条记录。 2.恢复记录命令 格式:RECALL [FOR条件] 功能:恢复符合条件的记录,无条件则只恢复当前一条记录。 3.物理删除有删除标记的记录 格式:PACK 4.物理删除表中的全部记录 格式:ZAP §4.3.4修改记录的命令 1.用EDIT或CHANGE命令交互或修改 2.用REPLACE命令直接修改 -35- Visual FoxPro数据库及其操作 格式:REPLACE字段名1 WITH 表达式1[,字段名2 WITH 表达式2]„„ [FOR条件] 功能:可以成批快速修改满足条件的一批记录的几个字段。用With后面的 表达式的值替换在With前面的字段的内容。 说明:不使用FOR短语则只修改当前记录。 使用FOR短语,则只修改满足条件的所以记录 例:①将“工程师”的工资加100。 .use zgk .repl 工资 with 工资+100 for 职称=“工程师” ②将75年前工作的人的职称改为工程师,工资加80。 .repl 职称 with “工程师”,工资 with 工资+80 for 工作日期<{^1975-01-01} §4.3.5显示记录的命令 格式:LIST/DISPLAY [FIELDS 字段名表][FOR条件][OFF] [TO PRINTER [PROMPT]|TO FILE<文件名>] 功能:显示符合条件的记录的字段值 说明:①list默认显示全部记录,而Display则默认显示当前记录。 ②[fields字段名表]指定显示的字段,否则默认显示全部字段。 ③有[OFF]不显示记录号,否则显示。 ④[To PRINTER]说明将结果输出到打印机。[Prompt]则在打印之前出现一个打印设置对话框,可对打印机进行设置。 ⑤[TO FILE]将结果输出到文件*.TXT。 例: ① 显示姓名、年龄、工资 list 姓名,年龄,工资 ② 显示年龄在30岁以上的工人的工资 list姓名,工资 for 职称=“工人” and 年龄>30 ③ 显示职称是工程师的女同志 list 姓名 for 职称=“工程师” and 性别=“女” §4.3.6查询定位命令 1.绝对定位命令 格式:GO nRecord Number|TOP|BOTTOM -36- ——Visual FoxPro程序设计 功能:将当前记录定位于第N条记录 2.相对定位命令SKIP 格式:SKIP [nRecords] 功能:将记录指针以当前记录为基础,上移或下移若干条记录。 >0,下移 <0,上移 =0,不动 无参,下移一条记录 3.用LOCATE命令定位 格式:LOCATE FOR 条件 „„ CONTINUE 功能:将记录指针定位在满足条件的第一条记录上,用Continue命令则继 续查找下一条满足条件的记录。 找到: Found( )=.T. 没查到: Found()=.F., Eof()=.T. §4.4索引 索引:使记录按某种顺序排列,但不需要改变记录的物理位置。 索引文件:(是一棵以索引块为结点的“带稠密索引的B树”)保存表文件 中每个记录的某个关键字段的值以及相应记录在表文件中的位置的文件。 说明:索引如同书的目录,索引可以使用户快速找到表中的数据。可按照 关键字建立与表文件相关的索引文件,当表文件和索引文件一起使用时,记录将按照索引文件指定的顺序出现,且当表文件的数据改变时,这种顺序还可以自动调整。 关键字值:每个记录对应关键字(单、组合)表达式都有一个确切的值, 称为该记录的关键字值。 §4.4.1索引的种类 1.主索引(Primary index) 定义:在指定字段或表达式中不允许出现重复值的索引. 说明:①只有数据库表可以创建主索引,一个表只能创建一个主索引,通 常用表的主关键字作为主索引关键字 ②主索引可以确保字段中输入值的唯一性,并决定了处理记录的顺 -37- Visual FoxPro数据库及其操作 序。 ③如果某个表已经有了一个主索引,还可以为它添加候选索引。 2.候选索引(candidate index) 定义:同主索引一样要求关键字段或表达式不能有重复值。用候选关键字 建立候选索引。 说明:数据库表和自由表都可以建立候选索引,并且一个表可以建立多个 候选索引。 3.唯一索引(unique index) 定义:为了与Foxbase兼容而保留的一种索引。 说明:①“唯一性”是指索引项的唯一,而不是字段值的唯一。 ②一个表种可以建立多个唯一索引,并且不要求索引字段值唯一, 它以字段的首次出现值为基础,选定一组记录,并对记录进行排序。 4.普通索引(regular index) 定义:也可以决定记录的处理顺序,可用来对记录排序和搜索记录,它不 仅允许字段出现重复值,且允许索引项中也出现重复值,在一个表中,可以建立多个普通索引。 §4.4.2在表设计器中建立索引 1.单项索引 ⑪定义字段时: 无 升序 →选定则建立普通索引。索引名与字段名相同 降序 主索引 ⑫“索引”选项卡,“类型”—选择 候选索引 唯一索引 普通索引 2.复合字段索引 “索引”选项卡——“插入”按钮——输入索引名 ——选择索引类型——打开表达式生成器——输入索引表达式——“确定” 说明:①在一个表上可以建立多个普通索引、候选索引和唯一索引,但只 能建立一个主索引。 ②主索引用于主关键字字段;候选索引用于那些不作为主关键字但字段值又必须唯一的字段;普通索引用于一般地提高查询速度;唯一索引用于一些特殊的程序设计。 -38- ——Visual FoxPro程序设计 §4.4.3用命令建立索引 一、索引命令: INDEX ON eExperession TO IDXFile Name|TAG TagName[oF CDXFile Name] [For LExpression] [compact] [ASCEDING |DESCENDING] [UNIQUE |CANDIDATE] [ADDITIVE] 参数含义: ① eExpression 索引表达式,字段名或包含字段名的表达式 ② To IDXFileName: 建立一个单独的索引文件,扩展名为.idx。 ③ TagName 索引名 结构复合索引:多个索引创建在一个索引文件中,其文件名与表名同名,扩展名为.cdx。 用of短语,则可用CDXFile Name指定包含多个索引的复合索引文件名,扩展名也是.cdx。 ④ FOR LEXPression 给出索引过滤条件,一般不用。 ⑤ Compact当使用TO索引文件时说明建立一个压缩的.idx 文件。 ⑥ [A|D]建立升序或降序索引,默认升序。 ⑦ UNIQUE说明建立唯一索引。 ⑧ CANDIDATE说明建立候选索引。 ⑨ ADDITIVE 说明建立索引时是否关闭以前的索引。 ⑩ 命令可建立普通索引、唯一索引或候选索引。 二、索引文件的种类 1、 2、 3、 索引文件(*.idx):是一种非结构单索引。 采用非默认名的.cdx索引,是非结构复合索引。 结构复合索引:与表名同名的.cdx索引,可包含多个索引项,是 ...... VFP中最重要的一种索引文件. 其特性: ①在打开表时自动打开 ②在同一索引文件中能包含多个索引关键字 ③在添加、更改或删除记录时自动维护索引 §4.4.4使用索引 -39- Visual FoxPro数据库及其操作 1、 打开索引文件 命令:SET INDEX TO IndexFilelist 功能:主要用于索引文件的打开,IndexFilelist 是用逗号分开的索 引文件表,可以包含idx 和cdx索引。 2、设置当前索引 命令:SET ORDER TO [nIndexnamber|[TAG]TagName] [ASCEBDING/DESCENDING] 功能:按索引号或索引名指定索引定位 3、使用索引快速定位(索引查找) 命令:SEEK eExpression [ORDER nIndexNumber|[TAG]TagName] [Asceding|desceding] 功能:可以用索引号或索引名指定按那个索引定位 4、 删除索引 DELETE TAG ALL →删除全部索引 命令:DELETE TAG TagName→要删除的索引名 §4.5数据完整性 一、实体完整性与主关键字 1.定义:保证表中记录唯一的特性,即在一个表中不允许有重复的记录。 2.实体完整性是由主关键字或候选关键字来保证的。 3.VF中将主关键字称为主索引,候选关键字称作候选索引。 二、域完整性与约束规则 域完整性:通过定义字段数据类型、字段宽度和字段的有效规则等实现数 据的域完全性。 约束规则:字段有效性规则 在表设计器的字段选项卡中: 规则:字段有效性规则 信息:违背有效性规则时的提示信息 默认值: 三、参照完整性与表之间的关联 定义:建立在父表与子表之间的联系的基础上,参照完整性包括更新规则、 删除规则和插入规则。 即:当插入、删除或修改一个表中的数据时,通过参照引用相互关联的 另一个表中的数据,来检查对表的数据操作是否正确。 -40- ——Visual FoxPro程序设计 1.建立表之间的联系 在DB设计器中,首先在父表中建立主索引,在子表中建立普通索引,然后通过父表的主索引和子表的普通索引建立两表之间的联系。 2.设置参照完整性约束 “编辑参照完整性” ①更新规则 级联:用新的字段值自动修改子表中的相关记录 :禁止修改父表连接字段 忽略:不作参照完整性检查 ②删除规则 级联: : 同上 忽略: ③插入规则 :若父表没有相匹配的连接字段则禁止插入子记录 忽略 §4.6自由表 自由表:不属于数据库中的表。 §4.6.1数据库表与自由表 说明:创建表时,如果当前没有打开数据库,则创建的是自由表。 1、 自由表的创建: ① 项目管理器—“数据”—“自由表”—“新建” ② 文件——新建 ③ CREATE命令 2、 数据库表的特点: ① DB表可以使用长文件名和长字段名。 ② DB表中的字段可指定标题和添加掩码。 ③ DB表的字段可指定默认值和输入注释。 ④ 有默认的控件类。 ⑤ DB表可规定字段规则和记录级规则。 ⑥ DB表支持主关键字、参照完整性和表之间的联系。 ⑦ 支持Iusert、Update和delete事件的触发器。 -41- Visual FoxPro数据库及其操作 §4.6.2将自由表添加到数据库 一、交互式操作 1.项目管理器——选DB——选表——添加——打开 2.数据库设计器 数据库“菜单”——“添加表”——打开 二、命令 格式:ADD TABLE TableName|?[NAME LongTableName] 说明: 参数[Name Long TableName]可为表指定一个长名,最多可有128个字符,使用长名可提高程序的可读性。 注意:一个表只能属于一个DB,当一个自由表添加到某个DB后就不再是 自由表了。 §4.6.3从数据库中移出表 一、交互式操作 1.项目管理器——选库——选表——移去按钮 2.DB设计器 选表——“数据库”菜单——“移去” 注意: ①移出的表成为自由表 ②一旦表移出DB,则与之联系的所有主索引、默认值及有关的规则都随之消失。 ③表一旦移出DB,长表名将不再用。 二、命令 格式:REMOVE TABLE Tablename|?[DELETE][RECYCLE] 说明: ①[DELETE]移出后还将其从磁盘上删除 ②[RECYCLE]把表从DB移出后放入回收站 §4.7多个表的同时使用 §4.7.1多个工作区的概念 -42- ——Visual FoxPro程序设计 一、命令: SELECT nWorkarea|cTablealias 说明:①工作区号为1~32767,若为0则选择尚未用的最小工作区。 ②如果在某个工作区已打开了表,若要回到该工作区,可用Ctablealias ,即已打开表的表名或别名。 二、也可用命令 USE TableName IN n WorkArea USE TableName IN n WorkArea ALIAS 别名(TableAlias) 说明: 每个表打开后都有两个默认的别名,一个是表名自身,另一个是工 作区对应的别名。前10个工作区中别名是A~J,11到32767别名是W11~W32767。 §4.7.2使用不同工作区的表 允许在几个工作区中使用另外一个工作区的表。 ① 使用IN n Woukarea|CtableAlias指定表名或别名 例:当前工作区是1区,执行下列命令: Close all Use student in l Use course in 2 order 课程名 之后,当前工作区是________ (A)1区 (B)2区 (C)3区 (D)4区 ② 在一个工作区上还可以直接利用表名或别名引用另一个表中的数据。 别名.字段名或别名->字段名 例:当前是2区的课程表,现要显示1区中学生表的学号和姓名 ?学生.学号,学生->姓名 §4.7.3表之间的关联 永久联系:存储在DB中的表之间的联系,由此实现数据参照完全性。 临时联系:由SET RELATION命令建立的,由此实现当父表记录指针移动时, 子表记录指针按一定的规则跟随移动。 一、建立关联 SET RELATION TO eExpression|INTO nWorkAreal|CtableAlas 说明: -43- Visual FoxPro数据库及其操作 ①eExpression指定建立临时联系的索引关键字,一般应是父表的主 索引,子表的普通索引。 ②相关联的子表要在关联的关键子段上建立普通索引。 二、关联取消 命令: ①SET RELATION TO 取消当前表到所有表的临时联系 ②SET RELATI ON OFF INTO nWorkArea|ctableAlias 只是取消某个具体的临时联系 §4.8排序 排序:按照表中某个指定字段的值,将所有记录重新排列。是物理排序。 格式: SORT To TableName ON FieldName1[/A|/d][/c][,FieldName2[/A|/D][/C]„] [ASCENDING|descending][FOR Lexpiession1] [Fields FiledNameList] 说明: ①排序后生成新表Tablename,Fieldname1、Fieldname2„为排序的字 段,可以在多个字段上进行排序。 ②/A升序;/D降序;/C排序时不区分大小写字母。 ③ascending或descending指出除用/A、/D指明了排序方式或字段外,所有其他排序字段按升序或降序。 ④FOR给出参加排序的记录满足条件。 ⑤[Fields fieldsnemelist]给出排序后表所包含的字段列表。 例:SORT TO CJ ON 成绩/D,学号/A fields 学号,课号,成绩 -44- ——Visual FoxPro程序设计 第五章 关系数据库标准语言SQL 教学内容与目的: ⑪掌握SQL的基本概念; ⑫掌握SQL的查询功能; ⑬熟悉SQL的操作功能,包括插入、更新和删除功能; ⑭熟悉SQL的定义功能。 教学重点: SQL的查询功能 教学难点: 嵌套查询、自联查询、内外层互相关嵌套查询 课时分配: §5.1、§5.2:10课时 §5.3:2课时 §5.4: 4课时 §5.1 SQL概述 SQL——Stuctured Quevy Langage 结构化查询语言 查询是SQL的重要组成部分,SQL还包括数据定义、数据操纵和数据控制功能等部分,SQL已经成为关系数据库的标准数据语言,该语言具有如下特点: 1.SQL是一种一体化的语言,它包括了数据定义、数据查询、数据操纵和数据控制等方面的功能,它可以完成数据库活动的全部工作, 2.SQL是一种高度非过程化的语言,用户只需要描述“做什么”,SQL语言就可以将要求交给系统,系统自动完成全部工作。 -45- 关系数据库标准语言SQL 3.SQL语言非常简洁,很接近自然语言(英语),因此易学,易掌握。 4.SQL语言可以直接以命令方式交互使用,也可以嵌入到程序设计语言中以程序方式使用。 §5.2查询功能 SQL的核心是查询,查询命令是SELECT。常用语法格式如下: SELECT„„ FROM„„ [WHERE„„] [GROUP BY„„] [HAVING„„] [UNION[ALL]„„] [ORDER BY„„] 说明: ① SELECT说明要查询的数据。 ② FROM说明要查询的数据来自那个或那些表可以对单个表或多个表进行查询。 ③ WHERE说明查询条件即选择元组的条件。 ④ GROUP BY 短语用于对查询结果进行分组,可以利用它进行分组汇总。 ⑤ HAVING必须跟随GROUP BY使用,用来限定分组必须满足的条件。 ⑥ ORDER BY用来对查询的结果进行排序。 介绍十种SELECT查询应用 一、简单查询 1.无条件查询: 由SELECT和FROM短语构成 2.条件查询: 由SELECT、FROM和WHERE短语构成 3.[DISTINCT]短语,去掉结果中的重复值 例1:从职工关系检索仓库WH2的所有工资值 SELECT工资FROM职工WHERE仓库号=“WH2” 例2:检索仓库中的所有元组 SELECT * FROM 仓库 等同于 select仓库号,城市,面积 from 仓库 练习 -46- ——Visual FoxPro程序设计 ① 从仓库表中查询所在城市。 ② 查询2001年元月1日(前)后的所有定单 ③ 查询在仓库WH3工作,并且工资高于1230的所有职工 解:①select 城市 from仓库 ②select订购单号from订购单 where 订购日期>{^2001/01/01} ③select职工号 from 职工 where仓库号=“WH3” and 工资>1230 二、简单的联接查询 联接是关系的基本操作之一,联接查询是基于多个关系的查询。 例:找出工作在面积大于400的仓库的职工号以及这些职工工作所在的城市 select 职工号,城市 from仓库,职工; where(面积>400) and (职工.仓库号=仓库.仓库号) 说明: ①在VF的SQL命令中分号是续行符号。 ②当from后的多个关系中有同名字段时,须用前缀指明字段所属的 表。 ③多表连接查询时要指明查询联接条件。 ................ 练习: 查询2001年5月25日订购商品的订单的供应商和地址 解: Select 供应商名,地址 from订购单,供应商; Where (订购日期={^2001/05/25}) and (订购单.供应商号=供应商.供 应商号) 三、嵌套查询(有两个以上查询条件,且在不同关系中) 当查询所要求的结果出自一个关系,但相关的条件却涉及多个关系,则使用嵌套查询。 即当检索关系X中的元组时,它的条件依赖于相关的关系Y中的元组属性值,此时用嵌套查询比较方便。 外层查询的条件依赖于内层查询的结果。 ................. 注:记录字段值区分大小写 ............ 例1:哪些城市至少有一个仓库的职工工资为1250元? Select城市from 仓库 WHERE仓库号 IN; (SELECT 仓库号 FROM 职工 WHERE工资=1250) 例2:找出和职工E4挣同样工资的所有职工 select 职工号 from 职工 where工资=; (select 工资 from职工 where职工号=“E4”) 例3:查询所有职工的工资都多于1230元的仓库的信息 -47- 关系数据库标准语言SQL 分析:①查询范围来源于职工表,而结果在仓库表,故用嵌套查询。 ②若条件设为工资>1210,则比如WHI中工资有满足条件的,也没不满 足条件的 ,故无法适应此情况 应该设为:仓库号not in„„工资<=1210 ③如果某仓库还没有职工,则也满足②的条件not in职工,故应添加条件,保证该仓库至少有一名职工。 解: select * from 仓库 where仓库号not in ; (select 仓库号from 职工 where工资<=1210) and 仓库号 in (select 仓库号from 职工) 练习: 找出和职工E3有相同供应商的订购单及其订购日期. 解:select 订购单号,订购日期 from 订购单 where 供应商号 in ; (select 供应商号 from 订购单 where 职工号=“E3”) 四.几个特殊运算符 1.BETWEEN„„AND„„ 在„„和„„之间 例:检索出工资在1220元到1240范围内的职工信息。 Select * from职工 where 工资 between1220and1240 说明:①此条件等价于(工资>=1220)and(工资<=1240),但更简洁。 ②“不在„„之间”可用not between„„and„„ select * from 职工 where工资 not between 1220 and 1240 2.LIKE%——表示0个或多个字符 LIKE_——表示一个字符 例:检索出供应商是某公司的信息。 select * from 供应商 where 供应商名Like“% 公司” 3.不等于“!=”可用否定运算符NOT表示。 例:找出不在北京的供应商信息。 Select * from 供应商 where not(地址=“北京”) 学生练习: 1.找出定单号在OR70到OR80间的供应商。 2.检索出供应商是某厂的信息。 3.找出不在北京和上海的仓库。 解: 1.Select 供应商号 from 订购单 ; where 订购单号 between “OR70” and “or80” 2.Seleet * from 供应商 where 供应商名 Like “%厂” 3.Select 仓库号 from 仓库 where not(城市=“北京” or 城市=“上 -48- ——Visual FoxPro程序设计 海”) 五、排序 使用排序短语ORDER BY 可以查询结果排序。 格式:ORDER BY 字段名1[ASC|DESC][,字段名2[ASC|DESC]„] 说明:①可以指定排序方式为升序或降序 ②允许按一列或多列排序 例:先按仓库号升序排序,再按工资降序排序检索出全部职工信息。 Selet * from 职工order by 仓库号 ASC,工资 desc 练习:按订购日期升序列出定单和供应商。 解: selct定购单号,供应商号from买力订购单order by 订购日期 asc 六、简单的计算查询 SQL语句可以直接对检索结果进行计算,有5个计算函数: ① COUNT——计数 ② SUM——求和 ③ AVG——计算平均值 ④ MAX——就最大值 ⑤ MIN——求最小值 例:求WH2仓库的职工人数、工资总数、平均工资、最高工资和最低工资。 Select count(*) as 人数,avg(工资) as 平均工资,; Sum(工资) as 工资合计,max(工资)as 最高工资,; min(工资) as 最低工资 from 职工 Where 仓库号=“WH2” 练习: 1.找出仓库所在城市数目。 2.找出最早的订购日期。 3.求仓库的平均面积。 4.求北京和上海的仓库职工的工资总和。 解: 1.select count(distinct城市) from 订购单 2.select min(订购日期) from 订购单 3.select avg(面积) from 仓库 4.select sum(工资) from 职工 where 仓库号 IN; (select仓库号from 仓库 where 城市=“北京” or 城市=“上海”) 七、分组与计算查询 短语: GROUP BY 组名[,组名„„][HAVING条件] -49- 关系数据库标准语言SQL 功能:先按属性分组,再进行查询,还可根据多个属性分组。当需要分组 满足某条件时才检索,可用Having子句来限定分组。 例1:求每个仓库的职工的平均工资。 select 仓库号,AVG(工资) from 职工 group by 仓库号 例2:求至少有两个职工的每个仓库的平均工资。 select仓库号,count(*)from 职工 ; group by 仓库号 having count(*)>=2 练习: 1.统计每个职工的定单数 Select 职工号,count(订购单号) from 订购单 Group by 职工号 八、利用空值查询 IS NULL IS NOT NULL 例1:找出尚未确定供应商的定单信息。 Select * from 订购单 where 供应商号IS NULL 注:空值查询不能用“=NULL”, 因为空值不是一个确定的值,不能用“=” 运算符比较 例题:已确定了供应商。 Select * from 订购单 where 供应商号IS NOT NULL 练习:列出已确定了供应商的定单的供应商名。 Select 供应商名 from 供应商 where 供应商号IN; (select 供应商号 from 订购单 where 供应商号 is not null) 九、别名与自连接查询 1.别名定义:为了简化关系名. 格式;<关系名><别名> 例:从定货管理的四张表中找出仓库和供应商都在北京的供应商. Select 供应商名 from 供应商S,订购单P,职工E,仓库W; where地址=“北京” and 城市=“北京”; and s.供应商号=p.供应商号; and p.职工号=E.职工号; and e.仓库号=w.仓库号 2.自联接查询 自联接:将同一关系与其自身进行联接称自联接。 在此关系上,存在着一种递归联系,既关系中的一些元组,据出自同一值域的两个不同属性,可以与另外一些元组有一种对应关系(一对多的联系)。 例:雇员(雇员号,雇员姓名,经理) 雇员号和经理两个属性同一值域,且同一元组的这两个属性值是“上、 -50- ——Visual FoxPro程序设计 下级”关系 根据雇员关系例出上一级经理及所领导的职员清单。 Select S.雇员姓名,“领导”,E.雇员姓名 from 雇员S,雇员E; where S.雇员号=E.经理 练习: 职工(仓库号,职工号,姓名,工资,经理) 说明:职工号和经理两个属性出自同一个值域,同一元组的这两个属性值 是“上、下”级关系 根据新的职工关系列出上一级经理及其职员(被其领导)的清单。 解: select S.姓名,“领导”,E.姓名 from 职工S,职工E; where S.职工号=E.经理 十、内外层互相关联嵌套查询 内外层互相关的查询:指内层查询需要外层查询提供值,而外层查询的条件的需要内层查询的结果。 例:例出每个职工经手的具有最高总金额的订购单信息。 Select out.职工号,out.供应商号,out.订购单号,out.总金额; from 订购单 out where总金额=; (select max(总金额) from 订购单innerl; where out.职工号=innerl.职工号) 十一、使用量词和谓词的查询 在嵌套查询中还可以有如下两种形式: 1、<表达式><比较运算符>[ANY|SOME](子查询) 2、[NOT] EXISTS(子查询) 说明:①any、all、some是量词,其中any和some是同义词,比较时只要 子查询中有一行能使结果为真,则结果就为真;而all要求子查询中的所有行都使结果为真时,结果才为真。 ②exists或not exists用来检查在子查询中是否有结果返回,即存在元组或不存在元组。 例1:检索那些仓库中还没有职工的仓库的信息。 Select * from 仓库 where not exists; (Select * from 职工 where 仓库号=仓库.仓库号) 例2:检索有职工的工资大于且等于“WH1”仓库中任何一名职工的工资的仓 库号。 Select distinct仓库号 from 职工 where工资>=any; (select 工资 from 职工 where 仓库号=“WH1”) 例3:检索有职工的工资大于或等于“WH1”仓库中所有职工的工资的仓库号。 -51- 关系数据库标准语言SQL Select distinct 仓库号 from 职工 where 工资>=all; (select 工资 from 职工 where 仓库号=“WH1”) 十二、超联接查询 超联接:首先保证一个表中满足条件的元组都在结果表中;然后将满足联 接条件的元组与另一个表的元组进行联接,不满足联接条件的则将应来自另一表的属置为空值。 格式: SELECT„„ FROM Table INNER|KEFT|RIGHT|FULL Join Table ON Join Condition WHERE„„ 说明:①INER JOIN普通联接,称内部联接 ②LEFT JOIN 为左联接 ③RIGHT JOIN为右联接 ④FULL JOIN 以称为全联接,即两个表中的条件不管是否满足联接条件将都在目标表或查询结果中出现,不满足联接条件的记录对应部分为NULL. ⑤ON Join Condicion联接条件 例1:内部联接___只有满足联接条件的记录才出现在查询结果中。 ....SELECT 仓库.仓库号,城市,面积,职工号,工资; From 仓库 inner join 职工on仓库.仓库号=职工.仓库号 例2:左联接___即除满足是联接条件的记录出现在查询结果中外,第一个... 表中不满足联接条件的记录也出现在查询结果中。 SELECT 仓库.仓库号,城市,面积,职工号,工资; From 仓库 left join 职工on仓库.仓库号=职工.仓库号 例3:右联接___即除满足联接条件的记录出现在查询结果中外,第二个表... 中不满足联接条件的记录也出现在查询结果中。 SELECT 仓库.仓库号,城市,面积,职工号,工资; From 仓库 right join 职工on仓库.仓库号=职工.仓库号 例4:全联接___除满足条件的记录出现,两表中不满足联系条件的记录也... 出现在查询结果中。 SELECT 仓库.仓库号,城市,面积,职工号,工资; From 仓库 full join 职工on仓库.仓库号=职工.仓库号 十三、集合的合并运算 SQL可以将两个select语句的查询结果通过合并运算union合并成一个查询结果,要求:两查询结果具有相同的字段个数,且对应字段的值要有相同的值域。 -52- ——Visual FoxPro程序设计 例1:查询北京和上海的仓库信息 select * from 仓库 where 城市=“北京” union; select * from 仓库 where城市=“上海” 十四.VF中SQL SELECT的几个特殊选项 1.显示部分结果 说明:有时只需显示满足条件的前几个记录,用短语:TOP nExpr[PERCENT]需与ORDRE BY短语同时用 ① nExpr是1~32767. ② Percent是0.01~99.99显示结果中前百分之几的记录. 例1:显示工资最高的三位职工的信息。 Select * TOP 3 from 职工 order by 工资 desc 例2:显示工资最低的那30%职工的信息 select * top 30 percert from 职工 order by 工资 2.将查询结果存放到数组中. 用INTO ARRAY ArrayName 短语将查询结果存放到数组中。一般用二维数组,每行一条记录,每列对应查询结果的一列。 例:将查询到的职工信息存放在数组tmp中. Select * from 职工 into array tmp 3.结果存放在临时文件中 用into curser Cursername将结果存放到临时数据库文件中,临时文件是一个只读的dbf文件,当关闭文件时该文件将自动删除。 例:按查询到的职工信息存放在TOP中 select * from 职工INTO CURSOR tmp 4.将查询结果存放到永久表中. 短语:INTO DBF|TABLE TableName 可将结果存放到永久表中.(dbf文件) select * Top 3 from 职工 into table highsal order by工资desc 5.将查询结果存放到文本文件中. 短语;TO FILE filename[ADDITIVE] 例:select * top 3 from 职工 to file time order by 工资 dese 6、将查询结果输出打印机 短语:TO [PRINT]可将结果输出到打印机,若用[prompt]选项则在开始打 印之前会打开打印机设置对话框。 §5.3 操作功能 -53- 关系数据库标准语言SQL §5.3.1 插入 第一种标准格式: INSERT INTO dbf_name[(fnamel[,fname2,„])] values (eExpressionl[,eExpression, „]) 第二种特殊格式 INSERT INTO dbf_name from ARRAY ArrayName| FROM MEMVAR 说明: 1. 向dbf_name指定的表中插入记录,当插入的不是完整记录时,用 fnamel,fname2, „指定字段;用values短语给出具体的记录值。 2. From array arrayname说明从指定的数组中插入记录值。 3. Form MEMVAR 说明根据同名的内存变量插入记录,若不存在同名的变量,则相应的字段为默认值或定值。 例: 向职工表中插入元组(“WH4” “E5”,1245) Insent into 职工 Values(“Wh4”, “E5”,1245) 注意: 当一个表定义了主索引或候选索引后,由于其相应字段具有关键字特性,不能为空,所以不能用insert或append插入,只能用此SQL语句插入记录。 §5.3.2 更新 格式:UPDATE TableName SET Columm_namel=eExpressionl[,Columm_Name2=eExpression2„] Where condttion 例:给所有学生年龄增加1岁 Update 学生 set 年龄=年龄+1 §5.3.3 删除 格式:DELETE FROM TableName [WHERE Condition] 说明:where指定被删除的记录满足的条件,不指定则删除表中的全部记录。 例: 删除供应商号为空值的定单。 Delete from 订购单 where供应商号IS NULL §5.4定义功能 §5.4.1 表的定义 -54- ——Visual FoxPro程序设计 命令格式: CREATE TABLE|DBF TableName|[长表名][FREE] (FieldNamel类型,宽度 [NULL|NOT NULL] [ CHECK 规则[信息][默认值] [PRIMARY KEY|UNIQUE] [REFERENCES TableName2[TAG tagName1]] [,FieldName2„] [,FOREIGN KEY eExpression TAAG TagName [NODUP] „„„ 例: 用命令建立学生表和成绩表。 CREATE TABLE 学生( 学号 C(7) PRIMATY KEY, 姓名C(8) 年龄 I CKECK between(年龄,17,20) error“年龄出错!” Default 18) CREATE TABLE 成绩( 学号 C(7) refe 学生 tag 学号, 课程号 C(6) refe 成绩 tag 课程号, Primary key 学号+课程号 tag 学号课程) §5.4.2 表的删除 SQL命令: DROP TABLE table_name 功能:从磁盘上删除table_name 对应的dbf文件。 §5.4.3 表结构的修改 命令:ALTER TABLE 有三种格式: 格式1: ALTER TABLE Tablename|ADD|ALTER[column]fieldname1 Fieldtype[(nEileldwidth[,nprecision])][ null|not null] [checklExpression1[ERROR cMessageTtext1]][Default expressionl] [primary key |unique] [references tablename2[tag tagname1]] 例: 为学生增加一个总成绩字段 Alter table 学生; -55- 关系数据库标准语言SQL Add 总成绩I ckeck between(总成绩,0,100) Error “绩应该在0~100间” default 80 格式2: ALTER TABLE Tablename |ATTER [column]fielname2 [null|not null] [set default expression2][set check lexpression2 [error cmessageText2]][DROP Default][dropcheck] 功能:定义、修改和删除有效性规则和默认值定义。 例:删除总成绩的有效性规则。 Alter table 学生 alter 总成绩 Drop check drop default 格式3: Alter table tablename1[drop[column]fieldname3] [ser check lexpression3[reeor cmessage text3]] [drop check] [add primarmy key eExpression3 tag tagname2[for(expression4)] [drop primary ket] [add unique expression4{TAG tagname3[for表达式]}] [drop unique tag tagname4] [add foreign key [expression5] tag tagname4[for expression6] References tablename2[tag tagname5]] [drop foreign key tag tagneme6[save] [rename column fieldname4 to fieldname5] 功能:可以删除字段、修改字段名、可以定义、修改和删除表一级的有效 性规则等。 §5 .4.4 视图的定义 1.视图定义:是根据表定义或派生出来的虚拟表,可以是本地的、远程的或带 参数的。视图可以引用一个或多个表,或引用其他视图。视图是可更新的,它可引用远程表。 格式: 视图是根据对表的查询定义的 Create view view_name AS select_statement 说明: select_staement 可以是任意的select查询语句,它说明和限定了 视图中的数据、视图的字段名将查询中指定的字段名或表中的字段名同名。 2.从单个表派生出的视图 例1: create view e_w as; -56- ——Visual FoxPro程序设计 Select 职工号,仓库号 from 职工 说明:视图一经定义,就可以和基本表一样进行各种查询,也可以进行一 些修改操作。 即等效命令: (1) Select * from e_w (2) Select 职工号,仓库号 from e_w (3) Select 职工号,仓库号 from 职工 例2:定义北京仓库的信息视图 Create view v_bj as; Seleet 仓库号,面积 from 仓库 where城市=“北京” 3.从多个表派生出视图 例1:列出每个职工今年具有最高金额的定单信息。 Create view v_sample AS; Select out.职工号,out.供应商号,out.订购单号,; out.订购日;期,out总金额; From 订购单 out where 总金额=; (select max(总金额) from 订购单 innerl; where out.职工号=inner1.职工号) 此时,可以在视图中查询: Select * from v_sample 例2: create view v_emp as; Select 职工号,工资,城市from 职工,仓库; Where 职工.仓库号=仓库.仓库号 4. 视图中的虚字段 虚字段:视图中的select子句可以包含算术表达式或函数,由于这些表 达式或函数是计算得来的,并不存储表内,故称为虚字段。 例:定义一个视图,它包含职工号、月工资和年工资3个字段。 create view v_sal as; Select 职工号,工资 as月工资,工资*12 as 年工资from 职工 5.视图的删除 格式: Drop view <视图名> 例: Drop view v_emp -57- 关系数据库标准语言SQL 第六章 查询与视图 教学内容与目的: 掌握查询与视图的创建与使用方法,了解查询与视图的 区别。 教学重点: 建立查询 教学难点: 视图的建立与使用 课时分配: §6.1:2课时 §6.2:2课时 §6.1查询 说明:是VFP支持的一种数据库对象,是VFP为方便检索数据提供的一种 工具或方法。 §6.1.1查询设计器 1.查询的概念 ① 定义:是从指定的表或视图中提取满足条件的记录,然后按照想得到的 输出类型定向输出查询结果,诸如浏览器、报表、表、标签等。 ② 查询是扩展名为qpr的文本文件,其主体是SQL Select语句,另外还有和输出定向有关的语句。 2.查询设计器 ⑪建立查询 A、 create query命令 -58- ——Visual FoxPro程序设计 B、 C、 D、 “新建”→“查询” 项目管理器 →“查询”→“新建” 直接编辑.qpr文件 ⑫查询设计器 选择表或视图,当多表时指定联接条件 “字段”对应select短语,可以是字段或计算表达式 “联接”对应Join on 短语用于编辑连接条件 “筛选”对应where短语,用于指定查询条件 “排序依据”对应于order by短语,用于指定排序的字段和排序方式 “分组依据”对应于group by和having短语,用于分组 “杂项”指定是否要重复记录及列在前面的记录 §6.1.2建立查询 例1:建立一个含有仓库号、职工号、城市和工资信息的查询。 Select 仓库.仓库号,职工.职工号,仓库.城市,职工.工资; From 订货管理!仓库 inner join 定货管理!职工; On 仓库.仓库号=职工.仓库号 “查询”→“查看SQL” 例2:增加计算表达式. 在“函数和表达式”或“表达式生成器”中编辑计算表达式 生成的SQL SELECT语句为: Select 仓库,仓库号,城市,职工,职工号,职工,工资*12 From 定货管理!仓库inner join定货管理!职工; On仓库,仓库号=职工,仓库号 例3:查询设计排序 “排序依据”→“排序条件”→“排序选项” 例4:利用分组功能统计各仓库年工资额的合计. 在“函数和表达式”中职入表达式: Sum(职工.工资*12) as 年工资合计 生成的SQL SELECT语句 Select 职工,仓库号,sum(职工.工资*12)as 年工资合计; From 订货管理!职工 Group by 职工.仓库号 §6.1.3查询设计器的局限性 -59- 查询与视图 说明:查询设计器只能建立比较规则的查询,不能建立复杂查询。建立完......................... 查询后,存盘产生一个扩展名为qpr的文本文件。 §6.1.4 运行查询 一、运行查询 ① 项目管理器→数据→选择查询→“运行”命令按钮 ② 命令格式: Do Query File----须带扩展名 二、查询定向 ① 浏览:在“浏览”(browse)窗口中显示查询结果 ② 临时表:将查询结果存在一个命名的临时只读表中. ③ 表:保存在一个表中 ④ 图形:使查询结果可用于Microsoft Graph. ⑤ 屏幕:在VFP主窗口或当前活动窗口中显示查询结果. ⑥ 报表:将查询结果输出到一个报表文件(.frx) ⑦ 标签:将查询结果输出到一个标签文件(.lbx) §6.2 视图 一、视图的概念 1.视图兼有“表”和“查询”的特点 与查询类似:可以用来从一个或多个相关联的表中提取有关信息。 与表类似:可用来更新其中的信息,并将更新结果永久保存在磁盘上。 2.视图分问本地视图和远程视图 本地视图:使用当前数据库VF表建立和视图 远程视图:使用当前数据库之外的数据源中的表建立的视图。 二、建立视图 1.建立视图的方法 ① 甲create view命令打开视图设计器 ② “新建”→“视图”→打开视图设计器 ③ 项目管理器→展开数据库分类→本地视图或远程视图 ④ 用SQL命令,create view „ as „ 2.视图设计器 ① 视图设计后不存放磁盘,而是保存在数据库中 ② 视图可以更新,为此在视图设计器中多了“更新条件”选项卡 -60- ——Visual FoxPro程序设计 ③ 在视图设计器中无“查询去向”问题 三、远程视图的连接 说明:为建立远程视图,须先建立连接远程数据库“连接” 1.定义数据源和连接 数据源:一般是odbc数据源,首先安装odbc驱动程序 连接:根据数据源创建并保存在数据库中的一个命令连接 2.建立连接 ① 用create Counection 命令打开“连接设计器” ② “新建”→“连接” ③ 项目管理器→展开数据库分支→选择“连接” 3.设计远程视图 首先选择“连接”或“数据源” 四、视图与数据更新 通过视图更新基本表中的数据时,需要选中“发送SQL更新” 1.指定可更新的表 2.指定可更新的字段 3.检查更新合法性 4.使用更新方式 ① 先SQL DELETE 然后 INSERT ② SQL UPDDATE 五、使用视图 1.视图操作 ① 在数据库中用USE命令打开或关闭视图 ② 在“浏览器”窗口中显示或修改视图中的记录 ③ 使用SQL语句操作视图 ④ 在文件框、表格控制、表单或报表中使用视图作为数据源等 2.使用视图 ① 项目管理器 先选择数据库→选择视图名→“浏览” ② 用命令使用视图 例: A、 open database 定货管理 Use wh_emp Browse B、 select * from wh_emp where 工资>1230 或updete wh_emp set工资=1260 where 职工号=“E4” -61- 查询与视图 第七章 程序设计基础 教学内容与目的: 掌握VFP程序设计的基本方法,包括程序与程序文件, 程序的基本结构、多模块程序以及程序调试等内容。 教学重点: 程序的基本结构 教学难点: 程序调试 课时分配: §7.1:2课时 §7.2:4课时 §7.3:2课时 §7.4:2课时 §7.1一、程序的概念 1.程序:是能够完成一定任务的命令的有序集合。 程序方式的特点: ①可以利用编辑器,方便地输入,修改和保存程序 ②以用多种方式,多次运行程序 ③可以在一个程序中调用另一个程序 2.程序说明: ①命令注释: 以NOTE或*开头的代码为注释行,命令后用&&进行注释. ②SET TALK ON/OFF命令 Set talk on显示有关执行状态的信息 Set talk off不显示有关执行状态的信息 ③命令分行: “;” 例1:对学生表 student.dbf进行浏览编辑 Set talk off -62- 程序与程序文件 ——Visual FoxPro程序设计 Open database student Select * from student Close database Return 二、程序文件的建立与执行 1.程序文件的建立与修改 A.操作步骤: ①“文件”→“新建”→“程序”→输入程序内容→w存盘 ②“文件”→“打开”→“程序”→编辑修改→w存盘 B.命令方式: Modify command <文件名> 文件名→*.PRG 2.执行程序文件 ①菜单方式: “程序”→“运行” ②命令方式: DO <文件名> 3.特殊语句执行 ①CANCEL:终止程序运行,清除所有的私有变量,返回命令窗口。 ②DO:转去执行另一个程序。 ③RETURN:结束当前程序的执行,返回到调用它的上级程序; 若无上级程序则返回到命令窗口。 ④QUIT:退出VF,返回到操作系统。 ⑤VF程序经过编译、连编,可以产生不同的目标代码文件,这些文件具有不同的扩展名,当用DO执行程序文件时,系统寻找文件的顺序为: .exe →.app(VF应用程序文件)→.fxp(编译文件)→.prg(源程序 文件) 三、简单的输入输出命令 1.INPUT 命令 格式: INPUT [<字符表达式>] TO <内存变量> 功能:暂停正在执行的程序,显示提示信息,等待用户从键盘上输入数据 并将其存入指定的内存变量中。 说明:①选用<字符表达式>,会首先显示表达式的值作为提示信息。 ②输入的数据可以是常量、变量,也可以是一般表达式,但不能不 输入任何内容直接按回车键。 ③输入字符串时须加定界符;输入逻辑常量时要用圆点界定;输入 -63- 程序设计基础 日期型常量要用标准格式 2.ACCEPT 命令 格式: ACCEPT成名就[<字符表达式>] TO <内存变量> 功能:等待用户输入字符串,当用户回车后,系统将该字符串存入指定的 内存变量,程序继续执行。 说明:①该命令只接收字符串,用户在输入时不需要加定界符,否则会把 字符串作为定界符本身的一部分。 ②如果不输入内容直接回车,会将空串存入内存变量。 3.WAIT 命令 命令格式: WAIT [<字符表达式>][TO<内存变量>][WINDOW[AT< 行,列>]] [NOWAIT] [CLEAR] [TIME OUT〈数值表达式〉] 功能:只能接收单个字符,直到用户接任意键继续。 说明:①如果设指定<字符表达式>,则显示默认的提示信息“按任意键继 续„” ②<内存变量>保存的是单个字符,若用户接ENTER或单击鼠标,保 存的是空串。 ③若指定了Window子句,则会出现wait提示窗口,一般定位于主 窗口的右上角,也可用wait指定出位置 ④若同时选用Nowait 和 Window子句,系统将不等待用户按键, 直接往下执行。 ⑤若用NOCLEAR短语,则不关闭提示窗口,直到用户执行下一条, wait window或wait clear命令为止。 ⑥TIMEOUT用来设定等待时间,一旦超时就不再等待用户按键,自 动往下执行。 4.清屏命令 ①clear:清除屏幕或当前用户定义的窗口内容。 ②Clear All:关闭所有打开的数据库文件及其有关文件,清除内存变量, 关闭所有定义的窗口,回到启动VF的初始状态 §7.2程序的基本结构 §7.2.1选择结构 一、条件语句 1.格式:IF<条件> -- ——Visual FoxPro程序设计 <语句序列1> [ELSE <语句序列2>] ENDIF 2.流程图如教材P162图7.2和7.3 3.功能说明: 下一句语句;否则直接转向ENDIF的下一条语句去执行。 ②有ELSE子句时,如果<条件>成立,则执行<语句序列1>;否则,执行< 语 句序列2>,然后转向ENDIF的下一条语句。 ③IF和ENDIF必须成对出现。 ④条件语句可以嵌套,但不能出现交叉,在嵌套时,按缩进格式书写,以使程序结构清晰,易于阅读。 例1:从屏幕输入你的身份,如果是学生,则显示“好好学习,天天向上” Clear Accept “请输入你的身份” to SF IF SF=“学生” ??“好好学习,天天向上!” Endif End 例2:从屏幕输入一个数字型数据到变量X中,如果x≤200,则给其加500; 如果200 If x>200 and x<=300 X=x+300 Else X=x+100 Endif Endif Clear @10,5 say “x= ” get x 二、分支语句 -65- ①无ELSE子句时,如果条件成立,则执行语句序列1,然后转向ENDIF向 程序设计基础 1.格式: DO CASE CASE 〈条件1〉 〈语句序列1〉 CASE〈条件2〉 〈语句序列2〉 CASE〈条件n〉 〈语句序列n 〉 [OTHERWISE] 〈语句序列〉 ENDCASE 2.流程图如教材P165图7.4 3.功能注释 ①依次判断CASE后面的条件是否成立,当某个条件成立时,就执行该CASE 和下一个CASE之间的命令序列,然后执行ENDCASE后的命令。如果所有条件都不成立,则执行otherwise与endcase之间的命令序列。 ②不管有几个case条件成立,只执行最先成立的那个CASE条件对应的命令序列。 ③Do case„„end case必须成对出现。Do case是本结构的入口。 例:从键盘输入学生成绩,判断输出:优秀,良好,一般,差。 Clear Input “请输入你的成绩:” to cj Do case Case cj >90 ??“你是优秀学生” Case cj>=80 ??”你的成绩良好” Case cj>=60 and cj<80 ??“你的成绩一般,需要继续努力!” Other wise ??“你的成绩太差,赶紧努力!” End case return §7.2.2循环结构 -66- ——Visual FoxPro程序设计 循环结构:是指按照给定的条件去重复执行一段具有特定功能的程序,以满足 人们的要求. 一、Do While - Enddo 1.格式:Do While 〈条件〉 〈语句序列1〉 [LOOP] 〈语句序列2〉 [exit] <语句序列3> ENDDO 2.流程图如教材P166图7.5和图7.6 3.功能注释 ①先判断 do while 处的条件是否为真,如果为真,则执行do while„ enddo间的循环体,当执行到enddo时,返回do while处重新判断条件是否为真,以确定是否再次执行循环体,若条件为假,则结束循环语句。 ②用户必须在循环体内设置修改循环条件的语句(如改变循环控制变量),或采用特殊方法跳出循环,否则会出现死循环。 ③如果遇到LOOP语句,就结束本次循环执行,转回do while处。用户当遇到某个特殊条件时,需要阻止循环体内剩余语句执行的场合,通常LOOP包括在if„„endif内。 ④如果遇到EXIT,就强行中止循环,转去执行enddo后的语句。用于当遇到某个特殊条件,需中途退出循环的场合,因此包含在if„endif之内。 例1 :从0计数到20为止。 clear set talk on X=0 Do while x<20 X=x+1 @row()+1,2 say “x=” get x Enddo @row()+1,2 say “count step!” 例2 :输入10个数,求奇数和 X=0 S=0 Do while x<10 X=x+1 -67- 程序设计基础 Clear Input “请输入数:” to n If int(N/2)=n/2 LOOP Else S=s+n Endif Enddo @5,5 say “奇数和=” get n 例3: a=1 do while .t. if a>=250 exit endif a=a+1 enddo 二、FOR - ENDFOR语句 1.格式:FOR <循环变量>=<初值> TO <终值> [STEP<步长>] <循环体> ENDFOR | NEXT 2.功能注释 ①本语句用于循环次数已知情况下的循环结构。 ②先将初值赋给循环变量,判断循环条件是否成立,若成立,则执行循环体,然后循环变量增加一个步长,并再次判断循环条件是否成立,至止到循环条件不成立,则结束该循环语句,执行ENDFOR后面的语句。 ③<步长>默认值为1 ④在循环体内可以改变循环变量的值。 ⑤EXTT和LOOP可以出现在此循环语句内,当执行到LOOP命令时,结束本次循环执行,循环变量增加一个步长。 三、SCAN----ENDCSAN 语句 1.格式: SCAN[<范围>][FOR<条件1>][WHILE<条件2>] <循环体> END SCAN 2.功能注释: ①该语句一般用于处理表中的记录,执行时,记录指针自动、依次地在当 -68- ——Visual FoxPro程序设计 前表的指定范围内满足条件的记录上移动,对每一条记录执行循环体内的命令。 ②<范围>默认为ALL。 ③EXTT 和LOOP命令可以出现在该循环语句内。 例参P170编程实例。 §7.3多模块程序 模块:是一个相对的程序段,它可以被其他模块所调用,也可以去调 用其他的模块。 主程序:只调用其他模块而没有被其他模块调用。 子程序:被其他模块调用的模块。 一、模块的定义和调用 1.过程定义格式: PROCEDURE | FUNCTION <过程名> <命令序列> [RETURN][<表达式>] [ENDPROC|ENDFUNC] 说明: ① 需给过程命名,过程名须以字母或下划线开头,可包含字母、数字和下划线。 ② RETURN 控制过程转回到调用程序(或命令窗口)并返回表达式的值。 ③ 过程可单独保存在过程文件里 *.prg。 2.过程的打开与关闭 打开:SET PROCEDURE TO [<过程文件1>][,<过程文件2>],„„] [ADDITIVE] 关闭:RELEASE PROCEPURE < 过程文件1>[,<过程文件2>,„„] 3.模块调用格式: 格式1: DO <文件名>|<过程名> 格式2:<文件名>|<过程名> () 二、参数传递 1、接收参数的命令PARAMETES 和 LPARAMETES 格式: PARAMETARS <形参变量1>[,<形参变量2>,„„] LPARAMETERS <形参变量1>[,<形参变量2>,„„] 说明:①PARAMETERS命令声明的形参变量被看作是模块程序中建立的私有 量 ②LPARAMETERS看作是局部变量 -69- 程序设计基础 2.调用模块程序的格式为: 格式1: DO <文件名>|<过程名> WITH <实参1>[,<实参2>,„„] 格式2: <文件名>|<过程名>(< 实参1>)[,< 实参2>,„„] 说明: ① 按值传递:如果实参是常量或一般形式的表达式,系统会计算出实参的值,并把它们赋值给相应的形参变量。 ② 按引用传递:如果实参是变量,那么传递的将不是变量的值,而是变量的地址,这时形参和实参实际上是同一个变量。 ③ 格式2调用模块程序时,默认为按值传递,如果实参是变量,用以下命令重新设置参数传递的方式: SET UDFPARMS TO VALUE | REFENCE TO VALUE :按值传递 TO REFERENCE :按引用传递 实例:P177例7.18(good example) 三、变量的作用域 1.公共变量:在任何模块中都可使用的变量。 格式:PUBLIC <内存变量表> 说明:公共变量初值为逻辑假.F.,一旦建立就一直有效,程序结束返回命 令窗口也不会消失,只有当执行clear memory、 release、quit等命令后,公共变量才被释放。 2.私有变量: ①在程序中直接使用而由系统自动隐含建立的变量都是私有变量。 ②作用域: 是建立它的模块及其的各层模块,一旦建立它的模块程序运行结束,私有变量将自动清除。 3.局部变量:只能是建立它的模块中使用,不能在上层或下层模块中使用, 当建立它的模块程序运行结束时,局部变量自动释放。 格式: LOCAL <内存变量表> 4.隐藏内存变量 PRIVATE 格式: PRIVATE <内存变量表> PRIVATE ALL [LIKE <通配符>|EXCEPT<通配符>] 功能:隐藏指定的在上层模块中可能已经存在的内存变量,使得这些变量 在当前模块程序中暂时无效。 5.实例见P180。 -70- ——Visual FoxPro程序设计 §7.4程序调试 定义:是指在发现程序有错误的情况下,确定出错的位置并纠正错误,其 中关键是要确定出错位置。 语法错误语义错误(逻辑错误) 一、调试器环境 调用方法:①“工具”→“调试器” ②命令:DEBUG 1.跟踪窗口:用于显示正在调试执行的程序文件。 符号意义:→:“ 指向调试中正在执行的代码行 ●:断点 2.监视窗口: 功能:用于监视指定表达式在程序执行过程中的取值变化情况。 步骤:设置监视表达式 单击“监视”文本框→输入文本→回车 3.局部窗口 功能:用于显示模块程序(程序、过程和方法程序)中的内存变量(变量、 数组、对象),显示它们的名称、当前取值和类型。 4.调用堆栈窗口 功能:用于显示当前处于执行状态的程序、过程或方法程序,若正执行子 程序,则主程序和子程序的名称都会显示在窗口中。 符号意义: ①调用顺序序号:序号小的处于上层,是调用程序; 序号大的处于下层,是被调程序,序号最大的是当前正在执行的模块程序 ②当前行指示器(→):指向当前正在执行的行所在模块程序。 5.调试输出窗口 调出格式: DEBUOUT <表达式> 功能:调试此命令时,会计算出表达式的值,并将计算结果送入调试输出 窗口。 二、设置断点 1.设置类型1断点:在定位处中断。 方法:找到代码行→双击左端灰色区域→设置断点或F9键。 -71- 程序设计基础 2.设置类型2断点:如果表达式为真则在定位处中断;指定一代码行以及 一个表达式,当程序调试到该行代码时,如果表达式的值为真,就中断程序执行。 方法:“调试器”→“工具”→“断点”→“类型”→“选择断点”→“定 位”→输入断点位置→“文件”→“指定文件”→“表达式”→“输入相应表达式”→“添加”→“确定”。 3.设置类型3断点:当表达式值为真时中断,设置方法同2。 4.设置类型4断点:当表达式值改变时中断;指定一个表达式,在程序调 试执行过程中,当该表达式值改变时中断程序执行。 方法同前。 第八章 表单设计与应用 教学内容与目的: 掌握表单的创建与管理,表单设计器环境以及在该环境下的一些操作、表单数据环境的设计及常用的表单控件。了解面向对象的若干基本概念及VF中的基类。 教学重点: 在表单中加入和修改控件对象 教学难点: 表单控件的重要属性设置 课时分配: §8.1:2课时 §8.2:2课时 §8.3:4课时 §8.4:4课时 §8.5:12课时 §8.1 面向对象的概念 §8.1.1 对象与类 一、对象(object) 1.定义:是现实世界的实体或概念在计算机逻辑中的抽象表示。 2.说明: ①对象的特点是有标识且可识别。 ②对象被定义为有属性和相关方法组成的包。 属性:用来描述对象的状态特征。 方法:用来描述对象的行为特征,即操作,指出对象应该干什么 -72- ——Visual FoxPro程序设计 或能够干什么。 二、类(class) 定义:是对一类相似对象的性质描述,这些对象具有相同的性质:相同种 类的属性以及方法。 说明:①类是概括型名词,而对象是具体事物。 ②类好比对象的模板,有了类定义后,基于类就可以生成这类对象 中的任何一个对象。 “类是对象工厂” 例1:学生类 属性:学号、姓名、性别、出生日期等 方法:注册、考试、毕业 对象: 2003级会电(1)班 例2:文件类 属性:文件名、类型、创建日期、访问日期 方法:打开、关闭、读、写操作 对象: 数据文件 三、类与对象的关系 1.对象是类实例化的结果 .......... class instance 对象类 对象实例 概括性名词 具体事物 2.对象、实体与类示意图 计算机世界 对象 映射 现实世界 实体 实例化抽象抽象 计算机逻辑世界 类 抽象数据类 概念世界 §8.1.2 子类与继承 一、继承 -73- 表单设计与应用 1.定义:是指在基于现有的类创建新类时、新类继承了现有类里的方法和 属性。 2.说明:①继承表达了一种从一般到特殊的进行过程。 ②继承可以使在一个父类上所做的修改自动反映到它的所有上。 二、子类 1.定义:用户在VFP提供的基类基础上,根据需要定义的类。 2.说明: ①子类继承了现有类里的方法和属性,现有类称为新类的父类。 ②可以为新类添加新的方法和属性。 ③一个子类的成员一般包括: A.从其父类继承的成员,包括属性、方法。 B.有子类自己定义的成员,包括属性、方法。 §8.2 Visual FoxPro基类简介 基类:Visual FoxPro系统所提供的的基础类,即VFP基类。通过继承与扩 充,用户可以创建使用于自己的应用程序的了类和对象,子类自动继承基类的所有特性。 一、Visual FoxPro基类简介 1、 VFP提供的基类清单见教材P192表8.1。 2、 基类最小的属性集见教材P192表8.2。 3、 对象的生成函数: CREATE OBJECT (<类名>[,<参数1>,<参数2>,„„] 4、 对象属性访问以及对象方法调用的基本格式如下: <对象引用>.<对象属性> <对象引用>.<对象方法[(„„)] 二、容器与控件 1.定义 VFP中的类一般可分为两种类型:容器类和控件类。 控件:是一个可以以图形化的方式显示出来并能与用户进行交互的对象, 例如按钮、文本框。 容器:是一种特殊的控件,它能包容其他的控件或容器,例如表单、表格 层次:容器内的包容关系形成了对象的嵌套层次关系,对象的层次概念与 类的层次概念完全不同:对象的层次是包容与被包容的关系,而类的层次是继承与被继承的关系。 2.常用容器类及其所能包容的对象 见教材P192表8.3。 -74- ——Visual FoxPro程序设计 3.在对象的嵌套层次关系中,要引用其中的某个对象,需要指明对象在嵌套层次中的位置,对象引用的几个属性或关键字见P194表8.4。 三、事件 1.定义:是一种由系统预先定义而由用户或系统发出的动作,事件作用于 对象,对象识别事件并作出相应的反映。 2.说明: ①用户编写事件发生时的对象行为(方法程序),当用户以任意一种方式与对象交互时,对象的事件被触发,同时执行与该事件相关联的方法。 ②事件是固定的,用户不能定义新的事件。 ③事件代码既能在事件引发执行,也可以像方法一样被显示调用。 §8.3 创建与管理表单 §8.3.1创建表单 一、使用表单向导创建的表单 ①在“项目管理器” →“文档”选项卡 →“表单” ②“新建” → “新建表单” ③“表单向导” →“向导选取” ④从列表框中选择要使用的向导,单击“确定” 二、使用表单设计器创建表单 1.在项目管理器环境下调用。 2.表单方式调用 3.命令方式调用 格式:CREATE FORM 说明:表单文件的扩展名是.SCX,表单备注文件的扩展名是.SCT. 三、修改已有的表单 1.修改项目中的表单 “项目管理器” →“文档” →选择表单→“修改” → 打开表单设计器 2.不属于项目中的表单修改, ①“文件” →“打开” →选择表单文件 ②命令打开: MODIFY FORM <表单文件名> 四、运行表单 1.在项目管理器窗口中,选择要用运行的表单,然后单击窗口里的“运行” -75- 表单设计与应用 按钮。 2.在表单设计器环境下,选择“表单”菜单中的“执行表单”命令,或单 击工具栏上的“运行”按钮。 3.选择“程序”菜单中的“运行”命令,打开“运行”对话框,在对话框 中指定表单文件并单击“运行”按钮。 4.命令: DO FORM〈表单文件名〉[NAME〈变量名〉] WITH〈实参1〉,[〈实参2〉,„„][LINKED][NOSHOW] 说明: ①NAME子句将建立指定名字的变量。 ②WITH 子句将各实参的值传递给该事件代码中的各形参。 ③包含LINKED关键字,表单将随指向它的变量的清除而关闭(释放)。 ④包含NOSHOW关键字,表单运行时将不显示,直至表单对象的Visible属性被设置为.T.,或调用了SHOW方法。 §8.3.2管理表单属性和方法 一、常用表单属性 常用表单属性规定了表单的外观和行为,见教材P199表8.7。 二、创建新属性 1.选择“表单”的“新建属性”命令,打开“新建属性”对话框 2.在“名称”框中输入属性名称。 3.在“说明”框中输入新建属性的说明信息。 三、创建新方法 1.运行“表单”→新建方法程序“→打开”新建方法程序“对话框。 2.在“名称”框中输入新方法名。 3.在“说明”框中输入新建方法的说明信息。 四、编辑方法或事件代码 在表单设计器中,编辑方法或事件代码的步骤如下: 1.选择“显示”→“代码”,打开代码编辑窗口。 2.从“对象”框中选择方法或事件所属的对象。 3.从“过程”框中指定需要编辑的方法或事件。 4.在编辑区输入或修改方法或事件的代码。 §8.3.3常用事件与方法 -76- ——Visual FoxPro程序设计 事件及方法 Init Destroy Error Load Unload GotFocus Click Dblclick Rightclilk Release Refresh Hider SetFocus 创建对象 从内存中释放对象 当对象方法或事件代码在运行过程中产生错误时引发 在建立表单对象前引发 在释放表单对象时引发 在对象获得焦点时引发 使用鼠标点击对象 使用鼠标双击对象 使用鼠标右键单击对象 从内存中释放表单或表单集 重新绘制表单或表控件,并刷新它的所有值 隐藏表单 让控件获得焦点,使其成为活动对象 功 能 Interactivechange 控件的值改变时引发 §8.4 表单设计器 §8.4.2表单设计器环境 一、表单设计窗口 1.内容正在设计的表单的表单窗口。 2.用户可视化地添加和修改控件的窗口 二、属性窗口 1.包括对象框,属性设置框,方法和事件列表,用户可在此窗口中选择单击控件,并为表单设计属性方法及事件, 2.表单及控件的绝大多数属性,其数据类型是固定的,一般来说,要为属性设置一个字符型数值,可以在设置框中直接输入不需要加定界符。 3.“属性窗口”可以通过单击“表单设计器”工具栏中“属性窗口”按钮或选择“显示菜单”中的“属性”命令打开和关闭 三、表单控件工具栏 1.利用“表单空间”工具栏可以方便的往表中添加控件:单击需要的控件按钮后,再将鼠标移至合适位置单击,并拖动鼠标以确定控件大小, 2.“表单控件”工具栏还包含:“选定对象”、“按钮”锁定“、“生成器锁 -77- 表单设计与应用 定”“查看类4个辅助按钮。 四、表单设计器工具栏 内含“设置Tab键次序“、”数据环境“、”属性窗口“、 “代码窗口”、“表单控件工具栏”“、”调色板工具栏“布局工具栏”“表单生成器”和“自动格式”按钮 五、表单菜单 其命令主要用于创建、编辑表单或表单集,如为表单增加新的属性或方法等。 §8.4.2控件的操作与布局 一、控件的基本操作 在表单设计器环境下,经常需要对表单上的控件进行移动、复制、删除等操作。 ①选定控件 ②移动控件 ③调整控件大小 ④复制控件 ⑤删除控件 二、控件布局 1.利用“布局”工具栏中的按钮,可以方便的调整在表单窗口中被选控件的相对大小位置。 2.通过“布局工具栏”按钮或“显示”菜单中的“布局工具栏”命令打开或关闭。 三、设置Tab次序 1.当表单运行时,用户可以按Tab键选择表单中的控件,使焦点在控件间移动,控件的TAB次序决定了选择控件的次序。 2.VFP提供了两种方式设置TAB键次序:交互方式和列表方式。 §8.4.3 数据环境 一、数据环境的常用属性 1.Autoopentables:当运行或打开表单时,是否打开数据环境中的表和视图,默认值为.T.。 2.Autoclosetables:当释放或关闭表单时,是否关闭由数据环境指定的表和视图,默认值为.T.。 二、打开数据环境设计器 -78- ——Visual FoxPro程序设计 单击“数据环境”按钮或选择“显示”菜单中的“数据环境”命令,即可打开“数据环境设计器”窗口。 三、向数据环境添加表或视图 1.选择“数据环境”菜单中的“添加”命令,或右键单击“数据环境设计器”窗口,选择“添加”命令,打开“添加表或视图”对话框。 2.选择要添加的表或视图,并单击“添加”按钮;若单击“其他”按钮,将调出“打开”对话框,用户可从中选择需要的表。 四、从数据环境中移去表或视图 1.在“数据环境设计器”窗口中,单击选择要移动的表或视图。 2.选择“数据环境”菜单中的“移去”命令。 五、在数据环境中设置关系 1.如果添加到数据环境的表之间具有在DB中设置的永久关系,这些关系会自动添加到数据环境中。 2.可以根据需要在数据环境设计器下为这些表设置关系。 六、在数据环境中编辑关系 关系有自己的属性、方法和事件,编辑关系主要通过设置关系的属性来完成。单击关系的连线,然后在属性窗口中选择关系属性设置。 七、向表单添加字段 用户可以从“数据环境设计器”窗口、“项目管理器”窗口或“数据库设计器”窗口中直接将字段、表或视图拖入表单,系统将产生相应的控件并与字段相联系。 §8.5常用表单控件 一、标签(label)控件 标签是用以显示文本的图形控件,被显示的文本在caption 属性中指定,称为标题文本。 1.caption属性:指定标签的标题文本 2.Alignment属性 指定标题文本在控件中的显示对齐方式,该属性包括三个属性值:0、1和2,分别代表左对齐、右对齐和对齐,除了标签还使用于文本框、复选框、选项按钮、列、表头等控件。 二、命令按钮(Command buttons)控件 命令按钮典型地用来启动某个事件代码,完成特定功能,如关闭表单、移动记录指针、打印报表等。 -79- 表单设计与应用 1.Default属性 该属性默认值为.F.,当属性为.T.时,可称为“确定“按钮。一个表单的只能有一个“确定”按钮。 2.Cancel属性 默认值为.F.,当属性为.T.时称为“取消”按钮,在表单中,可通过ESC键执行该命令按钮中的CLICK事件代码。 3.Enabled属性 指定表单或控件能否影响用户引发的事件,默认值. T.,即对象能响应用户引发的事件。 当Enabled=.T.时,只是用来显示只读的信息。 4.Visible属性 指定对象是可见还是隐藏,默认值为.T.,即对象是可见的。 三、命令组(CommandGroup)控件 命令组是包含一组命令按钮的容器控件, 用户可以单个或作为一组来操作其中的按钮。 1.ButtonCount属性:指定命令组中命令按钮的个数,默认的属性值为2。 2.Buttons属性:用于存取命令组中各按钮的数组. 3.Value属性:指定命令组当前的状态,该属性若为数值N,则表示命令组中第N个命令按钮被选中;若为字符C,则表示命令组中Caption属性值为C的命令按钮被选中。 除了命令组,还适用于复选框、选项按钮、选项组、列表框、组合框、文本框、编辑框、表格等控件。 四、文本框(TextBox)控件 1.ControlSource属性 可利用还属性为文本框指定一个字段或内存变量,运行时,文本框中首先显示该变量的内容. 2、Value属性:返回文本框的当前内容,默认值是空值. 3、Passwardchar属性:指定文本框控件是显示用户输入的字符还是显示 占位符。指定用作占位符的字符。 4.Inputmask属性 指定在一个文本框中如何输入和显示数据. 五、编辑框(EditBox)控件 编辑框类似于文本框,只能输入、编辑字符型数据,包括C型内存变量、数组元素、字段以及备注字段里的内容。 1.AllowTabs属性:指定编辑框中能否使用TAB键,默认值为.F.。 2.HioleSelection 属性:指定当编辑框失去焦点时,编辑框中选定的文本是否仍然显示为选定状态。 -80- ——Visual FoxPro程序设计 3.ReadOnly属性:指定用户能否编辑编辑框中的内容,默认为.F.。 4.SorollBars 属性:指定编辑框中是否具有滚动条。 5.SelStart属性:返回用户在编辑框中所选文本的起始位置或插入点位置。 6.Sellengh属性:返回用户在控件的文本输入区中所选定的字符的数目,或指定要选定的字符数目。 7.SelText属性:返回用户编辑区内选定的文本,如果没选定文本,将返回控件。 六、复选框(CheckBox)控件 1、Caption属性:用来指定显示在复选框旁边的文字。 2、Value属性 用来指明复选框的当前状态,共有3种情况: 0或.F.—未被选中 1或.T.—被选中 2或.NULL.不确定,只在代码中有效 七、选项组(OptionGroup)控件 选项组是包含若干个选项按钮的一种容器控件,但用户只能从中选择一个按钮。 1.ButtonCount属性:指定选项组中选项按钮的数目,其默认值为2。 2.Value属性:用于指定选项组中哪个选项按钮被选中。 3.ControlSource属性:指定与选项组建立联系的数据源. 4.Buttons 属性:用于存取选项组中每个按钮的数组。 八、列表框(ListBox)控件 列表框提供一组条目,用户可以从中选择一个或多个条目。 1.RowSourceType与RowSource属性 RowSource属性指定列表框的条目数据源. RowSourceType指明列表框中的条目数据源的类型。 2.List属性 用以存取列表框中数据条目的字符串数组。 3.ListCount属性:指明列表框中条目的数目。 4.Columncount属性:指定列表框的列数。 5.Value属性:列表框中被选中的条目。 6.CoutrolSource属性:指定一个字段或变量用以保存用户从列表框中选择的结果。 7.Selected 属性:指定列表框中的某个条目是否处于选定状态. 8.Multiselect属性:指定用户在列表控件内进行多重选定 0或.F.——不允许多重选项 -81- 表单设计与应用 1或.T.——表示允许多重选项 九、组合框(ComboBox)控件 组合框的特点如下: 1.通常只有一个条目是可见的。 2.组合框不提供多重选定的功能。 3.组合框可通过Style属性设置其形式:0—下拉组合框。 十、表格(Grid)控件 表格是一种容器对象,一个表格对象由若干列对象组成,每个列对象包含一个标头对象和若干控件,它们都有自己的属性、事件和方法。 1.表格的常用属性 ①RecordSourceType属性:指明表格数据源类型。 ②RecordSource属性:指定表格数据源 ③ColumnCount属性:指定表格的列数 ④LinkMaster属性:指定表格控件中所显示的了表的父表名称 ⑤ChildOrder属性:指定建立一对多的关联关系,子表所要用到的索引 ⑥RelationlExpr 属性:确定基于主表字段的关联表达式。 2.常用的列属性 ①ControlSource 属性:指定要在列中显示的数据源,常见的是表中的一个字段。 ②CurrentControl属性:指定列对象中的一个控件,该控件用以显示和接 收列中活动单元格的数据。 ③Sparse属性:用于确定Current Control属性是影响列中的所有单元格还是影响活动单元格。 3.常用的标头(Header)属性 ①Caption 属性:指定标头对象的标题文本、显示于列顶部位。 ②Alignment属性:指定标题文本在对象中显示的对齐方式。 十一、页框(PageFrame)控件 页框是包含页面(PageFrame)的容器对象 1.Page Count属性:用于指明一个页框对象所包含的页对象的数量。 2.Pages属性:用于存取页框中的某个页对象。 3.Tabs属性:指定页框中是否显示页面标签栏。 4.TabStretch属性:多行显示。0——多重行,1—单行。 5.AceivePage属性:返回页框中活动页的页号,或使页框中的指定页成为活动的。 -82- ——Visual FoxPro程序设计 第九章 菜单设计的应用 教学内容与目的: 熟悉Visual Foxpro的系统菜单的结构;掌握下拉式菜单的设计方法和快捷菜单的设计方法。 教学重点: 利用菜单生成器生成可执行的菜单文件 教学难点: 定义菜单(下拉式菜单设计) 课时分配: §9.1:2课时 §9.2:4课时 §9.3:2课时 §9.1 Visual Foxpro系统菜单 一、菜单结构 1. VFP支持两种类型的菜单:条形菜单和弹出式菜单。 每个菜单都有一个内部名字和一组菜单选项,每个菜单项都有一个名称和选项序号。菜单及菜单项的名称显示于屏幕供用户识别,菜单及菜单项的内部名称或选项序号则用于在代码中引用。 2.每个菜单项都可以选择设置一个热键和一个快捷键。 3.无论那种类型的菜单,当选则某个选项时都会有一定的动作,这个动作是3种情况之一:执行一条命令、执行一个过程或激活另一个菜单。 二、系统菜单 1.VFP系统菜单是一个典型的菜单系统,其主菜单是一个条形菜单,内部名字为_MSYSMENU,也可看做整个菜单系统的名字。系统菜单常见选项、弹出式菜单和“编辑”菜单中常用选项的选项名称和内部名字见教材P238表9.1、表9.2表和9.3。 -83- 菜单设计的应用 2.通过SET SYSMENU命令可以允许或禁止在程序执行时访问系统菜单,也可重新配置系统菜单。 格式: SET SYSMENU ON/OFF/AUTOMATIC |TO [<弹出式菜单名表>] |TO [<条形菜单项名表>] |TO [DEFAULT]|SAVE|NOSAVE 说明:①ON:允许程序执行时访问系统菜单。 OFF:禁止程序执行访问系统菜单。 AUTOMATIC:可使系统菜单显示出来,可以访问系统菜单。 TO DEFAULT:将系统菜单恢复为缺省配置。 ②不带参数的SET SYSMENU TO 命令将屏蔽系统菜单,使系统菜单 不可用。 §9.2下拉式菜单设计 一、菜单设计的基本过程。 调用菜单设计器 定义菜单 菜单文件(.mnx,.mnt) 生成菜单程序 菜单程序文件(.mpr) 运行菜单程序 图9.1-菜单设计的基本过程 1.调用菜单生成器 ①“文件”→“新建”→“菜单”→“新建文件”→“菜单”按钮 ②用命令打开: MODIFY MENU <文件名> 扩展名.mnx 2.定义菜单 指定菜单的各项内容,然后通过菜单“保存”或Ctrl+w保存 3.生成菜单程序 “菜单”→“生成”→产生可执行的菜单程序文件(.mpr文件) 4.运行菜单程序 -84- ——Visual FoxPro程序设计 格式:DO〈文件名〉 注:文件扩展名.mpr 不能省略 二、定义菜单 1、“菜单设计器”窗口 “菜单设计器”窗口每页显示和定义一个菜单,可以是条形菜单,也可以是弹出菜单。 ①“菜单”名称列 指定菜单项的名称,也称为标题,用于显示。 ②“结果”列 指定当用户选择该菜单项时的动作,列表中有命令过程,子菜单和填充名称或菜单项。 ③“选项”列 有一个无符号按钮,单击该按钮会出现“提示选项”对话框 2、“显示”菜单 系统显示菜单会出现两条命令: ①“常规选项”对话框 ②“菜单选项”对话框 三、用编程方式定义菜单 1、条形菜单定义 2、弹出式菜单定义 四、为顶层表单添加菜单 ①在“菜单设计器”窗口中设计好下拉式菜单。 ②打开“常规选项”对话框,勾选对话框左下角的“顶层表单”复选框。 ③将表单的ShowWindow属性设置为2,使之成为顶层表单。 ④在表单的Init事件中添加调用菜单的程序代码: DO〈文件名〉WITH THIS [,“〈菜单名〉”] 说明:〈文件名〉指被调用的菜单程序文件(MPR)。〈菜单名〉是为被添加 的下拉式菜单的条形菜单指定的一个内部名字。 ⑤在表单的Destory事件中添加清除菜单的程序代码: RELEASE MENU <菜单名> [EXTENDED]表示在清除条形菜单时一起清除该下属的所有子菜单。 §9.3快捷菜单设计 一、快捷菜单的建立与执行 与下拉式菜单相比,快捷菜单没有条形菜单,只有弹出式菜单。 建立快捷菜单的方法和过程如下: ①打开“新建”对话框; -85- 菜单设计的应用 ②在“新建”对话框中选“菜单”选项,单击“新建文件”按钮; ③“新建菜单”→“快捷菜单”→打开“快捷菜单设计器”窗口; ④用与设计下拉式菜单相似的方法,设计快捷菜单,生成菜单程序文件; ⑤在快捷菜单的“清理”代码中清除菜单的命令,使得在选择菜单命令后能及时清楚菜单,释放其所占用的内存空间。 格式为: RELEASE POPUPS 〈快捷菜单名〉[EXTENDED] ⑥在表单设计器环境下,选定需要添加快捷菜单的对象。 ⑦在选定对的RightClick事件代码中,添加调用快捷菜单程序的格式为: DO〈快捷菜单程序文件名〉 其中,文件扩展名MPR不能默认。 第十章 报表设计 教学内容与目的: ⑪掌握报表设计器的使用, ⑫快速报表的生成 ⑬利用报表设计器设计和修改报表布局, ⑭设计分组报表 ⑮设计多栏报表。 教学重点: 使用报表向导定义报表布局。 教学难点: 使用报表设计器设计和修改报表布局。 课时分配: §10.1:2课时 §10.2:2课时 §10.3:2课时 §10.1 创建报表 数据源:报表的数据来源,包括:表、自由表、视图、查询或临时表 报表 布局 VFP提供了三种创建报表的方法: ① 使用报表向导创建报表 ② 使用报表设计器创建自定义的报表 ③ 使用快捷报表创建简单规范的报表 一、创建报表的文件 1、 报表的布局 确定所需报表的常规格式,包括:行报表、列报表、一对多报表和多栏报 -86- ——Visual FoxPro程序设计 表, 见教材P256表10.1。 2、使用报表向导创建报表 启动报表向导的四种方法: ① 项目管理器→“文档”→“报表”→“新建”→“新建报表”对话框→“报表向导”按钮。 ② “文件”→“新建”→“新建报表”→“报表向导”按钮。 ③ “工具”菜单→“向导”→“报表”。 ④ 单击工具栏上的“报表”图标按钮。 3.使用报表设计器创建报表 调用报表设计器的3种方法: ① 在项目管理器环境下调用 ② 菜单方式调用 ③ 命令方式格式为:CREATE REPORT[〈报表文件名〉] 4.创建快速报表 系统提供的“快速报表”功能,可以创建一个简单的报表,然后再修 改 二、报表工具栏 1.“报表设计器”工具栏 ① 数据分组 ② 数据环境 ③ 报表控件工具栏 ④ “调色板工具栏” ⑤ “布局工具栏” 2.“报表控件”工具栏 §10.2 设计报表 一、表的数据源和布局 1、 2、 3、 1、 设计报表数据源 设置报表布局 调整带区高度 标签控件 报表包括若干个带区,每个带区放置相应的数据,见P266表10.2 二、报表中使用控件 ① 插入标签 ② 更改字体 -87- 报表设计 2、 线条、矩形和圆角矩形 ① 添加控件 ② 更改样式 ③ 调整控件 ④ 选择多个控件 ⑤ 设计布局控件 3、 域控件 ① 添加域控件 ② 定义域控件的格式 ③ 设计打印条件。 4、 OLE对象 ① 插入图片 ② 调整图片 ③ 对象位置 §10.3数据分组和多栏报表 一、设计分组报表 1.设置报表的记录顺序 对数据源进行适当的索引或排序,方法如下: ①“显示”→“数据环境”; ②在数据环境设计器种右击鼠标,从快捷菜单种选择“属性”,打开“属性”窗口; ③在“属性“窗口中选择选择对象框种的”Cursorl”; ④选择“数据”选项卡,选定“ORDER”属性,输入索引名,或选定一个索引. 2.设计单级分组报表 分组的操作方法如下: ①“报表”→“数据分组” ②在第一个“分组表达式”框内键入分组表达式,在“表达式生成器”对话框中创建表达式 ③在“属性组”区域选定属性 ④“确定” 3.设计多级分组报表 VFP中在报表内最多可以有20级数据分组,在设计多级分组报表时,需注意分组的级与多重索引的关系 ① 多个数据分组基于多重索引。 ② 分组层次 -88- ——Visual FoxPro程序设计 ③ 设计多级数据分组报表 ④ 更改分组 二、设计多栏报表 1.设置“列表头”和“列注脚“带区 2.添加控件 3.设置页面 三、报表输出 报表文件的扩展名为FRX,该文件存储报表设计的详细说明,但不储存每个数据字段的值,只存储数据源的位置和格式信息。 1.设置报表的页面 ① 设置左边框 ② 选择纸张大小和方向 2.预览报表 3.打印输出报表 -- 报表设计 第十一章 开发应用程序 教学内容与目的: 掌握开发数据库应用程序的方法和步骤;熟悉连编应用程序的方法;熟悉应用程序生成器的使用。 教学重点: 连编应用程序 教学难点: 在用程序生成器的使用方法 课时分配: §11.1:4课时 §11.2:4课时 §11.1应用项目综合实践 一、系统开发基本步骤 借助VFP开发的系统一般 包括以下几部分: ① 一个或多个数据库 ② 用户界面 ③ 事务处理 ④ 输出形式与界面 ⑤ 主程序 1.建立应用程序目录结构 需要建立一个层次清晰的目录结构来组织应用程序涉及到的多种类型的文件。 2.用项目管理器组织应用系统 一个简单的应用系统框架图: 主控程序 -90- 输入表单 查询表单 报表输出 退出系统 ——Visual FoxPro程序设计 3.加入项目信息 在“项目信息”对话框中可输入以下信息: ① 开发这的信息 ② 定位项目的主目录 ③ 通过复选框选择在相应程序文件中是否包含调试信息 ④ 是否对应用程序进行加密 ⑤ 通过“附加图标“复选框指定是否为生成的文件选择自己的图标 二、连编应用程序 连编项目:对各个模块进行分调之后,需要对整个项目进行联合调试编译, 称连编项目。 1.设置文件的“排除”与“包含” ① 文件的“排除”与“包含” ② 将标记为“排除”的文件设置为“包含”的操作。 2.设置主程序 主程序:是整个应用程序的入口点,它的任务是设置应用程序的起始点、初始化环境、显示初始的用户界面、控制实践循环,当推出应用程序时,恢复原始的开发环境。 在VFP中。系统的主文件是唯一的。一个项目管理器中,只能设置一个主文件,设置为主文件的文件名将以黑体显示。 设置主程序的方法的两种: ①在项目管理器中选中主程序文件,从“项目”菜单或快捷菜单中选择“设置为主文件”选项。 ②在“项目信息”的“文件”选项卡种选中要设置的主程序文件后,右击鼠标,在弹出的快捷菜单中选择“设置为主文件”选项。 3.连编项目 连编项目是让Visual Foxpro系统对项目的整体性进行测试的方法,将项目中除“排除”的文件以外,所有被引用的文件合并成一个应用程序文件,连编项目的命令: BUILD PROJECT 〈项目名〉 4.连编应用程序 A.连编项目获得成功后,可在“项目管理器”中选择主程序,然后选择“运行”,或使用命令:DO〈主程序名〉运行该项目程序正确后,可最终连编成一个应用程序文件。 应用程序结果有两种文件形式: ①应用程序文件(APP):需要在UFP中运行 ②可执行文件(EXE)可在Windows种运行 B.连编应用程序的操作步骤如下: -91- 十一章 开发应用程序 ①在“项目管理器”中选择“连编”按钮; ②如果在“连遍选项”对话框中,选择“连编应用程序”单项选,将生成一个APP文件;若选择“连编可执行文件”单选项,则生成一个EXE文件。 ③选择所需的其分选项,并单击“确定:按钮。 C.连编应用程序的命令: BUILD APP <新的应用程序名> FROM <项目名> 或BUILD EXE <新的可执行程序名> FROM <项目名> 5.连编其他选项 ⑪连编COM DLL:是使用项目文件中的类信息创建一个具有DLL文件扩展名的动态链接库。 ⑫“版本”按钮:允许指定版本及版本属性。 ⑬重新生成组件ID。 6.运行应用程序 ⑪运行APP应用程序。 ⑫运行可执行文件EXE。 三、主程序设计 1.初始化环境 从当前环境中截取环境命令方法如下: ①“工具” →“选项”→shift键+“确定” ②从“命令”窗口中,将命令复制和粘贴一程序中。 2.显示初始的用户界面 初始的用户界面环境可以是个菜单,也可以是一个表单或其他的用户组件。在主程序中,可以使用DO命令运行一个菜单或DO FORM命令运行一个表单以初始化用户界面。 3.控制事件循环 ①控制事件循环的方法是执行READ EVENT命令,该命令使VFP开始处理例如鼠标单击等用户事件。 ②多执行READ EVENTS命令开始,到相应的CLEAR EVENTS命令执行期间 ,主文件中的所有的处理过程全部拆挂起。 ③在启动事件循环之前建立一个方法来退出事件循环,必须确保在界面上存在一个可执行结束事件循环CLEAR EVENTS命令的机制。CLEAR EVENTS命令将挂起VFP的事件处理过程,同时将控制权返回给执行CLEAR EVENTS命令并开始事件循环的程序。 4.组织主程序文件 主程序文件完成的基本任务如下: ①通过打开数据库、变量声明初始化环境。 ②调用一个菜单或表单来建立初始的用户界面。 -92- ——Visual FoxPro程序设计 ③执行READ EVENTS命令来建立事件循环。 ④从“退出系统”菜单执行CLEAR EVENTS命令,主程序中不应该执行该命令。 ⑤应用程序退出时,恢复环境。 §11.1应用程序生成器 一、使用应用程序向导 利用应用程序向导创建一个新项目有两种途径: ①仅创建一个项目文件 ②生成一个项目和一个VFP应用程序框架 1.使用应用创建项目和应用程序框架启动“应用程序向导”的具体操作如下:①“文件” →“新建” → “项目” ②“向导” →“应用程序向导”→“创建项目目录结构” ③在对话框的“项目名称”中,输入新项目的名称。 ④单击“应用程序向导”对话框上的“确定”按钮。 2.应用程序框架 应用程序框架可自动完成以下任务: ①提供启动和清理程序,其中包括负责保存和恢复环境状态的程序。 ②显示菜单和工具栏。 ③帮助开发者确定应用程序的功能、用户输入数据的方式、应用程序的外观以及其他强大的功能。 3.应用程序生成器的功能 生成器与应用程序框架结合在一起提供以下功能: ①添加、编辑或删除与应用程序相关的组件。 ②设定表单和报表的外观样式。 ③加入常用的应用程序元素。 ④提供应用程序的作者和版本等信息。 二、应用程序生成器及使用 1.应用程序生成器的组成 应用程序生成器包括“常规”、“信息”、“数据”、“表单”、“报表”和“高 级”6个选项卡。 2.重新启动应用程序生成器 有3种方法: ①在项目上右击鼠标,在快捷菜单中选择“生成器”菜单项。 ②“工具” →“应用程序生成器”:“向导”→“全部”→“向导选取” -93- 十一章 开发应用程序 →“应用程序生成器”。 ③ALT+F2键。 3.使用应用程序生成器 使用应用程序向导和应用程序生成器创建并修改应用程序,步骤如下: ①使用应用程序向导创建项目 ②添加已创建的数据库 ③创建表单和报表 ④查看和修改表单和报表 ⑤连编项目 ⑥连编应用程序 ⑦打包应用程序 -94-
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- baoquwan.com 版权所有 湘ICP备2024080961号-7
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务