Download presentation
Presentation is loading. Please wait.
1
第三章 数据库和表的操作
2
目录 1 5 2 6 3 7 4 数据库的建立 排序和索引 表的建立 统计操作 表的基本操作 多表操作 数据库表的其他属性设置
VFP课程建设组
3
数据库的建立 基本概念 数据库的设计 数据库的建立 打开数据库 VFP课程建设组
4
基本概念 基本概念 数据表(Tabel) 数据库(DataBase Container) 数据库表和自由表
VFP课程建设组
5
数据库的设计 例3-1 设计学生成绩管理系统的数据库 VFP课程建设组
6
数据库的建立 利用系统菜单建立数据库 例3-2 命令格式:CREATE DATABASE [数据库名|?]
说明:数据库名指要创建的数据库的名称;?或不带任何参数则显示创建对话框,要求用户输入数据库名。 例3-2 利用系统菜单建立数据库 例3-3 用命令方式创建一个名为ABC的数据库 VFP课程建设组
7
打开数据库 打开“学生成绩数据库” 例3-4 命令格式: MODIFY DATABASE [数据库名|?]
说明:这种方法实际上是将数据库打开,并启动数据库设计器进行修改设计。 例3-5 使用用命令方式打开数据库设计器 VFP课程建设组
8
表的建立 创建数据库表 在学生成绩数据库中建立数据库表“student.dbf” “字段名”列 例3-6 “类型”列 字段宽度
“NULL”选项 命令格式:CREATE <表名> 例3-6 在学生成绩数据库中建立数据库表“student.dbf” 例3-7 用命令方式创建数据库表course VFP课程建设组
9
表的建立 表记录的输入 建立好“student”表结构后立即输入记录 例3-8 http://Vir.jxstnu.edu.cn/vfp
VFP课程建设组
10
表的建立 自由表与数据库表 创建一个名为“assign”的自由表 例3-9 把“assign”自由表添加到数据库“学生成绩数据库”中
例3-10 把“assign”自由表添加到数据库“学生成绩数据库”中 例3-11 把“assign”数据库表变成自由表 VFP课程建设组
11
表的基本操作 表的基本操作 表的打开与关闭 表的显示 表记录指针的定位 表记录的追加 表的修改 删除记录 表的复制
VFP课程建设组
12
表的基本操作 表的打开与关闭 表的打开 表的关闭 方法一:从项目管理器打开 方法一:在命令窗口输入“USE”命令,可关闭当前打开的表。
方法二:选择“窗口”菜单下的“数据工作期”,在弹出的“数据工作期”窗口选择“关闭”命令 。 表的打开 方法一:从项目管理器打开 方法二:从数据库中打开 方法三:文件菜单的“打开”方式 方法四:命令方式 VFP课程建设组
13
表的打开 从数据库中打开表student.dbf 例3-12 用菜单方式打开表student.dbf 例3-13
VFP课程建设组
14
表的打开 用命令方式打开表student.dbf 例3-14 命令格式:USE 表名[NOUPDATE][EXCLUSIVE|SHARED]
VFP课程建设组
15
表的显示 表结构的显示 在VFP主窗口屏幕上显示表student.dbf的结构
命令格式:LIST|DISPLAY STRUCTURE [TO PRINTER|TO FILE<文件名>] 说明:该命令屏幕上列出指定表的结构,包括记录个数,记录长度及各字段的名称、宽度、类型等。LIST是连续显示,DISPLAY是分屏显示。 例3-15 在VFP主窗口屏幕上显示表student.dbf的结构 VFP课程建设组
16
表的显示 查看表的记录 1、用命令方式在VFP主窗口显示记录 例3-16
命令格式:LIST|DISPLAY [范围][[FIELDS<表达式表>][FOR<条件>][WHILE <条件>] [TO PRINT [PROMPT]|TO FILE<文件>][OFF] 说明: FIELDS 表达式表:指定要显示的字段,各字段间用逗号分开,缺少为全部。表达式表不一定是字段名,可以是字段的组合。 FOR 条件和WHILE 条件:显示满足给定条件的结果。二者的区别见第1章。 范围:可以用第1章介绍的ALL、REST、RECORD N、NEXT N四种范围。 例3-16 在命令窗口中输入教材相应的命令逐条执行,观察结果。 VFP课程建设组
17
表的显示 查看表的记录 2、用命令方式在浏览窗口显示记录
命令格式: BROWSE [LAST][FIELDS <字段表>[FOR <条件>][FREEZE <字段名>][LOCK<数值表达式>] 说明:可选项FREEZE<字段名>用来定义惟一允许修改的字段,其他的字段只能显示不能修改。LOCATE<数值表达式>选项用来定义水平方向翻动屏幕时,屏幕左边连续不参加滚动的字段数。 例3-17 在命令窗口中输入教材相应的命令逐条执行,观察结果 VFP课程建设组
18
表的显示 查看表的记录 3、通过菜单方式在浏览窗口定制要显示的记录
命令格式: BROWSE [LAST][FIELDS <字段表>[FOR <条件>][FREEZE <字段名>][LOCK<数值表达式>] 说明:可选项FREEZE<字段名>用来定义惟一允许修改的字段,其他的字段只能显示不能修改。LOCATE<数值表达式>选项用来定义水平方向翻动屏幕时,屏幕左边连续不参加滚动的字段数。 例3-18 定制表student.dbf显示总分大于等于580分的学生的记录 VFP课程建设组
19
表的显示 查看表的记录 4、定制要显示的字段 定制表student.dbf显示的字段 例3-19
VFP课程建设组
20
表记录指针的定位 数据表中每条记录都有一个记录号,对于打开的表,系统会自动产生一个记录指针,用以指示当前指向哪条记录。所谓记录指针的定位,就是根据需要将移动记录指针到某条记录上,然后对其进行操作。 一、在“浏览”窗口中移动记录指针 二、使用命令移动记录指针 1.绝对定位 命令格式:[GO[TO]] 记录号|BOTTOM|TOP 说明:BOTTOM表示末记录,TOP表示首记录,<记录号>是一个数值表达式,按四舍五入取整数,但是必须保证其值为正数且位于有效的记录数范围之内。 例3-20 打开一个表后,在命令窗口逐条执行教材命令,观察执行结果。 VFP课程建设组
21
表记录指针的定位 2.相对定位 命令格式:SKIP [+|-]n
说明:n为数值表达式,四舍五入取整数。若是正数,向记录号增加的方向移动,若是负数,向记录号减少的方向移动。若省略n,则指记录指针向后移一条。 例3-21 打开表后,在命令窗口逐条执行教材命令,观察执行结果。 VFP课程建设组
22
表记录指针的定位 3.查找定位 命令格式:LOCATE [范围] FOR <条件> [WHILE <条件>]
说明:搜索满足条件的第一个记录。若找到,记录指针指向该记录;若文件中无此记录,搜索后Visual FoxPro主屏幕的状态栏中将显示“已定位范围未尾”,此时记录指针指向文件结束处。如果没有指定范围,则缺省为ALL,查到记录后,要继续往下查找满足<条件>的记录必须用CONTINUE命令。 例3-22 在“student”表中查找总分在540分以上的学生 VFP课程建设组
23
表记录的追加 用菜单方式追加记录 使用命令添加记录 1.使用APPEND命令 命令格式:APPEND [BLANK]
功能:在当前表的末尾添加一个或多个记录。 说明:如果后面跟参数BLANK则在末尾添加一条空记录。如果不选BLANK,则进入全屏幕记录输入窗口。 例3-23 向“student”表中追加5条记录 VFP课程建设组
24
表记录的追加 使用命令添加记录 2.使用INSERT命令 命令格式:INSERT [BLANK][BEFORE]
功能:用于在表文件的指定位置上插入一个新记录。 说明:新记录的插入位置与可选项BEFORE有关。如果不指定BEFORE选项,则在当前记录之后插入一条新记录,反之则将新记录插在当前记录之前;如果不选BLANK选项,则在屏幕上出现编辑窗口等待用户输入新记录,反之则插入一条空记录。 VFP课程建设组
25
表的修改 修改表结构 修改表记录 例3-24 1.使用“浏览”窗口修改表记录 2.用EDIT或CHANGE命令修改记录
命令格式:EDIT|CHANGE [范围] [FOR<条件>][WHILE <条件>] 例3-24 进入表设计器修改表“assign”的结构,要求:在“课程号”和“成绩”之间增加“选课时间”字段,类型为日期型;删除“学分”字段;并修改“课程号”宽度为8。 VFP课程建设组
26
表的修改 修改表记录 3.替换命令 命令格式: REPLACE [范围] <字段1> WITH <表达式1>
[,<字段2> WITH <表达式2>…] [FOR<条件>][WHILE <条件>] 功能:对指定范围内满足条件的各记录,以<表达式1>的值替换<字段名1>的内容,<表达式2>的值替换<字段名2>的内容…(备注型,通用型字段除外)。 VFP课程建设组
27
表的修改 修改表记录 3.替换命令 将assign表中所有学分增加2 例3-25 将course表中所有“公共基础课”的学分增加1
例3-26 将course表中所有“公共基础课”的学分增加1 例3-27 将course表中所有类别为“专业选修课”的改为“专业基础课” VFP课程建设组
28
删除记录 在“浏览”或“编辑”窗口中实现 在“student”表中先逻辑删除第3、8、12、16、20记录,再恢复第12条记录。 例3-28
例3-29 在“student”表中逻辑删除总分小于540分的学生 VFP课程建设组
29
删除记录 使用命令 1.添加删除标记命令 命令格式:DELETE [<范围>][FOR <条件>][WHILE <条件>] 说明:对数据表中指定范围内满足条件的记录加上删除标记。若无可选项,则是对当前记录操作。 2.取消删除标记命令 命令格式:RECALL [<范围>][FOR<条件>][WHILE <条件>] 说明:取消指定记录上的删除标记,若无可选项,则只对当前记录操作。RECALL是DELETE的逆操作。 VFP课程建设组
30
删除记录 使用命令 3.物理删除命令 命令格式:PACK [MEMO][DBF]
4.快速删除命令 命令格式:ZAP [IN 工作区号|表和别名] 说明:该命令可一次删除表中的全部记录,只保留表结构。 例3-30 对student表执行教材所示命令,并观察结果。 VFP课程建设组
31
表的复制 1.单独复制表的结构 命令格式:COPY STRUCTURE TO <文件名> [FIELDS <字段名表>] 功能:仅复制当前表文件的结构,不复制其中的数据。若有可选项FIELDS<字段名表>,则复新表文件的结构只包含其中指明的字段,同时也决定了这些字段在新表文件中的排列次序。 2.复制表 命令格式: COPY TO <文件名>[<范围>][FIELDS<字段名表>][FOR<条件>][WHILE <条件>] [[TYPE]SDF|DELIMITED|XLS][WITH 定界符|BLANK] 功能:将当前表的数据和结构复制到一个指定表中或生成其他格式的文件。具体说明详见教材。 例3-31 将student表中的女生复制到新表girl,将student表中的计算机系的学生记录生成一个文本文件new.txt。 VFP课程建设组
32
数据库表的其他属性设置 数据库表的其 他属性设置 设置数据库表的字段属性 设置表属性 一、记录有效性规则 二、设置触发器 一、显示方式
二、设置字段有效性规则 数据库表的其 他属性设置 设置表属性 一、记录有效性规则 二、设置触发器 VFP课程建设组
33
设置数据库表的字段属性 显示方式 1.格式 2.输入掩码 3.标题 4.为字段输入注释 例3-32
设置“student”表中字段“备注”的标题为“个人简历”,注释为“输入该学生的个人简历”,学号不允许输入字母,前后不能有空格。 VFP课程建设组
34
设置数据库表的字段属性 设置字段有效性规则 1.默认值 2.规则 3.信息 4.为字段输入注释
例3-33 设置“student”表中“学号”的有效性规则是学号是以2008开头的数字。提示信息为“学号不符号要求!”,设置字段“性别”默认值为“男”。 VFP课程建设组
35
设置表的属性 记录有效性规则 设置触发器 例3-34 在“course”表中,设置“课程号”字段必须为5位字符,并且学时数不能超过160。(假定该表中没有做任何字段设置) 例3-35 设置在“student”表中,只能在每月的15日添加记录;只能更新统招生的记录;只能删除数学专业的学生的记录。 VFP课程建设组
36
排序和索引 排序 排序是依据表中某个字段的顺序对当前表的记录重新排列,并将重新排列后的结果保存成为一个新的有序表。 命令格式:
SORT TO <排序文件名> ON <字段名1> [/A|/D][/C][,<字段名2> [/A|/D][/C]…] [<范围>] [FOR <条件1>][WHILE <条件2>] [FIELDS <字段名表> | FIELDS LIKE <通配符>| FIELDS EXCEPT<通配符>],使用说明详见教材。 例3-36 对“assign”中的成绩字段降序排列,成绩相同时按学号升序排列。 VFP课程建设组
37
排序和索引 索引 一、什么是索引 一个表可以建立多个索引,索引实际上是一种逻辑排序,并不改变表中记录的物理存储结构,而且,索引文件只是表文件的附属文件,它不能脱离表文件而单独使用。 二、索引的种类 1.索引文件类型 两类:单索引文件和复合索引文件。 2.索引的种类 VFP中的索引通常分为四种类型:主索引、候选索引、唯一索引、普通索引。 VFP课程建设组
38
排序和索引 索引 三、索引的建立 1.利用表设计器建立索引 在“student”表中,以“学号”为索引表达式建立主索引,索引名为XH。
例3-37 在“student”表中,以“学号”为索引表达式建立主索引,索引名为XH。 例3-38 对“assign”表,以“学号+课程号”为索引表达式建立主索引,以“学号”为索引表达式建立普通索引,并设定“学号”为主控索引。 VFP课程建设组
39
排序和索引 索引 三、索引的建立 2.用命令建立索引 命令格式: INDEX ON <索引表达式> TO <单索引文件名> | TAG <索引标识名> [OF <复合索引文件名>] [FOR <条件>] [COMPACT] [ASCENDING|DESCINDING] [UNIQUE|CANDIDATE][ADDITIVE] 功能:建立索引文件或增加索引标识。使用说明详见教材。 例3-39 用命令方式为表student建立一个单索引文件,按“出生日期”索引;再增加一个结构复合索引,索引表达式为“姓名”,索引标识名为“XM”,索引顺序为降序。 VFP课程建设组
40
排序和索引 索引 四、索引的使用 1.利用菜单方式打开索引文件,设定主控索引
例3-40 【例3-37】中,已对assign表建立了多个索引,要求显示按“学号+课程”降序排列后的结果。 VFP课程建设组
41
排序和索引 索引 四、索引的使用 2.用命令方式打开索引文件并使用 命令格式一: USE 表文件 INDEX 索引文件名表
功能:在表文件打开的同时打开索引文件。 命令格式二: SET INDEX TO [<索引文件名表>][ADDITIVE] 功能:在表文件已打开的情况下,单独打开索引文件,并指定控制索引文件或标识。 说明: 索引文件名表是用逗号分开的相关索引文件名,可以包含.idx文件和.cdx文件,列表中的第一个索引文件是主控索引文件;若缺省所有选项,则关闭当前表的所有索引文件(结构复合索引文件除外),同时取消主控索引。 VFP课程建设组
42
排序和索引 索引 四、索引的使用 命令格式三:
SET ORDER TO [<索引序号>|<单索引文件名>|[TAG]<索引标识>[OF <复合索引文件名>] [ASCENDING |DESCENDING]] 功能:设定主控索引文件或主控索引标识。 例3-41 前已为“Student”表建立结构复合索引文件student.cdx,其中有两个索引项“xm”、“xh”,还建立了单索引文件csrq.idx,要求分别使用这些显示表记录。 VFP课程建设组
43
排序和索引 索引 四、索引的使用 3.使用索引查找记录 命令格式一:SEEK <表达式>
功能:将记录指针定位到“索引关键字值=<表达式>”的第一条记录。 命令格式二:find <字符串表达式> 功能:将记录指针定位到“索引关键字值=<字符串表达式>”的第一条记录。 说明:该命令是为向后提供兼容性,可用seek命令代替,并且该命令只支持索引表达式为字符串类型。 例3-42 按课程号字段对“assign”表建立索引,然后进行查找。 VFP课程建设组
44
排序和索引 索引 四、索引的使用 4.关闭索引的命令 命令格式一:CLOSE INDEXS 命令格式二:SET INDEX TO
功能:关闭当前工作区内所有打开的索引文件(结构复合索引文件除外)。 五、删除索引 1.在“表设计器”中删除索引 在“表计器”窗口的“索引”选项卡中,选中某个需要删除的索引,单击“删除”按钮,可删除索引。 2.用命令删除索引 命令格式一:DELETE TAG ALL|索引标识名表 功能:删除全部打开的复合索引文件中的所有索引标识或指定索引。 命令格式二:DELETE FILE <索引文件名表> 功能:删除单索引文件。 VFP课程建设组
45
统计操作 计数 命令格式:COUNT[<范围>][FOR <条件>][WHILE <条件>][TO <内存变量>] 功能:计算指定范围内满足条件的记录数,并将结果存于指定的内存变量。 说明: [TO <内存变量>]:指定结果存放的内存变量名,若该变量不存在,系统会自动创建。 若设置了命令SET DELETED ON,则作了删除标记的记录不被计数。 例3-43 统计“assign”表中成绩超过85分的学生人数 VFP课程建设组
46
统计操作 求和 命令格式:SUM [<数值型字段表达式表>] [<范围>][FOR <条件>][WHILE <条件>] [TO <内存变量表> | ARRAY <数组>] 功能:在打开的表中,对数值型字段表达式求和。 说明: 1.[<数值型字段表达式表>]:对指定表达式求和,省略该选项,则对所有数值型字段求和。 2.[TO <内存变量表> | ARRAY <数组>]:指定结果存放的内存变量名表或数组名,若该变量或数组不存在,系统会自动创建。若数组存在但太小,系统会自动增加数组大小。 VFP课程建设组
47
统计操作 求平均值 格式:AVERAGE[<数值表达式表>]
[<范围>][FOR <条件>][WHILE <条件>] [TO <内存变量表> | ARRAY<数组>] 功能:在打开的表中,对数值表达式求平均值。 例3-44 求“assign”表中成绩的总和和平均值 VFP课程建设组
48
统计操作 计算 格式:CALCULATE <表达式表>
[<范围>][FOR <条件>][WHILE <条件>] [TO <内存变量表> | ARRAY<数组>] 功能:在打开的表中,对指定表达式进行金融和统计操作。 说明: 1.有null值的记录不包含在CALCULATE操作中; 2.表达式中可以包含下列函数的任意组合: AVG(<数值表达式>):计算平均值; CNT():返回表中记录数; MAX(<表达式>):返回最大值; MIN(<表达式>):返回最小值; SUM(<数值表达式>):求和; NPV(<数值表达式1>,<数值表达式2>,<数值表达式3>):计算净现值; STD(<数值表达式> ):计算标准偏差; VAR(<数值表达式> ):计算方差。 VFP课程建设组
49
统计操作 计算 汇总 格式:TOTAL TO <表文件名> ON <关键字段> [FIELDS <数值型字段表>] [<范围>][FOR <条件>][WHILE <条件>] 功能:在打开的表中,按关键字分类,汇总计算,将结果存入新文件中。 说明详见教材 例3-45 统计“assign”表中成绩超过85分的学生人数、平均成绩 、最高成绩、最低成绩、成绩总和。 例3-46 统计“assign”表中每个学生的总成绩。 VFP课程建设组
50
多表操作 工作区的概念 工作区实质上是指每个打开的表所占用的内存空间。Visual FoxPro提供了32767个工作区,每个工作区只能打开一个表文件,各表在各自的工作区中被操作。同一时刻只能有一个工作区是处于活动的,该工作区被称为“当前工作区”,即最后一个被选中的工作区。 一、工作区号和别名 VFP中的每个工作区都有一个编号,称为工作区号,编号从1到32767。系统默认编号为1的工作区为当前工作区。 别名是给工作区取的除编号以外的名字。VFP为1~10号工作区指定了别名,分别用A~J单个字母来表示。在一个工作区打开数据表时的同时也可以给这个工作区定义一个别名。 命令格式:USE <表名> [ALIAS <别名>][IN <工作区号>] VFP课程建设组
51
多表操作 二、选择工作区命令 命令格式:SELECT <工作区号>|<别名> 功能:选择工作区,用于打开表文件。
在进行多表操作时靠别名来区别不同工作区上的表。在当前工作区上使用其它工作区的字段时,必须用别名标识它,格式为:别名.字段名或别名->字段名。 例3-47 分别在1、2、3区打开student表、course表、assign表,并显示当前表记录。 VFP课程建设组
52
多表操作 建立表间关系 一、永久关系 永久关系是在数据库设计时建立的,程序无法改变这种关联,因此称为永久关系。 二、临时关系
在对多个表操作时,有时我们希望两个表的记录指针同时移动,这时就可以建立临时关系。临时关系在数据关闭后就消失了,下次打开数据表后要使用必须重新建立。 例3-48 在学生成绩数据库中,对学生信息表“student”和成绩表“assign”建立一对多关系。其中student为父表,assign为子表。 VFP课程建设组
53
多表操作 建立表间关系 二、临时关系 建立“student”、 “assign”两表之间的临时关系,假定两个表的相关索引已经建立。
方法一:用数据工作期窗口建立临时关系。 例3-49 建立“student”、 “assign”两表之间的临时关系,假定两个表的相关索引已经建立。 VFP课程建设组
54
多表操作 建立表间关系 <索引表达式>用来指定父文件的索引表达式,其值将与子文件中的主控索引关键字对应;
二、临时关系 方法一:用数据工作期窗口建立临时关系。 方法二:用命令方式建立临时关系 命令格式: SET RELATION TO [<索引表达式> INTO <工作区号>|<子表别名>[ADDITIVE] 功能:在两个打开的表之间建立关系。 说明: <索引表达式>用来指定父文件的索引表达式,其值将与子文件中的主控索引关键字对应; <工作区号>|<子表别名>用来指定子表或其所在的工作区。 ADDITIVE:建立新关系时不取消以前建立的关系; 缺省可选项,则解除当前工作区表文件建立的所有关系。 VFP课程建设组
55
多表操作 设置参照完整性 参照完整性是关系模型的一种完整性约束条件,用于保证在已建立关系的表间记录的一致性。
参照完整性规则可设置用于控制表中记录的插入、删除和修改的规则,分别有三种选项:级联、限制和忽略。 例3-50 在“学生成绩数据库”中,已对“student”和“assign”表建立了一对多关系,设置这两个表之间的参照完整性规则,其中更新规则、删除规则都为“级联”,插入规则都为“限制”。 VFP课程建设组
56
Thank You
Similar presentations