vfp60第二章数据库和表.docx
- 文档编号:14937799
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:23
- 大小:51.14KB
vfp60第二章数据库和表.docx
《vfp60第二章数据库和表.docx》由会员分享,可在线阅读,更多相关《vfp60第二章数据库和表.docx(23页珍藏版)》请在冰点文库上搜索。
vfp60第二章数据库和表
第二章.数据库和表
必备的知识点
1.二维表的每一列就是一字段(属性),每一行叫做一条记录(元组)。
姓名
性别
入学成绩
班级
张三
男
465.5
计算机1班
李勇
男
525.5
电子1班
赵君
女
528.5
电子1班
张华
女
495.0
计算机1班
一张表中最多255个字段,10亿条记录、
2.字段的属性、
每个字段有4个属性:
字段名,字段类型,字段宽度,小数位数
字段名的命名:
只能包含字母,数字,下划线,汉字;不能含有空格,不能以数字开头,不能以下划线开头。
字段变量的命名和内存变量的命名区别:
内存变量可以下划线开头。
字段类型:
字段类型
类型代码
说明
字符型
C
存储字符型数据,最大宽度254个字节,127个汉字
货币型
Y
存储货币型数据
数值型
N
最大宽度20位
浮点型
F
最大宽度20位
日期型
D
固定宽度是8个字节
日期时间型
T
固定宽度是8个字节
双精度型
B
固定宽度是8个字节
整型
I
存储不带小数的整数,固定为4个字节
逻辑型
L
固定为1个字节
备注型
M
存储不定长的字符型数据,长度固定为4个字节
通用型
G
存储OLE对象,固定为4个字节
二进制的字符型
二进制的备注型
考点:
字符型字段最大的宽度是254个字节,127个汉字;日期型的宽度是8个字节,备注型是4个字节,备注型主要用于奖惩情况,个人简介,如果存储OLE对象,照片图片数据则应该设置为通用型。
(一)表的扩展名.dbf,表的备注文件的扩展名.fpt
一个表如果有备注型字段,那么VFP会自动产生一个与表同名的备注文件。
不管备注型字段有多少个,一个表只有一个备注文件。
填写备注字段的内容快捷键:
Ctrl+PageDn或者双击
请问xsda表的备注文件名是xsda.fpt。
(二)表分为两个部分表结构和表记录(数据)。
(三)表分为数据库表和自由表
数据库表:
属于某个数据库的表。
自由表:
不属于任何数据库的表。
在某一时刻,一张数据库表只能属于一个数据库。
数据库表和自由表可以相互转换
数据库表和自由表的区别:
1.数据库表支持长字段名(128个字符,64个汉字)。
自由表的字段名不超过10个字符。
2.只有数据库表才能设置字段的有效性。
3.只有数据库表才能设置主索引。
★创建表的命令
create表名
如:
created:
\xs\xsda
打开表设计器创建表。
SQL命令创建表(无需打开表设计器)
createtabled:
\xsda(姓名C(8),性别C
(2),出生日期D,入学成绩N(5,1),住校否L,照片G)
★打开表的命令
used:
\abcin0aliasbmnoupdateagain
in0在最小的暂未使用的工作区打开
aliasbm为打开的表到别名
noupdate不允许修改表的数据,指定为只读
again再一次打开已经在其它工作区打开的表
exclusive独占方式。
默认的方式
shared共享
★指定当前工作区
select<工作区号|别名>
select5&&选择5号工作区为当前工作区。
usexsdain1
usexscjin2aliascj
select2(或者selectcj)
补充:
可以使用alias指定表的别名,如果没有使用alias指定别名,表的名字就是别名。
工作区的别名
工作区
1
2
3
4
5
6
7
8
9
10
别名
A
B
C
D
E
F
G
H
I
J
前10个工作区的别名分别是A~J
函数:
select()
函数作用:
返回当前工作区区号;
?
select()
当前工作区:
正在操作的工作区为当前工作区。
启动VFP时,1号工作区为默认的当前工作区。
当前表:
当前工作区中打开的表
当前记录:
记录指针指向的记录为当前记录。
打开表时,默认的当前记录为1号记录
补充:
一个工作区只能打开一个表,如果在同一个工作区打开第二个表,VFP会自动关闭先前打开的表。
★关闭表
举例说明:
1.use&&关闭当前表
2.usein5&&关闭5号工作区的表
3.useinC&&关闭3号工作区的表
4.useincj&&关闭别名是cj的表
usein5等同于:
select5
use
★显示表的结构
displaystructure&&分屏显示当前表的结构
结构中总计的宽度=各字段宽度的总和+1
以xsda表为例,表中的姓名无论是“王小阳”还是”张华”,姓名字段的宽度都是定义时的8位宽度。
liststructure&&不间断显示(一次性显示)当前表的结构
display
|liststructuretofiled:
\abc
将显示的结果输出到指定的文本文件
display|liststructuretoprinter
将显示的结果输出到指定的打印机
display|liststructurein2
显示2号工作区中表的结构
★修改表的结构
命令:
modifystructure&&打开表设计器,修改当前表的结构。
菜单:
显示/表设计器
修改表结构时,修改数据类型,修改宽度,当宽度变小时,数据会丢失。
所以在修改表结构前要对表文件进行备份,以免丢失数据。
★复制数据新建表
copyto<表文件名>【fields字段列表】【for条件】
复制当前表的数据,创建一个新表。
举例
usexsda
copytod:
\xsda2
将当前表xsda复制备份到D:
\,表名为xsda2
例题1:
将xsda表中超过430分的学生复制到新表D:
\xsda2中
usexsda
copytod:
\xsda2for入学成绩>430
例题2:
将xsda表中住校的学生复制到新表D:
\xsda3中,新表只要姓名,性别,住校否。
usexsda
copytod:
\xsda3fields姓名,性别,住校否for住校否=.T.
★复制表的结构
copystructureto<表文件名>【fields字段列表】
复制当前表的结构,创建一个新表。
★显示与编辑表的数据
菜单显示表的数据:
显示---浏览
命令:
browse命令
browse[fields字段列表][for条件][freeze字段名][lock锁定字段数][noappend][nodelete][noedit]
显示数据
display|list[fields字段列表][for条件][范围][off]
[toprinter][tofile文件名]
范围
范围的值
意义
all
所有的记录
recordn
第n条记录
nextn
从当前记录开始连续的N条记录
rest
从当前记录开始直到最后一条记录的所有记录
record单词的意思是记录rest
display省略范围,默认的是当前记录
强化训练
写出下列命令
1.在D:
\ZG文件夹中创建一个表ZG.dbf
createD:
\ZG\ZG
2.复制ZG.dbf表的数据,新建一个表DA_1.dbf
useD:
\ZG\ZG&&首先打开源表
copytoD:
\ZG\DA_1
3.复制ZG.dbf表中编号、姓名、基本工资字段的数据,新建一个表DA_2.dbf
useD:
\ZG\ZG
copytoD:
\ZG\DA_2fields编号,姓名,基本工资
4.复制ZG.dbf表的结构,新建一个表DA_3.dbf
useD:
\ZG\ZG
copystructuretoD:
\ZG\DA_3
5.复制ZG.dbf表中编号、姓名、基本工资字段的结构,新建一个表DA_4.dbf
useD:
\ZG\ZG
copystructuretoD:
\ZG\DA_4fields编号,姓名,基本工资
课本P112第六大题
1.显示DA_1表文件的结构。
useDA_1
displaystructure
2.浏览/编辑DA_1表的所有数据。
useDA_1
browse
3.浏览/编辑DA_1表所有男职工的数据。
useDA_1
browsefor性别=”男”
4.浏览/编辑DA_1表所有男职工的编号、姓名、部门、基本工资字段的数据。
useDA_1
browsefor性别=”男”fields编号,姓名,部门,基本工资
5.显示DA_1表的所有职工的数据。
useDA_1
displayall
list和display的区别
list后面没有范围,默认显示所有记录,指针指向的是文件尾
display后面没有范围,默认显示当前记录
6.显示DA_1表第5条记录的编号、姓名、部门、基本工资字段的数据。
useDA_1
go5
displayfields编号,姓名,部门,基本工资
定位指针
绝对移动指针
go|goto<记录号>
gotop将指针移动最顶端的记录
gobottom将指针移动最底端的记录
如果表没有索引排序,gotop和go1,索引后结果不一样。
索引不改变物理记录号。
物理记录号:
在输入记录时的顺序。
第一次输入的记录记录号为1
相对移动指针
skip【记录数】
recno()返回当前记录的记录号
reccount()返回表中记录总数
注意:
当eof()函数为真时,recno()返回值是记录的总数+1,reccount()返回记录的总数。
当bof()函数为真时,recno()返回值是1
recno()
reccount()
文件头
1
总数
1号记录
1
总数
2号记录
2
总数
3号记录
3
总数
4号记录
4
总数
5号记录
5
总数
6号记录
6
总数
文件尾
总数+1
总数
例题1:
设当前表有25条记录,当前记录号是6,执行下列命令后的输出结
果是()
skip30
?
recno()
A.25B.26C.30D.36
例题2:
设当前表有35条记录,执行下列命令后的输出结果是()
usexsda
list
?
recno()
A.25B.26C.30D.36
例题3:
设xsda表有35条记录,执行下列命令后的输出结果是()
select1
usexsda
list
?
recno
(2)
A.0B.26C.35D.36
例题4:
设xsda表有35条记录,执行下列命令后的输出结果是()
select1
usexsda
skip-5
?
recno()
A.0B.1C.35D.36
注意:
打开一个空表时,bof()和eof()都返回为真,此时recno()函数返回为1,reccount()返回0;
★更新表的数据(成批替换数据)
vfp命令:
replace字段名1with表达式1【,字段名2with表达式2……】【all】【for条件】
举例:
replace总分with语文+数字+英语all
replace命令默认替换当前记录,替换所有记录必须加ALL
如果带有for条件时,替换所有满足条件的记录。
此时可以不加all
replace总分with语文+数字+英语for性别=”女”
将姓张的同学,入学成绩都加5分
replace入学成绩with入学成绩+5for姓名=“张”
replace入学成绩with入学成绩+5forleft(姓名,2)=“张”
xsda表中,450分以上等级为优秀,400分以上为良好,360分以上为合格,其它为不合格
SQL命令:
update<表名>set字段1=表达式1,字段2=表达式2……【where条件】
和VFP命令的区别:
1)不需要打开表就能替换。
2)update是针对所有记录。
replace命令默认是针对当前记录。
替换所有记录要加ALL
updated:
\xsdaset入学成绩=入学成绩+5
将xsda表中所有学生的入学成绩加5分;
updated:
\xsdaset入学成绩=入学成绩+5where性别=”女”
将xsda表中所有女生的入学成绩加5分;
★追加记录
1.append表的末尾追加多条记录
appendblank在表的末尾追加一条记录。
追加后,指针指向该条空白记录。
2.insert在当前记录的后面追加多条记录。
insertblank在当前记录的后面追加一条记录。
insertbeforeblank在当前记录的前面追加一条记录。
3.appendfrom<表>[fields字段列表][for条件]
将指定表中的记录添加到当前表中。
哪个表需要添加记录,哪个表就得是当前表。
例题:
如将xsda表中的姓名,性别添加到xscj表中。
usexscj
appendformxsdafields姓名,性别
4.SQL命令
insertinto<表名>[(字段列表)]values(表达式列表)
如果是添加指定的字段,字段列表不能省略;
如果添加表中所有的字段,字段列表可以省略;
insertintod:
\xsjs(学号,书号,书名,借书日期);
values(“20040001”,”B05001”,”苏醒”,{^2019/10/10})
添加的数据类型必须和字段的数据类型一致。
★删除记录
删除记录分为逻辑删除和物理删除
逻辑删除:
只是给记录添加一个删除标记,并不是真正的从表中删除记录。
可以恢复为正常记录。
物理删除:
就是彻底删除,不能够恢复。
逻辑删除的命令:
delete[范围][条件]
如果省略了范围,删除当前记录。
deleteall给所有的记录添加删除标记。
deletefor入学成绩<400所有入学成绩小于400分的都添加删除标记。
恢复记录,去掉删除标记
recall[范围][条件]
recallall去掉所有记录的删除标记。
recall去掉当前记录的删除标记。
setdeletedon只显示没有删除标记的记录。
setdeletedoff显示所有的记录,包括逻辑删除的记录。
物理删除
1.pack物理删除当前表中已经添加删除标记的所有记录。
2.ZAP物理删除当前表中所有的记录。
(不需要添加删除标记就清空表中所有的记录)
物理删除所有的记录方法一
物理删除所有的记录方法二
deletteall
ZAP
pack
习题
1.xsda表中姓名字段的宽度为8,执行下列命令后输出的结果是()
usexsda
replace姓名with“王宝强”
?
len(姓名)
A.6B.8C.4D.10
2.执行下列命令后输出的结果是()
usexsda
go6
listnext4
A.1-4B.4-7C.6-9D.7-10
3.设表中共有10条记录,当前记录号为1,且无索引文件处于打开状态。
执行下列命令,输出的结果是()
skip-1
?
recno()
A.0B.1C.-1D.出错信息
★索引★
索引:
根据某一个特定的字段或表达式对记录进行逻辑排序。
比如xsda表中按入学成绩字段,进行从高分到低分的排序
索引关键字:
用做排序依据的字段或表达式
索引的作用:
快速检索数据和对数据进行排序。
注意的问题
1)索引并不改变物理顺序。
2)索引不会产生新表。
(sortto排序命令会产生新表)
3)一个表可以建立多个索引。
但任一时刻,只能有一个索引控制顺序。
这个索引叫当前索引。
(主控索引)
索引的分类
索引的类型
允许重复?
什么表可以建立
可以建几个?
主索引
不允许重复
比如身份证号
数据库表
1个
候选索引
不允许重复
数据库表和自由表
多个
普通索引(默认索引)
允许重复
数据库表和自由表
多个
惟一索引
允许重复
数据库表和自由表
多个
惟一索引的惟一体现在:
允许出现重复的值,但是只出现第一个记录。
创建索引有两种方法:
1、使用表设计器创建索引(可以创建主索引)
2、使用命令创建索引(indexon命令不能创建主索引)
使用表设计器创建索引(上机考试内容)
使用命令创建索引(理论考试内容)
indexon关键字tag索引名[for条件][desc][unique][candidate]
desc:
降序,默认的是升序asc
unique:
惟一索引candidate:
候选索引
为当前表建立索引。
indexon入学成绩tagrxcjdesc
indexon关键字to单索引文件名
indexon关键字of非结构化的复合索引
indexon关键字tag结构化的复合索引
复合索引和单索引
复合索引文件表现形式
tag标识
以xsda表为例
物理记录号
tag:
rxcj
tag:
csrq
tag:
xh
tag:
xm
1
3
2
2
3
1
4
6
5
6
6
4
7
9
8
5
9
7
结构化的复合索引文件和特点:
1.和表同名,扩展名为.cdx
2.随着表的打开而自动打开。
表如果更新了内容,会自动维护更新。
非结构化的复合索引文件和特点,和表不同名,不会随着表的打开而打开,不会自动维护。
例题:
xsda表的结构化复合索引文件名是xsda.cdx。
xsda表的备注文件名是xsda.fpt。
★独立索引文件
独立索引文件只存放一个索引,其扩展名为.IDX。
独立索引文件的名称由用户定义;一个表文件可以建立多个独立索引文件;独立索引文件不会随着表文件打开而自动打开。
usexsda
indexon入学成绩tagrxcjdesc
创建一个结构化复合索引文件,文件名是xsda.cdx
indexon入学成绩tagrxcjofabcdesc
建立一个非结构化的复合索引,文件名是abc.cdx
setindextoabc&&打开索引文件
setordertotagcjofabc&&指定当前索引
【练习1】在职工简况表Zgjk.dbf中,使用命令建立“性别”建立索引,索引名称为:
xb
INDEXON性别TAGxb
【练习2】在职工简况表Zgjk.dbf中,使用命令建立“基本工资”建立索引,索引名称为:
jbgz,降序排列。
INDEXON基本工资TAGjbgzDESC
【练习3】在职工简况表Zgjk.dbf中,使用命令建立“出生日期”建立候选索引,索引名称为:
csrq,降序排列。
INDEXON出生日期TAGcsrqDESCCAND
USEZgjk&&打开职工简况表
INDEXON部门TAG部门OFBM.CDXDESCUNIQUE
【练习1】在职工简况表Zgjk.dbf中,建立“性别”字段为关键字,建立索引名称为:
xb的候选索引,按性别降序排列,复合索引文件名为CC.CDX
INDEXON性别TAGxbofCC.CDXDESCCAND
【练习2】在职工简况表Zgjk.dbf中,建立“部门”和“性别”两个字段的复合索引,索引名称为:
bmxb,要求先按“部门”降序排列,当“部门”相同时,按“性别”降序排列,复合索引文件名为BMXB.CDX。
INDEXON部门+性别TAGbmxbOFBMXB.CDXDESC
以xsda表为例:
例题一、建立以姓名升序,入学成绩升序的结构复合索引,索引名为xmcj
usexsda
indexon姓名+str(入学成绩,5,1)tagxmcj
例题二、建立以姓名升序,入学成绩降序的结构复合索引,索引名为xmcj
usexsda
indexon姓名+str(1000-入学成绩,5,1)tagxmcj
例题三、建立以姓名升序,出生日期升序的结构复合索引,索引名为xmrq
usexsda
indexon姓名+dtoc(出生日期)tagxmcj
例题四、显示xsda表中年龄最小的前三名同学。
usexsda
indexon出生日期tagcsrqdesc
gotop
displaynext3
reindex&&重新索引
deletetagall|<索引名>【of非结构化复合索引文件名】
deletetagcsrq&&删除当前表的csrq索引
deletetagall&&删除当前表的所有的索引
deletetagcsrqofrq.cdx&&删除当前表的csrq索引,索引文件是rq.cdx
★检索数据★
检索数据有两种:
一种是在表中直接查找(locatefor),一种是使用索引进行查找(seek|find)
locatefor<条件>
在当前表中查找满足条件的第1条记录。
如果要继续查找,用continue命令
例题:
从xsda表中找出第二个“张华”的信息。
usexsda
locatefor姓名=“张华“
continue
display
注意:
如果continue命令或者locatefor没有找到满足条件的记录,指针指向文件尾,此时eof()为真
例题:
从xsda表中找出第三个姓“张”的同学,并显示相关信息。
usexsda
locatefor姓名=“张”
continue
continue
display
seek<表达式>
在当前表的索引中检索指定表达式的值,要继续查找,用SKIP命令。
例题:
从xsda表中找出第二个“张华”的信息。
usexsda
indexon姓名tagxm
seek“张华”&&也可以find张华也可以find“张华”
skip
display
例题1:
当前表中按基本工资建立索引,利用索引查找基本工资是1800的第2条记录。
正确的命令是(C)
A.seek基本工资=1800
skip
B.seek
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- vfp60 第二 数据库