2024年2月25日发(作者:)

第1章 Visual FoxPro 6.0概述

• Visual FoxPro数据库是一个关系型数据库。

– Windows环境。

– FoxBASE+汉字操作系统(UCDOS)

• Visual FoxPro不需要用户编程就可以建立一个面向对象的数据库应用程序,所以在众多的数据库软件中,Visual FoxPro脱颍而出,成为一种通用的数据库软件。

1.1 Visual FoxPro 6.0的发展过程

• 主要经历了3个阶段

阶段

E和FoxPro阶段

FoxPro阶段

• 1995 VFP 3.0版运行于Win3.x、Win9X和WindeosNT环境

• 1997 VFP 5.0中文版。

• 1998 VFP 6.0中文版。

VFP6.0的功能

1)为某种信息创建一个表,利用表存储相应的信息。

(2)定义表间的关系,将各表中的数据地联系在一起。

(3)创建查询搜索记录,对记录排序和分组并根据查询结果创建报表、表及图形。

(4)可以通过视图更新表中的数据及从网上取得数据,从而收集或修改远程数据。

(5)创建表单来直接查看和管理表中的数据。

(6)可以创建一个报表来分析数据或将数据以特定的方式打印出来。

1.2.2 VFP的特点

1.利用向导来操作,方便易用

2.可视化开发

3.事件驱动

4.面向对象编程

5.生成器

6.组件库

基础类

8.活动文档

9.对动态图形文件的支持

9.程序语言的增强

10.支持OLE拖放

11.新增和改进的生成器和编译器

1.3 VFP6.0系统的软硬件环境

• 软件环境

– Windows 98

– Windows NT 4.0

• 硬件环境

– 奔腾Ⅱ以上的微型计算机

– 32MB以上的内存

– 硬盘空间240MB以上。

1.5 VFP6.0系统的启动

• 启动VFP

– 在“开始”菜单中启动VFP

– 用快捷方式启动VFP

• 退出VFP(以下并列)

– 在“命令”窗口中,打“quit”。

– 直接按Alt+F4。

– 在“文件”菜单中,选择“退出”命令。

– 双击主窗口左上角的控制菜单。

– 在主窗口控制菜单中,选择“关闭”。

1.6.1

主窗口介绍

• 主窗口:

• 标题栏

• 菜单栏

• 工具栏

• 状态栏

• 命令窗口(CTRL+F2显示)

1.6.2

用VFP开发程序的方式

4种方式:

– 向导方式

– 菜单方式

– 程序执行方式

– 命令方式

6.0有哪些功能和特点?

6.0应用程序使用的方式有几种?向导方式的操作步骤怎样?

3.了解VFP6.0的安装方法,熟练掌握VFP6.0的两种启动方法。

4.了解VFP6.0主窗口的组成,掌握工具栏中的工具按钮的功能。

5.掌握“文件”菜单中的文件操作命令的使用方法。

第2章 VFP6.0基础

2.1 VFP6.0的性能指标

❖ 记录的最大长度:64K字节。

❖ 表文件的最大长度:2G 字节。

❖ 表中字段数:255个。

❖ 在内存中打开的表的最大个数:255个。

❖ 数据表的最大记录数:10亿个。

❖ 字符型字段的最大长度:255字节。

❖ 数值型字段表示十进制数的最大位数:20位。

❖ 浮点型字段表示十进制数的最大位数:20位。

❖ 数值计算时最多可以精确的位数:16位。

❖ 整数的最大值: +2 147 483 647。

❖ 整数的最小值: -2 147 483 647。

❖ 定义的内存变量的最多个数: 65 000。

❖ 数组下标的最大值: 65 000。

❖ DO 调用命令最多可以嵌套的层数:118层。

❖ READ命令最多可以嵌套的层数:5层。

❖ 结构化程序设计命令的最大嵌套层数:384层。

❖ 在自定义的过程或者函数中可以传递参数的最大值:27。

❖ 报表页面可以定义的最大长度:20英寸。

❖ 报表分组的最大层数:118层。

❖ 可以同进打开浏览窗口的最大个数:255个。

❖ 每一行命令的最大长度:8192字节。

❖ 每一个宏替换的最大长度:8192字节。

2.2 VFP文件组成

❖ VFP的常用文件类型格式:

– 数据库 项目

– 表查询 连接

– 浏览 远程浏览

– 格式 报表

– 标签 程序

– 文本 菜单

表1.1

常用的文件类型

扩展名 类 型

.DBC 数据库文件

.DCT 数据库备注文件

.DCX 数据库索引文件

.BAK 备份文件

.DBF 数据表文件

.FPT 数据表备注文件

.PJX 项目文件

.PJT 项目备注文件

.PRG 源程序文件

.FXP 源程序编译后的文件

.CDX 数据表复合索引文件

.IDX 单一索引文件

.SCX 表单文件

.SCT 表单备注文件

.SPR 为源程序

.SPX 为目标程序

.FRX 报表文件

.FRT 报表备注文件

.LBX 标签文件

.LBT 标签备注文件

.MNX 菜单文件

.MNT 菜单备注文件

.MPR 菜单源程序文件

.MPX 菜单编译文件

.QPR 生成的查询程序文件

.QPX 查询程序文件编译后的文件

.FMT 格式文件

.MEM 内存变量文件

.VUE 视图文件

.APP 应用程序文件

.TXT 文本文件

.EXE 可执行应用程序文件

项目管理器

❖ 项目:

– 是文件、数据、文档的集合

– VFP的对象被存于具有后缀为.PJX的文件当中。

❖ 项目管理器:

– 组织和管理文件

– 如建立表、数据库、查询、表单、报表以及应用程序等。

❖ 通过把已有的数据库文件添加到一个新的项目中,用户可以为自己创建一个项目。

❖ 把应用程序的多个文件组织成一个文件

– 注:.PRG、报表格式文件和标签格式文件都能组合在一个文件中

– 如果表和索引不再修改、添加,也可以组合到里面

– 有利于保密源代码

❖ 名为.APP或.EXE

– .APP文件可以用Do命令来执行

– VFP专业版编译成.EXE文件。

项目管理器的功能

❖ (1)查找文件

– 查找数据库文件、表单、报表的详细内容

❖ (2)创建和修改文件

❖ (3)添加和移去文件

❖ (4)共享文件

– 通过与其他项目共享文件,可以用在其他项目开发上的工作成果。

– 操作时只需把别的项目管理器中的文件对象拖到本项目管理器中即可。

项目管理器的组成

(1)文件对象卡

– 数据 文档

– 类库 代码

– 其他

(2)分层结构视图

– 点击“+”,列出下级文件类型

(3)命令按钮

– 新建 添加

– 修改 运行

几个概念

(1)数据库:

– 由数据表组成,及其相互关系。

– 数据库文件的后缀为.DBC。

(2)自由表:

– 不是数据库的一部分,存于后缀为.DBF的文件里

– 可以将自由表加入数据库中。

(3)查询:

– 实现对存于表中的特定数据的查找。

– 按照一定的查询规则从“表”中得到数据

– 采用SQL查询,后缀为.QPR的文本文件中

(4)视图:

– 执行特定的查询,从本地或远程数据源中获取数据,并允许用户对所返回的数据进行修改。

– 视图依数据库而存在,并不是独立的文件。

(5)表单

– 显示和修改数据“表”中的内容。

(6)报表

– 实现对VFP数据表查询结果的格式化打印输出。

项目管理器的操作

❖ 新建一个项目:文件—新建

– 1.向项目中加入一个新文件

– 2.从项目中移去一个文件

– 3.在项目中“新建”一个文件

– 4.用“项目管理器”修改一个文件

其他操作

1.浏览表的数据

2.项目信息的显示与编辑

3.给文件添加说明

4.项目间的文件共享

5.项目管理器的定制

– 移动位置,改变大小与外观

(1)外观定制

(2)顶层显示

设计器

设计器 功 能

表设计器 创建表,设置索引

数据库设计器 创建数据库,建立联系

表单设计器 创建表单,用户界面

报表设计器 创建显示和打印报表

查询设计器 在本地表上查询

视图设计器 创建可更新的查询

连接设计器 为远程视图创建连接

2.4.2

生成器

❖ 生成器 功能

❖ 表格生成器 生成表格

❖ 表单生成器 生成表单

❖ 参照完整性生成器 数据库表间创建参照完整性

❖ 命令组生成器 生成命令组

❖ 选项组生成器 生成选项组

❖ 自动格式生成器 格式化控件组

❖ 组合框生成器 生成组合框

❖ 编辑框生成器 生成编辑框

❖ 列表框生成器 生成列表框

❖ 文本框生成器 生成文本框

工作目录的建立**

❖ 默认目录为其主目录

– 应用中产生的所有文件将存在此目录下。

– 不便于管理,要建自己的工作目录。

❖ 步骤如下:

– (1)工具菜单,中的选项

– (2)“文件位置”中的“默认目录”,按下“修改”按钮

– (3)定位(L)的信息框中,输入位置,确定

– (4)设为默认目录

❖ 命令方式:

– Set default to 工作目录

– 如:

❖ Set default to d:vfp

❖ 设d:vfp为其工作目录

❖ 1.项目管理器有何作用?如何使用项目管理器来管理数据、文档?

❖ 2.用项目管理器建立一个新项目文件,怎样操作?

❖ 3.向项目管理器中添加一个文件,怎样操作?

❖ 4.从项目管理器中移去一个文件,怎样操作?

❖ 5.工作目录的建立方法是什么?

❖ 6.0中的设计器有几种?生成器有几种?

第3章 数据库的建立和操作

内容

•介绍数据库、数据表的基本概念

•数据库和数据表的建立

•编辑表中的数据、记录修改与删除

•表的索引等有关操作。

概念

•数据库(.dbc)

–就是一个关于某一特定主题或目标的信息集合。

•表(.dbf)

–基本单位,是数据库的基础

–可以说表是关系数据库系统中的基本结构。

–要存数据,为所需记录的信息创建一个表。

–由行和列组成的,一行为一个记录,一列为一个字段。

二维表简称表(Table)特征:

(1)若干记录

(2)若干个字段,每记录具有相同结构的字段

(3)不同类型的字段来存储不同类型的数据

(4)字段的顺序与存储的数据无关

(5)记录在的顺序与存储的数据无关。

表的字段

•表是由记录组成

•记录又由字段组成

•字段的属性(表结构)

–字段名

–字段类型

–字段宽度

–小数位数

1.字段名

•约定:

–只能使用字母、汉字、下划线和数字

–见名知义

– > < = + / | [ ] : ? 空格

–字段名必须以字母或汉字开头,并且长度不能超过118个字符

–如:下列那些合法

不以数字开头

不能含有空格;

不能含有各种运算符;

2.字段类型

× 3mn 姓名1 mn3

× m n ×编 号

× S-N S_N × AI*X

•不同类型的字段来存储不同类型的数据

(1)字符型(Character)

–通常用于存储键盘输入的文本数据。

•汉字、字母、数字、空格、

•符号及标点符号

–字符型数据必用双引号或单引号或[]来定界

–字符型字段的宽度最大为254 *****

–如:

–“how” ‘1134’ [中国人]

(2)货币型(Currency)

–保存货币数值时,用货币类型而不是数值类型字段

–最多保留4位小数位数,多则四舍五入至4位

–内存变量用$数值来赋初值

•如:x=$999

• Type(‘x’)

(3)数值型(Numeric)

–数值型字段用来存储数值数据。

–它可以包含数字0~9,也可以带正、负号或小数点

–如:1134 90.89

(4)浮点型(Float)

–浮点型字段在功能上等价于数值型字段。

(5)日期型(Date)

–用于存储包含有年、月、日的日期数据

–长度为8字节

(6)日期时间型(DateTime)

–用于存储包含有年、月、日、时、分、秒的日期和时间数据。

(7)双精度型(Double)

–双精度型用于存储精度要求较高、位数固定的数值,或真正的浮点数值。

(8)备注型(Memo)

–长度固定为4字节

–用于存储不定长度的文本数据

–当文本数据长度可能大于254,无法使用字符型存储时,使用备注类型字段

–所有备注型字段的实际内容存储在和表名相同,扩展名为.FPT的备注文件中

(9)通用型(General)

–通用型用于存储OLE对象数据

–字段宽度固定为4个字节,用于存储一个4个字节的指针,指向该字段的实际内容

–其内容存储在扩展名为.FPT的文件中。

–OLE对象包括电子表格、字处理文档、图像或其他多媒体对象等

–OLE对象可以用链接方式存储在表中。

–存储数据的大小,取决于相的OLE服务程序,和磁盘空间大小的限制。

(9)整型(Integer)

–整型用于存储整数数据

–字段宽度固定为4个字节。

–取值范围从-2 147 483 647 到2 147 483 646。

(10)逻辑型(Logical)

–.T.或.Y. 为逻辑真

–.F.或.N. 为逻辑假

–长度固定为1字节

(11)字符型(二进)((Character(Binary))

–字符型(二进制)用于存储不需要系统代码页维护的字符数据

–其他字段特性同字符型字段

–密码(各国)

(13)备注型(二进制)((Memo(Binary))

–备注型(二进制)用于存储不需要系统代码页维护的备注字段数据。其他字段特性同备注型字段。

数据类型(结)

•数据类型(Type)13种

C-字符型 N-数值形 F-浮点型

D-日期型 I- 整 型 L-逻辑型

M-备注型 G-通用型 Y货币型

3.字段宽度

•规定宽度

–字符型字段 254

–货币型字段 8

–数值型字段 20

–日期型字段 8

–备注型 4

–逻辑型 1

–日期时间型 8

–通用型字段 4

•用于存储一个4个字节的指针,指向该字段的实际内容。整型字段宽度固定为4个字节。

•宽度(Width) (结)

( 以下类型宽度固定)

• 货币型、日期型、日期时间型、双精度型:8 字节

• 整型、备注型、备注型(二进制)、通用型:4 字节

• 逻辑型:1 字节

4.小数位数

– 有小数的字段:

• 数值型

• 浮点型

• 双精度型

– 字段宽度 = 整数部分宽度 + 小数点1位 + 小数位宽度

– 如小数位数不为0 ,则小数位数至少要比整个字段宽度小2

小数位数

•一个N形变量宽为6,小数位数为3,则这个变量最大可表示的数为多少?

•_ _ . _ _ _

•99.999

5.空值(NULL)

– 空值是用来标识一个字段“ 没有值” 的标志

– 空值表示没有任何值或没有确定值

–空值不等同于数值0、空字符串或逻辑“假”

– 函数EMPTY() 测试空值

–如果允许字段接受NULL值,则应选中该栏所在框

–表的关键字段不允许为NULL值

字段类型 中文名称 宽度(字节) 说明

–Character 字符型 254 字母、汉字、数字、文本、符号

–Currency 货币型 8 货币单位

–Numeric 数值型 20 整数或小数

–Float 浮点型 20 同数值型

–Date 日期型 8 年、月、日

–DateTime 日期时间型8 年、月、日、时、分、秒

–Double 双精度型 8 双精度数值

–Integer 整型 4 整数

–Logical 逻辑型 1 真或假

–Memo 备注型 4 不定长的字母、文本、数字

–General 通用型 4 OLE图像、多媒体对象

小结

•数据库是表和表间关系的集合

•表是由表结构和记录组成

•表结构是由各不同字段构成

•每一字段又具有字段名、数据类型、数据宽度、小数位数等属性

•表中的每一个记录又具有相同的字段

•建表的步骤:

1)设计表结构

2)建表的结构 creat 表名

3)保存表文件 ctrl+w

4)输入记录 append browse

表结构的创建

1、表设计器

(1)打开“表设计器”

项目管理器/自由表/新建/新表/保存

注:

A、也可从菜单或工具栏中直接新建表

B、与在“项目管理器”中新建表不同的是:

(2)在“表设计器”中创建表结构

表设计器/字段/输入/确定

这样新建的表将不包含在项目

表结构的创建

2、用create table -SQL命令创建表结构

–create table |DBF表文件名(字段名1 字段类型[(字段宽度[,小数位数])];[,字段名2 字段类型[(字段宽度[,小数位数])]]…)----编程时用

•例:学生表结构

–create table xs2(xh c(6),xm c(8),xb c(2),zydh c(6))

–教师表结构

–create table js(xm c(8),xb c(2),gl n(2,0),csrq d,jbgz n(7,2),jl m)

数据表的建立

•如:

–一张名为教师档案文件

•编号 姓名 性别 年龄 职称 工作时间 婚否 简历

1 张黎黎 女 26 助教 05/24/83 T memo

2 李 艳 女 30 助教 09/14/90 T memo

3 刘 强 男 38 讲师 11/24/76 T memo

职工档案表结构()

•字段名 类型 宽度 小数位数 索引 NULL

•编号 字符型 4 无 升序 否

•姓名 字符型 6 无 无 否

•性别 字符型 2 无 无 否

•年龄 数值型 2 无 无 否

•职称 字符型 8 无 无 可

•工时 日期型 8 无 无 否

•婚否 逻辑型 1 无 无 否

•简历 备注型 4 无 无 可

•照片 通用型 4 无 无 可

表的打开

VFP在使用一个表前必须把表打开

•打开命令

–USE < 文件名>

VFP在结束使用一个表时,必须把表关闭

•关闭命令

–USE

–CLOSE ALL

–CLOSE DATABASE/TABLE

修改表结构

1、表设计器

项目管理器/选定表/修改

2、命令

–USE books

–MODIFY STRUCTURE

修改表结构

2、命令

–ALTER TABLE-SQL命令

• 添加字段:ADD [ COLUMN ] 子句

例: ALTER TABLE books ADD COLUMN 折扣 n(4,2)

• 重命名字段:RENAME COLUMN 子句

例: ALTER TABLE books RENAME COLUMN 折扣 TO zk

• 删除字段:DROP [ COLUMN ] 子句

例: ALTER TABLE books DROP COLUMN zk

记录的处理

记录的追加

1、立即输入记录(浏览/编辑/追加方式)

2、浏览窗口下追加(USE/BROWSE)(表/追加新记录)

3、使用INSERT - SQL命令追加记录

insert into zgda(姓名,性别,年龄) values ('洪七公','男',900)

4、从其他表中追加记录

•命令APPEND

–APPEND FROM

–APPEND [ BLANK ]

记录的浏览

1、浏览窗口

– 进入 :

•BROWSE 命令

•use books/显示/浏览

•项目管理器/选定某个表/单击“浏览”按钮

2、命令

–BROWSE

–LIST / DISPLAY

–BROWSE FIELDS 书号, 书名, 作者 for ...

如何定制浏览窗口?

•重新安排列的位置:

–拖动

•改变列的宽度:

–拖动

•显示或隐藏表格线:

–显示/网格线

•分为两个窗格:

–左下角拖动

6.3.3 记录的定位

几个概念

例1

假设ZGDA表有848条记录,先后执行以下命令

bof() eof()

use books f f 1

skip -1 t f 1

skip -1 Error f 1

go bott f f 848

skip f t 849

skip Error

例2

RECN()

Use books 1

go 5 5

skip +2 7

skip -3 4

locate for …

3、记录定位的实现

– 界面方式 (“ 表 ”—“ 转到记录 ”)

• 记录号:绝对定位 goto

• 定位:条件定位 locate for

• 作用范围:all,next,record,rest,for

• 找到/ 未找到

– 命令方式

绝对定位:GO( GOTO )

GO( GOTO ) TOP/BOTTOM

相对定位:SKIP(与索引有关)skip=skip 1

快速移动:SEEK 及 FIND

记录的修改

1、在浏览窗口中修改

recno()

EDIT / CHANGE / BROWSE

项目管理器/浏览

例:修改books表中第5条记录

use books

edit record 5

记录的修改

2、批量记录的修改

(1)界面方式

“表”—“替换字段”—字段条件

(2)命令方式

–UPDATE-SQL 命令( 表不必事先打开, 以下同)

–REPLACE 命令

USE books

copy to temp

use temp

REPLACE 单价 WITH 5.00 FOR 单价<5

记录的删除

•目的:

–节省时空

•删除步骤:

– 逻辑删除

– 物理删除

逻辑删除

–给要删除的记录加标记(*号)

•标记要删除的记录(逻辑删除)

–浏览窗口:

•单击小方框

–“表”

• “ 删除记录 ”

–命令DELETE FROM 表名[WHERE 过滤条件表达式]

例:

–删除教材表中库存在数量为0的记录

•delete from books where 库存数量=0

物理删除

•彻底删除(物理删除)

– “ 表 ”

• “ 彻底删除 ”

– 命令PACK ( 独占)

• 删除有删除标记的记录

– 命令ZAP=delete all +pack ( 独占)

恢复记录的删除

–恢复带删除标记的记录(与set dele 无关)

法1 :

–小方框 黑-->白

法2 : “ 表 ”

–“恢复记录”

法3 :RECALL [ 范围][FOR 条件表达式1][WHERE

例:recall

recall all

recall all for 库存数量=0 (这里的all 可省) 说明: 缺省范围(当前记录,不是全部记录)

记录的删除

–对带删除标记记录的访问

(1) 测试记录的删除标记deleted()

– 有删除标记返回为真,否为假

(2) 控制对带删除标记记录的访问

•set deleted on/off

说明:

• 有些默认为ON , 有些默认为OFF

实验:

• 先删除若干记录(逻辑删除)

•LIST 默认为OFF

•SET DELETED ON

•LIST

set deleted on/off

•为set deleted on时

–屏蔽掉有标记的记录,不能访问

–影响Count命令

–不影响Reccount()

•例:8个记录,一个有删除标记

–Set deleted on

–Count to x

条件表达式2]

– X 7

–? Reccount() 8

筛选记录

•界面

“表”—“属性”—“数据过滤器”

•命令

–SET FILTER TO <条件表达式>

–SET FILTER TO

–FOR子句:临时性记录筛选

例:USE ZGDA

•SET FILT TO 出版社=‘石油大学’

•注意:

–是隐藏而非删除

–与FOR子句不同

•对SE LECT-SQL、 DELETE-SQL、UPDATE-SQL无效

筛选字段

•表/属性/字段筛选

•SET FIELDS TO <字段1> [, <字段2>]

–SET fields to 姓名,性别

表的使用

工作区的标识***

•用数字来标识各个工作区(1—255)

•用相应工作区中表名来标识工作区

–( 此时表没有指定别名,如指定别名,用别名来标识工作区)

•Sele 5

•Use zgda

•Sele 4

•Sele zgda

•1-9 个工作区常用英文字母A-J

•Sele 9=sele j

工作区的转换

•命令:

–Select 工作区号/工作区中表别名/A-J

• 如:

•Sele 1

•Use zgda

•Sele B

•Selct zgda

•Select 0 表示选择未用的号最小工作区

Select O例子

sele 1

use zgda

sele 4

use zggz

sele 0

select() 返回选择的工作区号

表的使用

表的使用

•操作非当前工作区中的表

–把其它的工作区选为当前工作区

•Sele 2

–在命令中强行指定工作区

•GO TOP IN ok

关于表的打开和关闭

•刚创建的表处于打开状态*

1、表的打开

– 界面

• 文件/ 打开

• 窗口/ 数据工作期/ 打开

•USE ?

– 命令

•USE < 表文件名>

•USE < 表文件名> IN 0

–多次打开同一张表(同时)

•USE < 表文件名> AGAIN

• 例:USE books/SELE 0/USE XS AGAIN

2、表的关闭

– 界面

• 窗口/ 数据工作期/ 关闭

– 命令

•USE

•USE IN < 别名/ 工作区>

•CLOSE ALL&& 数据库、索引、项目管理器等也被关闭

•CLOSE DATABASES && 如果当前没有打开的数据库,则把自由表全部关闭

•CLOSE TABLES && 关闭表,不关闭库

• 退出VFP

注意:SQL 语句能自动打开表,但不会自动关闭表!

表的独占与共享使用

表的共享使用:

•一张表可以同时被多个用户打开

•(RECORD UNLOCKED)

表的独占使用:

• 一张表只能被一个用户打开( 默认)

• (EXCLUSIVE )

表的独占与共享使用

•设置独占与共享打开表的默认状态

–工具/选项/数据

–SET EXCLUSIVE OFF/ON(共享/独占)

•强行用独占方式打开表

–“打开”—“独占”复选框

–USE < 工作表 > SHARED/EXCLUSIVE

•设置改变,并不改变已经打开的表的状态

•一张表同时被多次打开时,只以第一次的打开方式为准(窗口/数据工作期)

利用缓冲访问表中的数据

1、数据缓冲

在多用户环境下,用以保护对表记录所做的数据更新以及数据维护操作的一种技术

2、类型

(1)记录缓冲(行缓冲):一次访问、修改、写一个记录

(2)表缓冲:对多个记录缓冲更新

•两种锁定方式:

(1)保守式缓冲:在多用户环境中,防止一个用户访问(读/写)另一个用户正在修改的记录或表

(2)开放式缓冲:记录只在被写入时加锁

表的数据缓冲

表的数据缓冲

• 保守式行缓冲

• 开放式行缓冲

• 保守式表缓冲

• 开放式表缓冲

• 不设置缓冲

设置表的数据缓冲

3、设置表的数据缓冲

(1)界面

–窗口/数据工作期/属性/

–选中“允许数据缓冲”,“锁定记录”,“缓冲”

–“在编辑时”(保守式)“在写入时”(开放式)

–“当前记录”(记录缓冲)“所有编辑过的记录”(表缓冲)

设置表的数据缓冲

(2)CURSORSETPROP()

格式:

CURSORSETPROP(’Buffering’,缓冲类型值,[工作区|别名])

– 缓冲类型值

•1 无缓冲(默认)

•2 保守式行缓冲

•3 开放式行缓冲

•4 保守式表缓冲

•5 开放式表缓冲

例:为XS表打开开放式表缓冲:

SET MULTILOCKS ON(除方式1外)

USE XS

= CURSORSETPROP( ’Buffering’, 5)

利用缓冲访问表中的数据

4、检测缓冲区中的数据是否与数据源表一致

(1)CURVAL()和OLDVAL()

CURVAL (): 返回当前值

OLDVAL (): 返回初始值

(2)GETFLDSTATE()

5、执行和放弃对缓冲数据的更改

(1)TABLEUPDATE()执行对缓冲行、缓冲表或临时表的修改

格式: TABLEUPDATE([AllRows][,lForce][,别名|工作区])

(2)TABLEREVERT()放弃对缓冲行、缓冲表或临时表的修改

格式: TABLEREVERT([AllRows][,工作区|别名])

概念

•物理顺序:

–一般是按照其输入的顺序进行记录的存储顺序

–顺序找,速度慢

–不便于查找需要的信息

•逻辑顺序:

–记录的处理顺序

–(快速)

–可以使用索引来改变记录的顺序即逻辑顺序

–根据表中字段的值,建立具有逻辑顺序的索引文件,然后根据索引文件重新排列数据库表中显示的记录。

索引文件

1、索引:

•如同目录

•数据库的辅助文件,不能单独使用

–可以按一个字段索引,也可以多个

–一个表可以创建多个索引

–索引存储在索引文件中

–索引文件中存储着记录号和索引字段的索引值

理解索引

•索引可以理解为根据某一字段的值进行逻辑排序的一组指针

•按照索引显示记录,VFP按照指针排列的顺序分别读取每一条记录,而这些记录在数据库中的实际存储位置并未改变。

按年龄索引后的表文件

姓名 年龄

张黎黎 26

李 艳 30

刘 强 38

姓名 年龄

刘 强 38

李 艳 30

张黎黎 26

关键字与索引标识

(1)索引关键字(Index Key)

•建立索引的依据(索引表达式)

•字段/字段表达式

•VFP使用索引关键字来显示和访问表中的记录

(2)索引标识(Tag)

•索引关键字的名称(索引名)

•<=9字节

索引的类型

•4种类型索引(根据关键字段)

–主索引

–候选索引

–普通索引

–惟一索引

表的索引

2、索引的类型

–主索引(Primary indexs)

•在数据库表中,每张表只能创建一个主索引

•组成主索引关键字的字段或表达式,在表的所有记录中不能有重复的值(学号可以,姓名不可以)

•自由表不能建立主索引

•主索引存储于数据库表的结构复合索引中

–侯选索引(Candidate indexs)

•在指定的关键字段或表达式中不允许有重复值的索引

•一张表中可以建立多个侯选索引

•侯选索引可用于数据库表和自由表

表的索引

2、索引的类型

–普通索引(Regular indexs)

•可以决定记录的处理顺序

•允许关键字段或表达式的值出现重复

•对一张表可以创建多个普通索引(GL)

–唯一索引(Unique indexs)

•允许有重复值

•具有重复值的记录仅存储其中的第一个(出版社)

•惟一:对每一个特定的关键字只存储一次,而忽略了重复值第二次或以后的记录

表的索引

3、索引文件的种类

索引本身并不改变表中数据的物理顺序

–结构复合索引(CDX)

•与数据表同名

•文件名是在创建时由系统自动给定

•结构复合索引文件与表文件同步打开、更新、关闭

•是表的一部分

–非结构复合索引(CDX)

•文件名由用户给出

•非结构复合索引文件中不能创建主索引

–独立索引(IDX):与FoxBase兼容

创建索引文件

•表设计器

–“表设计器”——“索引”选项卡

•Index命令

INDEX ON <索引表达式> TAG <索引标识名>

[FOR <条件表达式>ASCENDING|DESCENDING]

[UNIQUE|CANDIDATE](允许相同|不允许相同)

•注意

–不能对备注字段和通用字段建立索引

–不要建立无用的索引

析Index命令

结构复合索引(CDX)

非结构复合索引(CDX)

独立索引(IDX)

索引的建立

•步骤:

–项目管理器---表---修改

–表设计器---索引

–输入索引名----类型---表达式

•不要对每个字段都建立索引,否则会降低程序的运行效率

对多个字段索引

•操作步骤:

–项目管理器--选择已索引的表,选“修改”

–表设计器,选索引,输入索引的名称

–在“表达式”框中,输入对多个索引的表达式

–如:按性别与年龄进行索引,其表达式应为

性别+STR(年龄,2)

–确定

•可以对多个字段建立索引

•其排序是按照表达式的值进行的

索引的修改和删除

•索引的修改

–表设计器

•“表设计器”——“索引”选项卡

–命令

•INDEX命令修改原索引

•索引的删除

–表设计器

•“表设计器”——“索引”选项卡

–DELETE TAG 删除索引标识

索引的使用

•设置主控索引

主控索引:决定显示或访问表中记录的顺序的索引

主控索引可以是:

•复合索引文件中的一个标识(主控标识)

•一个独立索引文件(主控索引文件)

–打开表的同时指定主控索引

•Use 表名 index 索引文件名

–打开后再设置主控索引

– 窗口 / 数据工作期 / 属性/ 索引顺序

– 命令 SET ORDER TO TAG < 标识名>

•取消主控索引

•SET ORDER TO

• 索引函数

•CDX() ORDER() TAG()

索引的使用

•利用索引快速定位记录

–SEEK 命令

•SEEK 命令只能在索引过的表中使用, 并且只能搜索索引关键字(XS/96092)

•EOF() 与FOUND()

–SEEK 函数(=SEEK+FOUND())

筛选记录(set filter to)

•操作步骤:

–项目管理器--选择已索引的表,选“修改”

–表设计器,选索引,输入索引的名称

–在“筛选”处,输入过滤表达式

–按“确定”,完成筛选表达式的建立

–如:筛选性别为男的记录,表达式为

Set filter to 性别=‘男’

•可以实现对记录的控制

•4 4 王秋燕 女 45讲师 9/09/70 T memo gen

•5 5 姜丽萍 女 45讲师 9/09/70 T memo gen

•6 6 陈丽丽 女 38讲师 09/27/72 T memo gen

•7 7 刘 刚 男 50副教授 06/23/61 T memo gen

•8 8 王 良 男 39讲师 08/09/78 T memo gen

习 题

1.在创建表之前需要做好哪些准备工作?

2.过滤器有什么作用?怎样设置过滤器的过滤字段?

中的索引有哪几种?索引的使用应该遵守哪几条原则?

4.建立一个“职工档案”表,参考本章例题。建立一个“工资”表,表的内容自己定。

5.建立一个“学生成绩”表,表的内容自己定。

6.将“职工档案”表,复制一个新文件,先添加几个记录,进行修改和删除操作。

(1)用“浏览”或“编辑”进行表的修改操作。

(2)给前3个记录做删除标记,然后再恢复操作。

(3)将职称是“助教”的记录做删除标记,然后再彻底删除。

7.用过滤器,筛选记录,将“职工档案”表进行如下操作:

(1)浏览前4个记录,只列出姓名、性别和工资三个字段的内容。

(2)浏览男的全部记录的内容。

(3)浏览职称是“讲师”并且性别是男的记录的内容。

8.将“职工档案”表,按下列要求建立索引文件:

(1)按职称建立索引文件。

(2)按年龄建立索引文件。

理 解

•数据库提供一个环境

•文件名DBC

•由多表及其关系组成

•表提供记录信息

•文件名DBF

•可不放数据库中,自由表

索引应遵循原则

(1)为了提高速度,用普通索引、候选索引或主索引

(2)控制字段的重复值对数据库“表”用“主索引”或“候选索引”,对于“自由表”,用“候选索引”。

第4章 数据库的管理

数据库的设计

数据库是一种工作环境

存储了一个“表”的集合

在表之间可以建立关系

对数据字段可以设置属性和触发规则

一个数据库文件具有.DBC的后缀。

不同主题内容的信息保存在不同的表当中

数据库的设计步骤:

确立“数据库”的功能:

–确定收集信息的范围,并仔细收集这些信息

确定表的种类与表的结构:

–根据每个表的信息,确定表中的“字段”,将字段作为“表”中的一列

确定表间的关系:

–将所创建的“表”加以分析,确定各个字段之间的“关系”

–要明确为“一对一”、“一对多”关系

–对于“多对多”关系转化为“一对一”、“一对多”关系

建自由表还是数据库表

自由表

–只存储相对独立的信息

–没有依靠其它表的信息或被其他表所引用,可以使用自由表

数据库表有更为强大的功能

–它可以使用长表名和长字段名

–表中的字段可以有标题和注释

–表中的字段可以设置“默认值”

–能设置字段级和记录级“规则”

–对于插入、删除、修改等数据库操作可以设置触发器

–它还可以实现同远程数据源的连接,创建本地视图和远程视图

数据库的简单操作

可通过

–项目管理器

–表设计器

–数据库设计器

数据库的打开

操作步骤如下:

项目管理器,选择想要打开的数据库

选择修改按钮,进入数据库设计器

数据库设计器的操作

全部折叠

–库设计器上右击鼠标

–在出现的快捷键中,选择“全部折叠”

全部展开

–库设计器上,右点击鼠标

–在快捷键中,选择“全部展开”

在库设计器中,选中表,右点击鼠标,选择折叠或展开

重排:

–选择菜单数据库,然后选择重排

–重排方式,然后按确定

数据库属性:

–右击鼠标

–选择属性

–可以输入数据库的属性

–选择显示的类型

–选择“确定”

关闭数据库设计器

把自由表添加到数据库中

方法一

文件---打开,打开项目

选中的数据库是:教工

选中数据库下的“表”文件类型

单击“添加”按钮

选中要加入的表文件,再按“确定”

当自由表添加到数据库中时,其“表设计器”也变成了“数据库设计器”,即也拥有了数据库的所有属性

把自由表添加到数据库中

方法二

–文件---打开,打开项目

–选中的数据库是:教工

–选修改按钮,显示数据库设计器

–选择数据库菜单

–再选“添加表”

–选择要加入的表名,按确定

–如果所选择的是自由表,就添加到所选中的数据库中

–表已经是数据库表,不能添加

数据库中的表删除

–文件----打开,打开项目

–选中的数据库是:教工

–选择修改按钮,屏幕显示“数据库设计器

–选中要删除或移去的表,选择移去

–如果不想删除此表,就选择“移去”,如果要想删除此表,就选择“删除”

 注:

–用户向数据库中添加的“表”,只能是自由表

–表在同一时间只能属于一个数据库

在数据库中查找表

操作步骤如下:

文件--打开,打开项目

选中的数据库是:教工

选择修改,显示数据库设计器-教工窗口

选择“数据库”菜单,选“查找对象”命令

在查找对话框中,选择要查找的表或视图

字段与记录属性的常用概念

1.触发器

–在数据库表进行一个插入、更新、删除操作之后,运行的记录事件级代码

–不同的事件激发不同的动作

–触发器在有效规则之后运行

–常用于检查已建立永久关系的数据库表之间的数据完整性

–触发器只存在于数据库表中

–自由表中不存在触发器

–触发器是数据库的一部分

–受数据库的管理

2.有效性规则

–检查输入数据是否满足某些条件的过程

3.记录级规则

–一种与记录有关的有效性规则

–当插入或修改字段值时被激活

–多用于数据输入的正确性

–记录被删除时不用使用有效性规则

–记录级规则在字段级规则之后和触发器之前被激活

4.字段级规则

–是一种与字段有关的有效性规则

–当插入或修改字段值时被激活

–多用于数据输入正确性检查

–字段级规则在记录级规则和触发器之前被激活

5.数据字典

包含数据库所有表信息的一个表

存储在数据字典中的信息称为元数据

比如:

–长表名

–长字段名

–有效性规则、触发器

–数据库表间的永久关系

–数据库有关对象的定义,如视图和命名连接

数据字典使得对数据库的设计和修改更加灵活

使用数据字典,可以设置字段级和记录级的有效性规则保证主关键字字段内容惟一性

设置字段的显示属性

字段的显示属性:

–显示格式

–掩码

–标题

1.设置字段的标题

定义数据库字段名称时,以英文缩写为多

难以真正理解字段的含义

标题属性,给字段添加一个说明性标题

操作步骤:

–项目管理器

–选定表

–修改,进入表设计器

–选定要添加标题的字段,如姓名

–单击“是”按钮,保存表结构

此时浏览表,姓名显示为职工姓名

2.设置字段的显示格式

格式:

–确定一个字段在表单、浏览窗口或报表中的显示格式

–输入所需的格式码

–格式实际上是字段的输出掩码

常用的格式码:

A——表示只允许输出文字字符(禁止数字、空格或标点符号);

D——表示使用当前系统设置的日期格式;

L——表示在数值前显示填充的前导零,而不是用空格字符;

T——表示禁止输入字段的前导空格字符和结尾空格字符;

!——表示把输入的小写字母字符转换为大写字母。

3.设置字段的掩码

输入掩码:

–可以确定字段输入的格式

–屏蔽非法输入,减少人为的数据输入错误

常用的输入掩码:

–X——表示可输入任何字符;

–9——表示可输入数字和正负符号;

–#——表示可输入数字、空格和正负符号;

–$——表示在固定位置上显示当前货币符号;

–$$——表示显示当前货币符号;

–*——表示在值的左侧显示星号;

–.——表示用点分隔符指定数值的小数点位置;

–,——表示用逗号分隔小数点左边的整数部分,一般用来分隔千分位。

例如

年龄字段的输入掩码为99

–年龄字段只能接受数字输入,而不能输入空格字符、字母等

姓名的显示格式指定为AT

–姓名两个字段只能接受字母或汉字输入,而不能输入空格字符、数字

注:

–设置格式

一个作用是限制显示输出,

–输入掩码:

另一个作用是限制输入

输入字段的注释

注释使字段意义更加明确

步骤:

–表设计器

–“字段注释”文本框中,输入描述信息

“表达式生成器”窗口

有...按钮,显示一个对话框

表达式:

–用运算符把内存变量、字段变量、常数和函数连接起来的式子

–表达式用于计算和描述一个操作条件

–根据处理结果返回一个值

数值型

字符型

日期型

逻辑型

表达式生成器

–方便快捷地生成表达式

5个部分:

表达式文本编辑框

函数列表框

变量列表框

表或视图下拉列表框

控制按钮

1.表达式文本编辑框

用于编辑表达式

从列表框选择出来的选项将显示在这里,

直接在这里输入和编辑表达式

可以输入各种各样的操作条件

–字段级有效性规则

–记录级有效性规则

–参照完整性规则

2.函数列表框

–可以选择表达式所需的函数

分为:

–字符函数

–数学函数

–逻辑函数

–日期函数

字符函数列表框:

–有用于处理字符和字符串的函数及字符运算符

3.变量列表框

–列出了当前表或视图的字段变量

变量列表框

内存变量

系统变量

–从变量列表框中,可以选择表达式所需的变量

4.表或视图下拉列表框

–可以选择当前打开的表或视图

5.控制按钮

4个命令按钮:

–确定

完成表达式生成,并退出表达式生成器

–取消

–检验

单击“检验”按钮,可检验生成的表达式是否有效

–选项

单击选项,进入表达式生成器选项对话框

字段有效性

为了防止这些非法数据的录入

–通过显示属性来控制

字段的显示格式

输入掩码

–只是码级的限制

–通过字段验证方式来控制

合法的字符组合在一起是否合法、是否符合逻辑就无法在此进一步

字段验证

–数据库表的字段属性之一

–字段通过了字段显示格式和输入掩码的限制,输入了数据以后,还要通过字段验证才可以存储到字段中去

字段有效性有3个表达式文本框:

–规则

–信息

–默认值

字段的默认值

–新记录输入时所默认的字段值

–可以简化操作,提示输入格式,减少输入错误,提高输入速度

步骤:

表设计器中的“默认值”属性框中

输入默认值

如:

性别字段输入默认值“女”

单击“正确”按钮

2.设置字段有效性原则

一个规则判断输入的数据是否符合字段的要求

在规则文本框中,可以输入字段验证的规则

字段输入完成,系统计算表达式的值

–如值为真,输入通过字段规则的验证

–否则不允许输入的值存储到字段中去

例如

–教工年龄数据必须大于0

–小于0,输入的数据是无效的

有效性规则:

–字段级有效规则

字段中单个信息输入的数据是否有效

–记录级有效性规则

整条记录输入完毕后才开始检查数据的有效性

记录有效性

–记录级有效性规则属于表的有效性规则

–可以控制用户输入到记录中的信息类型

–记录级有效性规则检查不同字段在同一记录中的限制,从而保证不违反数据库的商业原则

步骤:

–表设计器中,单击“表”选项

–规则中,输入规则表达式

注:

–记录有效性规则当记录值发生改变时被激活

–指针离开记录时,VFP检查记录有效性规则

录值没有改变,规则不被触发

修改了记录,没移动指针,此时关闭窗口,记录有效性规则仍被检查

–如:

iif(2003-year(工作时间)<年龄,.t.,.f.)

设置触发器

触发器:

–当表中的记录被指定的操作命令修改时,触发器被激活

–触发器能执行数据库应用程序要求的其它操作

–触发器可执行:

对记录的修改

进行参照完整性的检查

触发器是作为表的特定属性来存储的

删除表,相关的触发器也将被删除

当进行了其它有效性检查后,触发器被激活

只能删除姓张的记录:“张”$姓名

使用长表名与注释

步骤:

表设计器中,可用长表名和表的注释

在“表名”框中,输入长表名

然后选“表属性”

输入表的注释

表名:

–可以由字母、数字、下划线或汉字组成

–第一个字符必须是字母、下划线或汉字

–默认的表名及.DBF文件名

长表名

–数据库表,可以建立一个长表名

–最多可以包含118个字符

–可以用来代替短表名来标识数据库表

–定义了长表名,表在界面中,显示长表名

–表的注释可以使表的功能易于理解

使用长字段名、标题与注释

自由表的字段名最多可包含9个字符

数据库字段名最多可以包含118个字符

从库中移去表,其长字段名将被截断为9个字符

一个表和数据库相关联时,必须使用长字段名来引用该表中的字段

字段的说明:

–使表更容易被理解更新

–项目管理器中,选择字段后,会显示该字段的注释文本

–数据库表中的每个字段可以有一个标题

创建和编辑关系

关系:

–永久关系

永久关系一旦创建就保存在数据库文件中

在打开数据库时随即被打开

在“库设计器”和数据环境中显示为表索引间的连接线

在永久关系的基础上,可设置表间的参照完整性规则,用以保证数据库各表相关数据的一致性

–临时关系

在使用时临时创建的

在“查询与视图设计器”中,是自动作为默认连接条件的数据库表间关系

关闭其中一个表时关系即被自动关闭

临时关系

通过主表记录指针的移动来控制子表记录指针的移动

这是临时关系和永久关系不同的特征

在一对多关系表间,建立临时关系以后,在关系的“一”方表中,选择一条记录时,会按关系字段的值自动访问到“多”方表中的相关记录

永久关系:

–通过连接不同表的索引可以很方便地建立表之间的关系,被存储在数据库文件中,所以将这种关系称为永久关系

–VFP 6.0就自动将永久关系作为查询、视图、表单和报表的默认关系

–利用永久关系还可以存储参照完整性信息

建立永久关系

主关键字字段与外部关键字字段:

–关联的表有一些公共字段

主关键字字段

–用于标识主表中的某一特定记录

–根据主关键字字段建立一个主索引

外部关键字字段

–用于标识相关表中的相关记录

–外部关键字字段建立一个普通索引

哪个表包含主记录,哪个表包含相关记录

–并且普通索引和主索引必须带有相同的表达式

三种关系:

一对一

–表A中的一条记录,在表B只能有一条记录

–B的每一条记录也在表A中只能有一条记录与之对应

–并不常使用

一对多

–最为普通

–表A中一条记录,表B中有多条记录对应

–表B中的一条记录,在表A中只有一条

–一方要建立主关键字或候选关键字

–多方要使用普通索引

多对多

–转化为“一对一”或“一对多”关系

建立永久关系

永久性关系并不控制表内记录指针间的关系

步骤如下:

(1)建立表的索引

–一方要建立主关键字或候选关键字

–多方要使用普通索引

(2)拖拽:

–在“库设计器”上,“一”方的主索引,拖拽到“多”表的与其对应的普通索引之上

建立临时关系

此处少一点

参照完整性

表间彼此相关,改一表,可能使其关系发生变化

–删除主表中记录,相关表中的记录就找不到与之对应的父记录,就破坏了表之间的原有关系

–参照完整性,利用相关表间的制约关系,互相参照,控制相关表数据的完整性

参照完整性规则

更新规则

删除规则

插入规则

控制在相关表中的插入、更改或删除记录

例如

当主表中没有相关的记录时,记录不得追加到相关子表中

当主表中某条记录在相关子表中有相关记录时,这条主表记录不允许删除

当主表的关系字段值改变将导致相关子表中出现无关记录时,在主表中不允许做这种改变

步骤如下:

在“库设计器”中,双击关系线,打开编辑关系对话框

单击参照完整性按钮,打开生成器

单击要实施参照完整性的关系行

单击“更新”右边的箭头

选择“级联”、“限制”或“忽略”

单击“确定”按钮

级联:

–更新主表关系字段时,同时自动更新子表中的相关记录的关系字段值

限制:

–子表中有相关记录时,禁止更新主表相应记录的关系字段值

忽略:

–表示忽略主子表间的关系,不限制主表关系字段的更新

使用多个数据库

两种方法:

–同时打开多个数据库

–不打开数据库,而引用其中的表

End

1.选择

•从关系中找出满足给定条件的诸元组称为选择。其中的条件是以逻辑表达式给出,该逻辑表达式的值为真的元组被选取。

•该运算的一般表示方法为:

SELECT <关系名> WHERE <条件>

2.投影

从关系模式中挑选若干属性组成新的关系称为投影。这是从列的角度进行的运算,相当于对关系进行垂直分解。

一般表示方法为:

PROJECT <关系名> (属性1,属性2,…)

3.联接

联接是将两个关系模式的属性名拼接成一个更宽的关系模式,生成新的关系中包含满足联接条件的元组。

该运算的一般表示方法为:

JOIN <关系1> AND <关系2> WHERE <条件>

第5章 查询与视图

在数据库的应用中,查询是数据处理中不可缺少的、最常用的。VFP 6.0提供了两种较好的方法,这就是查询文件和视图文件。使用“查询设计器”,能方便地生成一个查询,从而获得用户所需要的数据。视图能帮助用户从本地或远程数据源中获取相关数据,而且还可以对这些数据进行修改并更新,VFP 6.0将自动完成对源表的更新。

查询

查询:

–从数据表中获取所需要的结果

–即设定一些过滤条件,并把这些条件存为查询文件

–在每次查询数据时,调用该文件并加以执行

–查询出来的结果可以加以排序、分类

–查询出来的结果可存储成多种输出格式

•图形

•报表

•标签

视图

视图:

–能够从本地或远程表中提取一组记录

–使用视图可以处理或更新检索到的记录

–即设定条件,可从几个数据表文件中过滤出所要求的数据,其结果存储成实际的记录数据

–可以当作实际的数据表文件来使用

–视图中的数据记录更改后,原表中的记录也要随之修改

查询与视图的区别

存在差异:

–结果

•查询的执行结果可以存储成多种数据格式

•视图的查询结果同一般的数据表文件一样,可以当作数据表文件来使用

–数据

•查询供输出查看,并不能回存

•视图则可修改并且回存到数据表中

•即

–查询文件的结果不属于数据库

–而视图文件存在于数据库中

•视图的数据来源:

–数据表文件

–视图

–服务器上的数据表文件

SQL简介

结构化查询语言

–SQL(Structure Query Language)

–目前美国国家标准组织ANSI的标准数据语言

–已有90多个数据库管理产品支持SQL语言

–已在微型计算机、小型机乃至大型机等各种机型上运行

–用户只需要指出“干什么”,而不需要知道“怎么干”,即存取路径的选择和SQL语言操作的过程由系统自动完成

–语言结构接近英语口语,是一种用户性能良好的语言,非常便于用户的学习和掌握

SQL语言查询操作:

–用SELECT语句来完成的

–它是SQL语言中最重要、最核心的一条语句。

–同时它也是SQL语句中最复杂并且最难掌握的一条语句

的格式

SELECT语句的基本格式如下:

SELECT〈列名表〉

FROM〈表名〉

WHERE〈条件表达式〉

ORDER BY〈排序项目〉[ASC/DESC][,[ASC/DESC]]...

Select说明:

SELECT子句的〈列名表〉

–指出要显示的列的字段名

–可选一个或多个字段

–多个字段间用逗号分开

•“*”可以用来表示某一个数据表中的所有字段

FROM子句的〈表名〉

–指出在查找过程中所涉及的表

–可以是单个表,也可以是多个表

–多个表之间应用逗号分开

WHERE子句的〈条件表达式〉

–指出所需数据应满足的条件

–条件表达式中必须用到比较运算符或逻辑运算符

ORDER BY子句

–可以控制查询所得记录的排列顺序

排序项目:

–指出按哪一列的值进行排序

•它可以是字段名或表达式

•ASC表示按升序

•DESC表示降序

•缺省时按升序排列

–多个条件逗号分开

–先按第一列的值排,第一列值相同,再按第二列的值排序,依次类推

使用举例

单表查询

–即所有查询信息均出自一个表中

–在SELECT语句中表现为FROM子句中只有一个表名。

查询

–无条件查询

–条件查询

无条件查询

要获取表中所有的记录,则无需指定任何条件

无条件查询仅涉及SELECT子句和FROM子句

可以通过SELECT子句指定获取部分列或全部列的信息

例如:

查询显示库中表中的所有信息,并按职称排序

select * from 职工档案 order by 职称

例如:

查询显示“职工档案”数据表中,职工姓名及年龄信息

select 姓名,年龄 from 职工档案

条件查询

–无条件查询是选取表中的所有记录

–实际应用中,用得更多的是条件查询

–即选取表中满足一定条件的记录

SELECT语句中的条件由WHERE子句指出

–WHERE子句后的条件表达式的值可以为真或假

–执行时,把条件为真的记录反馈回来

–对条件为假的那些记录信息,则什么也不执行

WHERE子句的格式

WHERE <条件>

–多重条件,应使用逻辑运算符来连接几个简单条件

–对于字符型常量应加引号

例如:

查询显示表中,年龄大于35的职工信息

•select * from 职工档案 where 年龄>35

例如:

查询显示表中,职称是讲师的并且性别是女的职工姓名。

–select 姓名 from 职工档案 where 职称="讲师" and 性别="女"

LIKE运算符可以用来进行模糊查询

例如:

查询显示“职工档案”数据表中,姓“刘”职工的职称信息。

–select * from 职工档案 where 姓 like “刘%"

–上例“刘%”的含义是以“刘”打头的任意长度的字符串

–对长度已知的匹配串,可用“-”确定

多表查询

从多个数据表中提取信息

将两个或多个表的记录通过相关字段(连接字段)结合在一起,这种运算称为连接运算

连接运算是关系运算中的重要功能,它也是区别关系与非关系系统的重要标志

关系型数据库的三种运算

三种运算

– 选择

– 投影

– 连接:

• 通过两表的公共字段()来实现

例如:

查询显示所有职工的姓名、职称及实发工资

select 职工工资.姓名,职工档案.职称,职工工资.实发工资;

from 职工档案,职工工资;

where 职工档案.姓名=职工工资.姓名

执行查询时

–先从“职工档案”表中读出一个记录

–依次到“职工工资”表中读取每一个记录与“职工档案”表中数据拼接成一个新的记录,并判别其中的两个姓名字段值是否相等

–若相等,取SELECT语句中相应的列作为结果输出

–如此循环,即求出了连接的所有元组

SQL语句的使用方法

使用方法

(1)在命令窗口中使用

当作一条独立的VFP命令在命令窗口中使用,

执行SQL命令前先要打开要查询的数据库

(2)在VFP 6.0程序中使用

(3)在查询设计器中使用

建立查询.QPR

步骤:

(1)使用查询向导或查询设计器开始建立查询

(2)选择出现在查询结果中的字段

(3)设置选择条件来查找所需结果的记录。

(4)设置排序或分组选项来组织查询结果。

(5)选择查询结果的输出类型:表、报表、标签、浏览窗口等。

(6)查询可以用文件加以保存,它存为后缀为.QPR的文件中。

(7)运行查询。

查询结果去向

输出去向 实现功能

浏览 在浏览窗口中显示出来

临时表 存于用户命名的只读的临时表中

表 用户命名的表中

图形 将查询结果与Microsoft Graph一起应用

屏幕 显示于VFP的主窗口中或当前活动输出窗口中

报表 输出到报表文件(.FRX)中

标签 输出到标签文件(.LBX)中

为查询结果排序

决定了查询输出结果中记录或输出行的先后次序

排序的操作步骤如下:

•项目管理器的数据选项卡中,选择查询

•再选择查询,然后按“修改”

•在查询设计器中,选择排序依据选项

•在选定字段框中,选择排序字段

•按“添加”按钮

筛选查询结果

操作步骤如下:

–打开要进行查询的数据库所在的项目

–选择“查询”

–然后按“修改”

–选择“筛选”选项卡

–在“筛选”选项卡中,“字段名”选择筛选字段,“否”和“条件”构造运算符,构造出筛选表达式

查询结果的分组

分组就是为了把类似的记录压缩为一个结果记录,从而完成一组记录的计算

分组

–“查询设计器”中的“分组依据”选项卡

–在“分组依据”选项卡的“可用字段”中

–选择“性别”字段

–单击“添加”

视图

视图:是一组可修改的记录

–本地视图

–远程视图

它的来源

–本地表

–其它视图

–存于服务器上的表或者远程数据源

–如通过ODBC和在服务器上的SQL Server相连。

–当用户对视图加以修改和更新时,这种修改和更新可以反映到数据源中

创建视图和查询的差别:

–视图是可更新的

•如从本地或远程表中提取一组数据且想更新这组数据

–查询则不可更新

•查询可以获得一组只读类型的结果

•将查询保存在一个.QPR文件中

End

第6章 VFP6应用程序设计结构

数据类型和字段类型

1. 字符型(Character)

必须用西文方式的单或双引号括起。

 LOCATE FOR 雇员.职务=‘总经理’

学号、书号、电话号码、邮政编码(注意不宜用数值型)

2. 货币型(Currency)

–cPrice=$90.356

数据类型和字段类型

3. 日期型(Date)

–birthday={05/20/1980}

–Dblankdate={}

–日期格式受SET DATE、SET MARK、SET CENTURY命令的影响–工具/选项/区域

4. 日期时间型(DateTime)

–tdatetime={4/17/ 2000 8:30pm}

–Tdateonly={4/17/ 2000 }

–Ttimeonly={8:30pm}

–Tblankdate= {:}

–时间格式受SET HOURS、SET SECONDS命令的影响

数据类型和字段类型

5. 数值型(Numeric)

–STORE 3.14159 TO pi

–temp=90.11

6. 逻辑型(Logical)

–STORE .T. TO found

–Flag=.F.

7. 通用型(General)

– 用于在表中存储OLE( 对象链接与嵌入) 对象

常量:其值不发生变化的量

(1)常量分为四种类型:

数值型(N):直接由数字或+、-、小数点构成。

字符型(C):由字符、汉字组成,需加定界符。如’沈阳’、”沈阳”、符不能嵌套,如:“AB”CD””,但 ‘AB”CD”’是合法的。

日期型(D):用{}定界。 如{00-08-30}

[沈阳],同一定界

或CTOD(“01/08/30”)

逻辑型(L):用.定界。如.t.、.f.,.Y.,.N.等

说明:请注意C、D、L型常量的定界符。注意区分”209”为字符型常量,而不是数值型常量。逻辑型常量必须用“.”定界。注意各类型数据的宽度。

常量

•编译时常量

–用 #DEFINE预处理命令定义

–如:#DEFINE OPER “输入的数据非法!”

#DEFINE pi 3.1415926

–不能另作它用

变量:

–程序运行中,值可能会发生变化的量

–变量是内存中的一个存储单元的位置

–变量名是存储位置的符号标识

–存储位置中存放的数据在程序操作期间通过该名称来读写

变量分类:

–字段名变量

•数据表中已定义的数据项

•每一个字段可有不同的取值

–表有一个记录指针,它指向的记录定义为当前记录,字段名变量的现值,就是当前记录中对应字段的值。

–记录指针是可以移动的,因此,字段名的取值随着指针的移动而改变,所以它是变量

–内存变量

•独立于数据库之外的

变量的创建

•赋值格式:

•Store 表达式 to 变量

•变量=表达式

•在赋值的同时,完成了变量的创建 STORE 3 TO nVar

nVar = 3

访问变量

•如字段变量和内存变量同名:

–则字段变量具有更高的优先权

– 此时内存变量访问

•M.内存变量

•M->内存变量

变量作用域

局部变量:

•用LOCAL指定局部变量

•创建它的文件中使用与修改

•不能在更高层与低层中引用

私有变量:

•子程序中使用

•用PRIVATE指定私有变量(可以与上层同名 )

全局变量:

•用PUBLIC指定全局变量(公共 )

•任何运行的程序都能使用和修改

•在命令窗口中创建的任何变量或数组被自动赋予全局属性

字段名变量

•数据表中已定义的数据项

•每一个字段可有不同的取值

–表有一个记录指针,它指向的记录定义为当前记录,字段名变量的现值,就是当前记录中对应字段的值。

–记录指针是可以移动的,因此,字段名的取值随着指针的移动而改变,所以它是变量

移动记录指针

说明:

▲注意区别命令GO TOP和GO 1,在索引文件打开时,前者把记录指针移到数据库的第一条逻辑记录,而后者为把记录指针移到记录号为1的物理记录上

▲若库中有记录,执行G0 TOP和GO BOTTOM后,函数BOF()和EOF()的值均为·F·。使BOF()为真,SKIP-1;使EOF()为真SKIP

▲若库中无记录,函数BOF()和EOF()的值均为.T.。

▲SKIP命令无任何选项时,表示向下移动一条记录,多用在对数据库中所有记录逐一处理的循环结构中,在程序填空中经常出现。

移动记录指针实例

•Go 1

•Skip 2

• 编号

•skip

•Go bottom

• 编号

•Skip –1

• 编号

内存变量

•变量名:

–是以汉字、字母、数字或下划线组成的字符串,串长最多为9个字符或5个汉字

–变量名必须以字母或汉字开头,下划线必须嵌在变量名中间,但不能嵌入空格符

•内存变量分为四种类型:

–数值型、字符型、逻辑型和日期型

•变量赋值格式:

–〈内存变量〉=〈表达式〉

–STORE 〈表达式〉=〈内存变量表〉

功能:把〈表达式〉的值送到内存变量中

•例如:

• A=20

• B=90

•数组:

–名字相同、用下标区分的内存变量称为数组

•主要有以下特点:

–(1)数组元素的类型,由所赋的值来决定

–(2)数组变量可以不带下标使用

•在赋值语句的右边,表示该数组第一个元素

•在赋值语句的左边,表示该数组所有元素

–(3)数组和数据表之间可相互转换

•即数据表中数据可以转换为数组数据

•数组数据也可以转换为数据表中的数据

1.定义数组

•数组名的取法和一般的变量名取法相同

•定义数组命令:

DIMENSION 数组名〉(<数值表达式1>[,<数值表达式2>])

[,<数组名>(<数值表达式1>…]

•命令功能:定义一个或多个内存变量数组。

•说明:

–最多可有3600个元素,显示内存时只算一个变量

–数组下标起始值是1

–数组元素隐含的逻辑值为“假”

**二维数组,可用一维下标来存取。这是由于在内存中,二维数组元素是按行列次序排列

–它们每个元素都可看作单独一个内存变量使用,

数组实例

•DIMENSION b(2,3)

• A4

• A(2,1)

• A6

• A(2,3)

•变量:

–专用

•在程序中用DIMENSION建立的数组为专用

–公用

•命令窗口下建立的数组为公用

•在程序中建立公用的数组用PUBLIC命令

•格式为:

PUBLIC〈数组名〉(,[])

•例如: DIMENSIOM A(4),B(2,3)

•建立一维数组A和二维数组B

•二维数组有六个元素:

•分别为

–B(1,1)、B(1,2)、B(1,3)

–B(2,1)、B(2,2)、B(2,3)

数组的赋值

•格式:

– STORE 〈表达式〉 TO 〈数组名〉

〈数组名〉=〈表达式〉

•命令功能:

–将表达式的值赋给数组变量

–上述两个命令是完全等价的

•给数组赋值还可用ACCEPT、INPUT、WAIT语句

数组变量的显示

•命令格式: LIST/DISPLAY MEMORY

•命令功能:

–显示内存变量(数组变量)

–可以用RELEASE和CLEAR MEMORY命令删除掉已定义的数组(整个数组)

–可以用SAVE命令同内存变量一起保存到磁盘内存文件(.MEM)中,需要时用RESTORE命令同内存变量一起从磁盘文件中恢复

Iif()

•根据逻辑表达式的值,返回两个值中的某一个。

•语法:IIF(lExpression, eExpression1, eExpression2)

•参数:lExpression指定要计算的逻辑表达式。

–eExpression1, eExpression2如果 lExpression 计算结果为“真”(.T.),返回 eExpression1;如果 lExpression 为“假”(.F.),则返回 eExpression2。

•返回值类型:字符型、数字型、货币型、日期型或日期时间型

•说明

–该函数也称作 Immediate IF。它计算一个逻辑表达式的值,然后根据计算结果,返回两个表达式中的一个。如果逻辑表达式的值为“真”(.T.),则 IIF( ) 返回第一个表达式;如果逻辑表达式的值为“假”(.F.),则 IIF( ) 返回第二个表达式。

•提示

–对于简单的条件表达式,该函数可以代替 IF ... ENDIF 语句。在按条件指定报表和标签表达式中的字段内容时 IIF( ) 特别有用。IIF( ) 函数比等价语句 IF ... ENDIF 执行速度快得多。

表达式

•表达式:

–是由常数、变量、函数和运算符组成的一个有物理意义的式子

–表达式总有一定的运算结果,即有一个值,所以表达式也是一种数据

•表达式分为(表达式结果):

–数值表达式

–字符表达式

–关系表达式

–逻辑表达式

表达式的输出命令:

•格式:

– ?[[?]<表达式>,[<表达式>]]

•功能:

– 计算表达式的值,并在屏幕或打印机上输出

•例如:

–? 4*6+9

–34

1.数值表达式

•数值表达式:

–是由算术运算符和数值型常数、变量、函数组成。

–运算结果为数值型数据。

–算术运算符为:+ - * / ^ ( )

•优先次序:

–括号、函数、乘方、乘除和加减,同级运算从左到右依次进行

•如:

–3+6/2-EXP(8) LOG(20) 2^5

2.字符表达式

•字符表达式:

–是由字符运算符和字符型常数(即用定界符括起来的字符串)、变量、函数组成

–运算结果是字符型数据

•三种字符串运算:

*完全连接运算

–格式:"〈字符串1〉"+"〈字符串2〉"

–功能:将两个字符串连接为一个字符串。

–例如: "THIS IS "+"A PEN"

THIS IS A PEN

*完全连接是指两个字符串合并,即包括空格在内的字符串中所有字符相加。

不完全连接运算

–格式:"〈字符串1〉"-"〈字符串2〉"

–功能:

•也是将两个字符串连接为一个字符串,但是删去字符串1尾部的空格符

–例如:

–? “首都∶***"-"北京"

–首都:北京***

–注:串1尾部的空格移到串1后

包含运算

•格式:

–〈串1〉$〈串2〉

•功能:

–如串1包含在串2中,表达式的值为真,否则为假

•例如:

–"AB"$"ACBTE"结果为假(.F.)

–"AB"$"ABCDE"结果为真(.T.)

•注:

–包含运算是字符串的关系运算

–关系运算返回的是逻辑值

3.关系表达式

•关系表达式:

–是由关系运算符与字符表达式或数值表达式组成

–结果是一个逻辑值

–关系成立结果取真(.T.),不成立结果取假(.F.)

–关系运算符两边的数据类型要一致,(同类型)

•关系运算符有6种:

<=,<,=, >=,>, <>、#或!=

•注:

–字符的比较是ASCII码值的大小

•空格<0-9

–汉字是按机内码值比较的(拼音)

•例:

–? 113>90

–? "CH"<"CA"

4.逻辑表达式

•逻辑表达式:

–是由逻辑常数、变量和函数用逻辑运算符连接而成

–条件判断满足结果为真(.T.),否则结果为假(.F.)

•逻辑运算符有三种:

.AND. 逻辑与(且)(两都成立才为真)

.OR. 逻辑或(只要有一个成立为真)

.NOT.或! 逻辑非

***逻辑运算符的优先级别为:.NOT. .AND. .OR.

运算符的优先顺序

•表达式中运算符的优先顺序:

–由高到低依次为:算术或字符或日期运算→关系运算→逻辑运算

–相同优先级的运算按从左到右的顺序计算

例如:

–性别="男".AND.职称="副教授"

– (9+3)>.”ab”$”abcde”

表达式例:

算术表达式:结果为数值型。如3+2

字符表达式:结果为字符型。如 ’Good ’+’Morning’

或’Good ’-’Morning’

日期表达式:结果为日期或数值。如DATE()+5 、DATE()-5

或DATE()-{00-08-20}

关系表达式:结果为逻辑型。如”AB”$”ABCD”、”AB”<”BC”

逻辑表达式:结果为逻辑型。如3>2 .AND. .NOT.5>6

说明:

▲在日期型表达式中,两个日期表达式相减,结果为数值,表示两日期之间相差的天数,两日期表达式相加,属非法表达式;一个日期表达式与一个数值表达式相加,结果为日期型表达式,表示从当前日期往后数N天;一个日期表达式与一数值表达式相减,表示从当前日期向前数N天。

▲逻辑表达式包含关系表达式,关系表达式中包含算术表达式。注意,关系表达式与逻辑表达式的结果都为逻辑型。

命令格式

•由两部分组成

–命令动词,表示应执行的操作

–若干个短语,对操作提供某些限制性说明。

•一般格式如下:

命令动词 短语

–如:copy to aa for 性别=“男”

与表有关的命令

•与表有关的命令格式:

•命令动词 [范围] FOR<条件> [FIELDS <字段名表>]

•命令中的FOR、FIELDS是关键字,用户不得随意更改。

•约定:

[ ]表示可选项,不选用系统的默认值

< >表示必选项

<范围>:表示对表记录操作的范围

•ALL 表示全体记录

•NEXT N 当前记录开始后续共计 N 个记录

•RECORD N 特指第 N 号记录。

•REST 从当前记录开始到表尾的所有记录

FOR〈条件〉 选择操作

FIELDS <字段名表> 投影操作

操作释例

•Go 3

•Disp all

•Go 2

•Disp next 2

•Go 3

•Disp rest

•Go 3

•Disp record 5

命令书写的规则

•命令以命令动词,与动词短语的顺序无关

•用空格来分隔各单词短语

•命令的最长是254个字符,用分行符;分行

•命令动词和关键字可以缩写为前四个字符

–如MODIFY STRUCTURE可写为MODI STRU

•不分大小写,可以混合使用

•变量名、字段名和文件名时,应避免与命令动词和关键字同名,以免运行时发生混乱

End

6.2 数据库的操作命令

•常用的操作命令

•包括

–数据库的建立

–打开

–设置

–关闭

–删除

1.创建数据库

–CREATE DATABASE 命令

•命令格式: