第四章 Visual FoxPro数据库及其操作.docx
- 文档编号:3731767
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:23
- 大小:34.21KB
第四章 Visual FoxPro数据库及其操作.docx
《第四章 Visual FoxPro数据库及其操作.docx》由会员分享,可在线阅读,更多相关《第四章 Visual FoxPro数据库及其操作.docx(23页珍藏版)》请在冰豆网上搜索。
第四章VisualFoxPro数据库及其操作
第四章 *VisualFoxPro数据库及其操作
[教学重点]
1、数据库和表的建立、修改与有效性检验:
1)表结构的建立与修改。
2)表记录的浏览、增加、删除与修改。
3)创建数据库,向数据库添加或从数据库删除表。
4)设定字段级规则和记录级规则。
5)表的索引:
主索引、候选索引、普通索引、唯一索引。
2、多表操作:
1.选择工作区。
2.建立表之间的关联:
一对一的关联;一对多的关联。
3.设置参照完整性。
4.表的联接JOIN:
内部联接。
外部联接:
左联接、右联接、完全联接。
5.表间临时关联。
[教学内容]
4.1VisualFoxPro数据库及其建立
4.1.1基本概念
表:
扩展名为dbf文件。
数据库:
扩展名为dbc的文件。
备注文件(FPT)、索引文件(dcx)在建立数据库时会自动建立。
4.1.2建立数据库
方法:
1)在项目管理器中建立数据库;
2)通过“新建”对话框建立数据库;
3)使用命令交互建立数据库。
1、在项目管理器中建立数据库
项目管理器→“数据”→“数据库”→[新建]→“新建数据库”……
2、通过“新建”对话框建立数据库
[常用]→[新建]→“新建”对话框→“数据库”→[新建文件]……
3、使用命令交互建立数据库
命令为:
CREATEDATABASE[数据库名称|?
]
功能:
建立数据库,并使其处于打开状态,不打开数据库设计器。
说明:
省略数据库名称或用?
,都会以创建对话框请用户输入数据库名称。
4、SETSAFETYOFF:
不出现警告对话框直接对相同文件进行覆盖。
SETSAFETYON:
以警告对话框的形式让用户确认是否对相同文件进行覆盖。
5、数据库一经建立,就会产生同名的三个文件:
基本文件DBC、相关的数据库备份文件DCT、相关的索引文件DCX。
4.1.3使用数据库
打开数据库的方法:
1、在项目管理器中打开数据库:
即在项目管理器中选择了相应的数据库即已打开它。
2、通过“打开”对话框打开数据库:
步骤基本与建立数据库一致。
3、使用命令打开数据库:
格式:
OPENDATABASE[文件名|?
][EXCLUSIVE|SHARED][NOUPDATE][VALIDATE]
功能:
打开数据库。
说明:
1)如省略文件名或用?
,则显示“打开”对话框。
2)EXCLUSIVE:
以独占方式打开数据库,即不允许其他用户在同一时刻使用该数据库。
3)SHARED:
以共享方式打开数据库,即不独占。
4)默认的打开方式由SETEXCLUSIVEON|OFF来确定,默认为ON。
5)NOUPDATE:
按只读方式打开数据库,即不允许对数据库进行修改。
(实际无作用,要在用USE命令打开表时用NOUPDATE才使数据库中的表为只读的。
)默认可修改。
6)VALIDATE:
指定VF检查在数据库中引用的对象是否合法。
7)数据库打开时,其所包含的表都可用,但这些表不会自动打开,需用USE命令打开。
8)用USE命令打开一个表时,VF先到当前数据库中找该表,如找不到,则到数据库外继续查找并打开指定表。
即打开一个表并不一定要打开数据库。
9)可同时打开多个数据库,但只有一个当前数据库。
指定当前数据库
命令是:
SETDATABASETO[数据库名称]
4.1.4修改数据库
修改数据库是打开数据库设计器,其操作方法有:
1、从项目管理器中打开数据库设计器;
操作步骤:
1)展开项目管理器中的数据库分支;
2)选择要修改的数据库;
3)单击[修改]。
2、通过“打开”对话框打开数据库设计器:
打开数据库会自动打开数据库设计器;
3、使用命令打开数据库设计器;
格式:
MODIFYDATABASE[数据库名|?
][NOWAIT][NOEDIT]
说明:
Ø如省略数据库名或使用?
,则打开“打开”对话框;
ØNOWAIT:
(该项只在程序中使用)在数据库设计器打开后程序继续执行MODIDATA命令后的语句;若省略该项,则在打开数据库设计器后,应用程序暂停,直到数据库设计器关闭后程序再继续执行。
ØNOEDIT:
只打开数据库设计器,却禁止对数据库进行修改。
4.1.5删除数据库
方法有二种:
1、从项目管理器中删除数据库;
步骤:
1)在项目管理器中选择要删除的数据库;
2)按[移去]按钮;
其中:
移去——从项目管理器中删除数据库,但并不物理删除该数据库文件;
删除——从项目管理器及磁盘上均删除该数据库文件。
取消——本次操作取消。
注:
VisualFoxPro的数据库文件同项目文件相似,即并不真正含有数据库表或其他数据库对象,只是在数据库文件中登录了相关的条目,表、视图或其他数据库对象是独立存盘的。
所以对数据库的“移去”和“删除”操作,都没有涉及到其中的对象。
要在删除数据库的同时也删除表等对象,需要使用命令:
格式:
DELETEDATABASE[数据库名|?
][DELETETABLES][RECYCLE]
功能:
删除数据库的同时也删除其中的对象。
说明:
1)要删除的数据库必须是关闭的。
2)若省略数据库名或用?
,则会打开删除对话框以选择要删除数据库文件。
3)DELETETABLES:
在删除数据库文件的同时从磁盘上删除该数据库所含表等。
4)RECYCLE:
将删除的数据库文件和表文件等放入回收站。
4.2建立数据库表
4.2.1在数据库中建立表
方法:
1、使用数据库设计器建立表
步骤:
1)创建数据库或打开已有的数据库,自动弹出数据库设计器;
2)“数据库”或数据库设计器的对象快捷菜单“新建表”;
3)选择表[新建表];
4)设置创建对话框;
5)设置字段和记录。
注:
下面解释字段的基本内容和概念
1)字段名:
Ø自由表字段名最长为10个字符。
Ø数据库表字段名最长为128个字符。
Ø字段名必须以汉字或字母开头,由汉字、字母、数字和下划线组成。
Ø字段名中不能包含空格。
2)字段类型和宽度:
Ø字符型:
可以是字母、数字等各种字符型文本。
Ø数值型:
整数或小数。
Ø货币型:
货币单位。
Ø浮点型:
类似于“数值型”,其长度在表中最长可达20位。
主要是为了与以前版本兼容。
Ø双精度型:
用于要求精度很高的数据。
取代数值型,采用固定存储长度的浮点数形式,小数点位置由输入的数据值来决定。
Ø整型:
不带小数点的数值类型。
Ø日期型:
由年、月、日构成的数据类型。
Ø日期时间型:
由年、月、日、时、分、秒构成的数据类型。
Ø逻辑型:
值为.T.(真)或.F.(假)。
Ø备注型:
不定长的字符型文本,存放内容在.fpt文件中的位置。
其中的具体数据信息存储在主文件名与表文件的主文件名相同、扩展名为FPT的备注文件中。
Ø通用型:
用于标记电子表格、文档、图片等OLE对象。
(对象的具体内容由其他应用软件建立)
Ø字符型(二进制):
同“字符型”,但当代码页更改时字符值不变。
Ø备注型(二进制):
同“备注型”,但当代码页更改时字符值不变。
空值:
就是缺值或还没有确定值。
空值与空字符串、数值0意义不同。
作为关键字的字段不允许为空值,字段有NULL项,表示是否允许字段为空值。
一个字段是否允许为空值与实际应用有关。
3)数据库表的字段属性
1、字段有效性组框:
可以定义字段的有效性规则、违反规则时的提示信息和字段的默认值。
规则:
指定字段数据的有效范围。
满足该条件,数据才能放入该字段。
向该字段中输入数据,输入的数据格式要受“输入掩码”的控制,同时还要满足字段“规则”中指定的条件。
信息:
当企图向字段输入不符合“规则”的数据时,显示给用户的提示内容。
默认值:
在向表中添加记录而未向该字段输入数据前,系统向该字段预置的值。
如:
实验题中一个字段名为出生日期,在添加记录时,可预置一个当前月的数据。
2、显示组框:
可定义字段显示的格式、输入的掩码和字段的标题。
格式:
实质是一个输出掩码,控制字段在表单、报表、浏览窗口等界面中显示的样式。
(要用字段的显示属性格式字符来设置)
输入掩码:
是字段的一种属性,限制或控制用户输入的格式。
(要用字段的显示属性掩码字符设置)
标题:
字段显示时的标题,如不指定标题则显示字段名。
一般情况下,用代号(标题的内容比字段名字符更少)作为字段名编程可少输汉字;而在浏览表和选择字段等功能时给字段加标题(标题的内容比字段名字符更多)可让看到的内容更直观。
3、字段注释:
解释性语句,便于日后或其他人对数据库进行维护。
4)数据库表的记录属性:
1、记录有效性
规则:
指定数据记录的有效条件。
满足该条件,数据才能从当前记录移出。
信息:
当不符合记录有效性“规则”时,显示给用户的提示内容。
2、触发器
触发器是系统提供的记录级事件。
事件触发时可执行的条件表达式或用户自定义函数在相应的触发器框中设定。
函数返回值为.t.,操作被认可,否则操作将被拒绝。
用户自定义函数可放在数据库所在的在存储过程中。
触发器在记录的验证规则之后运行,在采用缓冲更新时只有在发布TABLEUPDATE()命令后才运行。
即使记录的验证规则通过,仍要看触发器的条件。
记录验证时只能使用当前记录中的信息,而触发器可跳到当前记录外。
插入触发器:
当向该表插入或追加记录时触发,执行插入触发器框中指定的条件表达式或用户自定义函数。
更新触发器:
当修改表记录时产生。
执行插入触发器框中指定的条件表达式或用户自定义函数。
删除触发器:
当删除表记录时产生。
执行插入触发器框中指定的条件表达式或用户自定义函数。
2、使用命令建立表:
步骤:
1)打开数据库(用opendatabase);(此步骤如不执行,建立的表将是自由表)
2)用CREATE命令建立表;
3)在表设计器中完成表的建立。
新建的表是打开的;把表关闭后再打开,要用USE[表文件名]命令(省略表文件名,则USE为关闭当前表)。
4.2.2修改表结构
1、修改表结构包括:
1)增加字段:
选择新字段位置[插入]定义该字段。
在表中所有字段后增加新字段,见书。
2)删除已有的字段:
选择要删字段[删除]
3)修改字段名、字段类型、字段宽度;
4)建立、修改、删除索引;
5)建立、修改、删除有效性规则;
2、修改方法:
1)在数据库设计器中修改:
表的对象快捷菜单→“修改”;
2)用命令修改:
USE该表文件名→MODIFYSTRUCTURE,打开表设计器→具体改。
4.3表的基本操作
4.3.1使用浏览器操作表
1、打开浏览器的方法:
1)有项目管理器中选择要操作的表→[浏览];
2)在数据库设计器中选择表,“数据库”→“浏览”或对象快捷菜单→“浏览”;
3)先用USE打开要操作的表,再于命令窗口中用BROWSE命令。
2、浏览器打开后,可以做如下操作:
1)查看浏览记录:
见书P92页。
2)添加新记录:
按Ctrl+Y快捷键,或者“表”→“追加新记录”;再添入数据。
3)修改记录:
选定要修改的记录的字段值,直接输入新数据。
4)删除记录:
逻辑删除:
给记录加删除标记。
Ctrl+T设置或取消删除标记,或“表”→“切换删除标记”,变化见P92页图4.13所示。
物理删除:
将带有删除标记的记录从表中真正删除。
“表”→“彻底删除”→“是”。
3、关闭浏览器:
即关闭浏览窗口。
4.3.2增加记录的命令
1、APPEND命令
格式:
APPEND[BLANK]
功能:
在表的尾部增加(空白)记录。
说明:
BLANK若有,则增加的是一条空白记录;若无,则立刻以交互方式输入多个新的记录值。
2、INSERT命令
格式:
INSERT[BEFORE][BLANK]
功能:
在表的当前记录位置之前/后插入新的记录。
说明:
1)BEFORE:
若有,则在当前记录之前插入新记录;否则在当前记录之后插入新记录。
2)BLANK:
若有,则插入空白记录;无则插入多条新记录并立刻交互式输入该记录值。
注:
如表已建立主索引或候选索引,则不能用APPE或INSE命令插入记录,必须用SQL的INSERT命令插入记录。
即要使INSERT起以上作用,则要把所有索引文件均关闭。
(当有索引打开的时候,以逻辑顺序排列插入的记录)
4.3.3删除记录的命令
1、设置删除标记的命令
格式:
DELETE[范围][FOR条件表达式]
功能:
给指定范围内满足条件的记录设置删除标记。
说明:
若无范围及FOR条件,则只逻辑删除当前记录;若有,则逻辑删除指定范围内使该表达式为真的所有记录。
范围:
指定参加操作的记录范围。
形式有四种:
①ALL:
全部记录;
②NEXTN:
从当前记录开始的N个记录(包括当前记录在内);
③REST:
从当前记录开始到最后一个记录(包括当前记录在内);
④RECORDN:
记录号为N的一个记录。
2、恢复记录的命令
格式:
RECALL[范围][FOR条件表达式]
功能:
给指定的已加删除标记的记录撤消删除标记。
说明:
若无范围及FOR条件,则只恢复当前记录的删除标记;若有,则在指定范围内使该表达式为真的所有记录均恢复删除标记。
该命令也受索引影响,即有索引文件打开时,所删记录是按逻辑顺序来选的。
记录删除测试函数
格式:
delete(<表的别名/工作区号>)
例如:
copytotsda2fordelete()
表文件记录数测试函数:
格式:
RECCOUNT([N型表达式])
功能:
返回值是第“N型表达式”号工作区上已打开的表中目前的记录总数。
函数值为N型。
说明:
①省略“N型表达式”,指定当前工作区;
②若指定工作区上没有打开的表文件,则返回0。
该函数统计的记录数不受DELE、SETDELEON影响。
(而COUNT命令会受影响)
RECSIZE(数值表达式):
返回工作区的记录长度(数值表达式为工作区号)
FCOUNT(数值表达式):
返回工作区的字段总数(数值表达式为工作区号)
3、物理删除有删除标记的记录
格式:
PACK
功能:
从当前表中删除所有带删除标记的记录,且不可再恢复。
4、物理删除表中的全部记录
格式:
ZAP
功能:
将当前表中的全部记录均物理删除,不管是否有删除标记。
4.3.4修改记录的命令
1、用EDIT或CHANGE命令交互式修改
见书P94页。
2、用REPLACE命令直接修改
格式:
REPLACE字段名1WITH表达式1[,字段名2WITH表达式2]…[FOR条件][范围]
功能:
将指定范围内满足条件的记录的多个字段值用对应的表达式的值进行替换。
说明:
不用范围及FOR条件,则只修改当前记录;否则修改所有指定范围内使条件为真的记录的指定字段值。
4.3.5显示记录的命令
格式:
LIST/DISPLAY[范围][FOR条件][WHILE条件][[FIELDS]表达式表][OFF][TOPRINT][PROMPT]|TOFILE文件名]
功能:
显示指定记录的指定字段值。
说明:
1、若范围及FOR条件项均省略,对LIST默认为ALL,对DISP默认为当前记录。
例1:
LIST例2:
GO2
DISPRECO3LISTNEXT4
DISPNEXT3LISTRECO2
DISPRESTLISTREST
Ø注意每条命令执行完后记录指针的位置。
2、表达式表:
是用逗号隔开的字段名表达式列表,省略则显示全部字段。
3、FOR表达式:
是条件表达式,若有,则显示满足条件的记录。
若无,对LIST来说显示全部记录;对DISPLAY来说只显示当前记录。
4、TOPRINTER:
有则将结果即显示又打印;无则只显示。
5、TOFILE:
将结果输出到文件,默认文件名为.TXT。
例:
设有一学生成绩表文件,其中有字段:
姓名(C,8)、数学(N,3)、语文(N,3)、英语(N,3)、及格(L,1)
1、显示当前表中所有姓李的记录。
Listfor姓名=’李’
2、显示当前表中名字中含有“杨”字的记录。
Listfor“杨”$姓名
3、显示当前表中数学成绩在75分~85分之间的记录。
Listfor数学>=75.and.数学<=85
注意:
以下写法是错误的:
Displayfor800<=工资>=1200
Displayfor工资>=800.and.<=1200
4、显示当前表中三科成绩至少有一科不及格的记录。
Listfor数学<60.or.语文<60.or.英语>=60
5、显示当前表中所有成绩及格者的姓名。
List姓名for数学>=60.and.语文>=60.and.英语>=60
6、将每条记录的“及格”字段值正确填入,并显示出来。
Repl及格with.t.for数学>=60.and.语文>=60.and.英语>=60
Listfor及格或Listfor及格=.t.
Repl及格with.f.for数学<60.or.语文<60.or.英语<60
Listfornot及格或Listfor及格=.f.
4.3.6查询定位命令
1、用GOTO命令直接定位
格式:
GO记录号|TOP|BOTTOM
功能:
指针直接按记录号定位。
说明:
1)记录号:
具体可由数值型函数、数值表达式或数值型变量组成,表示记录号。
2)TOP:
指第一条记录。
3)BOTTOM:
最后一条记录。
2、SKIP命令
格式:
SKIP[数值型表达式]
功能:
从当前记录处开始移动N次指针(不包括当前记录在内)。
说明:
1)数值型表达式:
为正整数N时,表示向表尾方向移动N次指针。
为负整数时,表示向表头方向移动N次指针。
若省略,则表示向表尾方向移动一次指针。
2)文件头:
文件的开始标志,第一条记录再SKIP–1,不是TOP。
3)文件尾:
文件的结束标记,最后一条记录再SKIP+1,不是BOTTOM
涉及到的函数有:
(1)、测试当前记录号函数:
格式:
RECNO([N型表达式])
功能:
返回值是第“N型表达式”号工作区上已打开的表文件中当前记录的记录号(整数值)。
函数值为N型。
说明:
①省略“N型表达式”,指定当前工作区;
②若指定工作区上没有打开的表文件,则返回0;
③若当前记录指向文件头(BOF()函数值为.T.),则返回值为1;若当前记录指向文件尾(EOF()函数值为.T.),则返回值为记录总数+1。
例:
USEA:
\考生成绩
?
RECNO()&&显示结果为1
GO3
?
RECNO()&&显示结果为3
?
reccount()
10
go5
listrest
?
recno()
11
(2)、测试表文件头函数:
格式:
BOF([N型表达式])
功能:
当第“N型表达式”号工作区上已打开的表文件当前记录已指向第一个记录的前面(称为文件头,是无效记录),返回值是.T.;否则是.F.。
函数值为L型。
说明:
①省略“N型表达式”,指定当前工作区;
②若指定工作区上没有打开的表文件,则返回.F.。
例:
USEA:
\考生成绩
?
BOF(),RECNO()&&显示结果为.F.1
SKIP-1
?
BOF(),RECNO()&&显示结果为.T.1
(3)、测试表文件尾函数:
格式:
EOF([N型表达式])
功能:
当第“N型表达式”号工作区上已打开的表文件当前记录已指向最后一个记录的后面(称为文件尾,是无效记录),返回值是.T.;否则是.F.。
函数值为L型。
说明:
①省略“N型表达式”,指定当前工作区;
②若指定工作区上没有打开的表文件,则返回.F.。
例:
USEA:
\考生成绩
GOBOTTOM
?
EOF(),RECNO()&&显示结果为.F.8
SKIP
?
EOF(),RECNO()&&显示结果为.T.9
注意:
1)对于空记录表,Bof()和Eof()都为逻辑真。
2)记录号永远都是从1到总记录数+1
3、用LOCATE命令定位
格式:
LOCATE[范围][FOR条件]
功能:
在指定范围内查找满足条件的第一条记录,若找到,则当前记录定位在该记录上,否则当前记录定位在(无条件时,定位在范围的最后一条记录上)文件尾。
说明:
①Locate命令找到记录后并未显示结果,必须用display命令显示,但不能用list命令;
②寻找第二个符合条件的记录不能再用Locate命令,即在同范围条件内多次使用本命令,每次只能将记录指针定位到同一条记录。
继续查找命令
格式:
CONTINUE
功能:
将记录指针指向当前记录后且满足指定范围、条件的下一条记录。
说明:
Continue只能用于和Locate命令配合使用,不能和索引查询的命令Seek和Find一起使用。
4.4索引
4.4.1基本概念
索引:
由一个指向.dbf文件记录的指针构成的文件。
这些指针逻辑上按照索引关键字值进行排序。
索引并不改变表中所存储数据的顺序,它只改变了VisualFoxPro读取每条记录的顺序,以便加速检索的速度。
(但索引会降低插入、删除和修改等操作的速度)
表中记录在表文件中的存储顺序称为物理顺序,记录号就是物理顺序号,即第几号记录所指的顺序;而索引后改变了记录间的物理排列顺序,此时记录间是按逻辑顺序来排列的,即为第几条记录所指的顺序。
索引的分类:
1、主索引
主索引:
在指定字段或表达式中不允许出现重复值的索引,保证了字段值的唯一性。
主关键字:
建立主索引的字段就是主关键字。
一个表只能创建一个主索引,且只有数据库表才可建立主索引。
2、候选索引
候选索引:
与主索引同特性。
一个表中可建立多个候选索引,数据库表和自由表均可建立候选索引。
3、惟一索引
惟一索引:
作为惟一索引的索引关键字,其表中记录的值可重复,但在索引文件中仅保存重复值记录的第一个。
一个表中可以建立多个唯一索引,数据库表和自由表均可建立候选索引。
4、普通索引
普通索引:
作为普通索引的索引关键字,其表中记录的值可重复。
一个表中可建立多个普通索引,数据库表和自由表均可建立候选索引。
5、四种索引的异同点:
见书P97页。
通常,主索引用于主关键字字段;候选索引用于那些不作为主关键字但字段值又必须惟一的字段;普通索引用于一般地提高查询速度;惟一索引用于一些特殊的程序设计。
4.4.2在表设计器中建立索引
1、单项索引
建立步骤:
“表设计器”→“字段”→“索引”
建立索引后,更改索引类型:
“表设计器”→“索引”→“类型”
2、复合字段索引
复合字段索引:
在多个字段上的索引。
建立方法:
“表设计器”→“索引”→“插入”,设置增加字段的索引内容。
3、删除索引
“表设计器”→“索引”→“选择索引”→[删除]
4.4.3用命令建立索引
格式:
INDEXON关键字表达式tag结构复合索引标识名[o
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第四章 Visual FoxPro数据库及其操作 第四 FoxPro 数据库 及其 操作