序号 |
留言内容 |
D:2011-3-11 T:13:39:00 IP:192.168.8.40
作者: 张顺海 | 2011.3.11 授课内容
1.索引
2.索引顺序
3.索引文件(索引标识、索引项目)(索引名、索引表达式)
4.索引打开
5.主控索引
6.索引文件上的命令
1.索引就是使数据有序,提高查询、定位的效率。
2.索引就是按照某个内容(索引项目)进行排序(升序、降序),换言之,索引就是顺序,一个索引就是一个索引顺序。
3.一个索引顺序就以单独文件方式存放,叫单一索引,也叫普通索引,通过 index on 表达式 to 文件名,的方式建立,这个文件名就是‘单一索引’,扩展名为.idx。
4.一个及以上的索引顺序存入于一个文件,叫复合索引,通过命令 index on 表达式 tag 文件名,的方式建立,这个文件名就是‘复合索引’,扩展名为.cdx。
5.复合索引分类:结构复合索引、非结构复合索引。结构复合索引,建立索引是自动建立,索引文件名与当前表同名(扩展名不同),并随表自动打开,不用人为干预,且与表同步更新。建立非结构复合索引,应该在命令中体现,加上 of CDXname,如:index on 姓名 tag xm of abc,这样就建立一个非结构复合索引abc.cdx,索引标识为xm。
6.索引顺序影响命令处理记录的顺序。
7.一个表可以建立多个索引(普通索引或者复合索引),对于当前表来说,只有一个索引顺序有效,叫主控索引。主控索引可以用命令更换。set orde to n|tag tagname [of cdxname]。
8.索引文件的打开:只有索引文件打开时,在表上的数据更新,才会使索引文件中的索引同步。可能会造成不同步的现象,可以使reindex命令手动更新。结构复合索引会随表自动打开,根据需要手动打开的只是单一索引或者非结构复合索引。命令 set inde to 索引文件表
9.一个索引文件(普通索引)或者一个索引标识(复合索引)中的内容只有两项,一个是记录号,另一个是索引表达式值。一个索引顺序就是一个关于索引表达式值的有序排列所获得的记录号的次序。也就是这个关于记录号的次序,会将来影响命令处理表中记录的顺序。
原表如下:
记录号 姓名
1 佟红妹
2 张艳
3 张芳
4 宋佳欢
5 李梅梅
index on 姓名 to xm
会建立一个普通索引文xm.idx,索引项目是姓名,默认是升序。所以会根据姓名字段的值升序排列,即李梅梅、宋佳欢、佟红妹、张芳、张艳,又根据这个顺序,得到一个关于记录的次序,即 5、4、1、3、2。因此,索引文件xm.idx中的两项内容就是:
5 李梅梅
4 宋佳欢
1 佟红妹
3 张芳
2 张艳
注意:xm.idx是一个索引文件,它代表一个索引顺序,即5、4、1、3、2,这个索引顺序做为主控索引时就会影响命令处理记录的顺序。
如:list,它的意思是显示当前表的所有记录,现在的主控索引假如就是上边的xm.idx,那么索引文件中的索引顺序5、4、1、3、2就会影响list的处理记录的顺序,即先列5号记录,再列4号记录,再列1号记录,再列3、2号记录,注意这个索引顺序只是影响list列表时处理记录的顺序,但不决定list的内容,所以list只是按照主控索引中的记录的索引顺序,把表中的内容按5、4、1、3、2的顺序列出来,到底哪些内容列出来,取决于list的后续选项。
用户看到的结果是5、4、1、3、2,看似没有顺序,可是再看记录中的姓名字段,已经有序了。
10.索引文件上的命令运用:
find、seek
1.这两个命令只参运行在索引文件上。
2.两个命令的区别、格式不在说,上个留言中有。
3.find的内容的不同,需要主控索引匹配,也就是说find的内容,不是在表中查找,而是在主控索引中查找,上例中说,索引文件中两项内容,一是记录的顺序,另一个就是关于索引表达值的有序列表。也就是说,find需要查找的内容是在索引文件中查,如果当前是按姓名建立的索引,你需要查找年龄的话,只能改换用年龄建立的索引顺序为主控索引。
4.注意用复合表达式做为索引表达式的查找方式。如:index on 姓名+str(年龄,2) to xyz。有的人认为,这样的复合表达式建立的索引,用find或者seek查找内容时,即可以查找 陈旭东,也可以查找 男,这是不对的,因为在xyz.idx索引顺序里,内容的存储是 陈旭东男 佟红妹女 的形式,因为查找时应该注意这一点,否则极易找不到,或者查找的结果并不正确。
11.find、seek的结果是造成指针的移动,要么查找到了把指针指向符合条件的第一条记录上,要么找不到,就把指针指向EOF()。它们没有显示查找到记录的功能。通常和disp命令配合来完成查找并显示的功能。
请同学样想想,它们和list配合行不行。
12.find、seek会造成found()函数的变化,成功找到它会为真,返回结果为.t.,找不到它会为假,返回结果为.f.。
愿大家仔细体会这些问题之间的关系。
|
D:2011-3-9 T:21:07:00 IP:192.168.8.40
作者: 张顺海 | 课程内容、课后练习
下载地址:ftp://192.168.8.40/
文件夹:2011.3.9
文件:全部拷到指定位置
xs.dbf 表格文件,中有若干条记录
xs.cdx 结构复合索引,其中有三个索引名称,和表格文件主文件名同名,随表自动打开。
xm.idx 单一索引(普通索引),其中只含有一个索引项目,按姓名索引。打开需要手动打开。
abc.txt xs.dbf中的记录内容 ,通过命令 list to file abc建立的,扩展名自动为.txt。
cde.txt xs.dbf表格的结构信息,通过命令 list stru to file cde建立的,扩展名自动为.txt。
1.xs.dbf中的记录与结构
结构信息:
表结构:XS.DBF
数据记录数: 8
最近更新的时间: 03/09/11
代码页: 936
字段 字段名 类型 宽度 小数位 索引 排序 Nulls
1 XM 字符型 6 升序 PINYIN 否
2 XB 字符型 2 否
3 NL 数值型 2 否
4 ZHUZHI 字符型 40 否
** 总计 **
记录内容:
记录号 XM XB NL ZHUZHI
1 孔艳丽 女 36 徐水县八四机械厂
2 张顺海 男 37 徐水县遂城镇
3 张俊 女 18 徐水职教中心
4 陈旭东 男 18 徐水职教中心
5 宋佳欢 女 18 徐水职教中心
6 苏海静 女 17 徐水职教中心
7 许海峰 男 30 徐水县遂城城镇大次良
8 王艳会 女 29 保定市北市区
2.命令序列(注意每条命令前有一个全角的空格,在执行时应该去掉)
use xs &&打开xs的同时,对应的xs.cdx结构复合索引自动打开
inde on xm to xm1 &&建立一个普通索引
find "陈旭东" &&找到该记录后指向它
disp &&显示结果
go top &&将指针指向首条记录
seek "陈旭东" &&找到该记录后指向它
disp &&显示结果
*以上两条命令是结果是一样的
xm="陈旭东"
seek xm &&找到该记录后指向它
disp &&显示结果
find xm &&找不到,因为这句话的意思是找姓名叫xm的那条记录,当然找不到了。指向eof()。
find &xm &&这次就可以顺利找到,宏替换的妙用。
disp &&显示结果
seek 陈旭东 &&问这个结果是什么?找不到变量,为什么。
seek "徐水县遂城镇大次良" &&为什么找不到,查找内容发生改变,需要改变索引,即住址为索引项目。
seek "徐水县遂城镇大次良" orde tag zhuzhi &&这样可以查找非主控索引中的内容。也可以如下操作:
set orde to tag zhuzhi &&索引标识zhuzhi在结构复合索引文件中
seek "徐水县遂城镇大次良" &&顺利找到
3.索引项目为综合表达式的情况
use xs
list
inde on xm+xb tag xmxb &&建立结构复合索引,与当前表同名,随表自动打开,扩展名.cdx。
seek "陈旭东" &&不能找到
find "陈旭东" &&不能找到
seek "陈旭东+男" &&不能找到
find "陈旭东+男" &&不能找到
seek "陈旭东男" &&可以找到
disp
find "陈旭东男" &&可以找到
disp
find 陈旭东男 &&可以找到,可以去掉引号,因为find 常量
disp
seek 陈旭东男 &&不可以找到,变量找不到,因为seek 表达式,陈旭东男当作变量对待了。
|
D:2011-3-9 T:17:29:00 IP:192.168.8.40
作者: 张顺海 | 今日上机内容回顾:
1.索引:
索引就是使数据有序,一个索引就代表一种顺序。
一个索引文件里只有一种索引顺序的叫普通索引,或者单一索引,扩展文件名为.idx。刚建立的普通索引文件处于打开状态,但它不随表的打开自动打开。建立普通索引文件的命令格式为:inde on 【表达式】to 【文件名】。打开普通索引的命令:set index to 【索引文件列表】
一个索引文件里有一个或多个索引顺序的叫复合索引,扩展文件名为.cdx。
有两种复合索引:
一种是随表文件自动打开的复合索引,叫结构复合索引,它是自动建立的,文件名与当前表同名(主文件名)。
一种是需要手动打开的复合索引,叫非结构复合索引,建立非结构复合索引的命令是:index on [表达式] tag [索引文件名],打开的命令格式:set inde to [索引文件名]
2.索引的目的:
使数据有序,命令处理表中的记录时是按照索引文件中的顺序进行的。
有序的数据,对数据的处理及查询、定位会提高工作效率。
索引文件,可以同时打开多个。同一时刻只有一个索引文件(普通索引文件)或者索引文件中的一个索引标识(复合索引文件,一个复合索引文件中可以有多个索引标识)影响表的记录处理顺序,这个索引标识,就是主控索引。可以通过更改主控索引或者标识来改变表中记录的处理顺序。
改变主控索引的命令:set order to n|tag tagname[of cdxname]。
set orde to 0 的作用是不关闭索引文件的状态下,取消主控索引的影响,即暂时恢复物理顺序。
3.索引文件的关闭:
set orde to 0:取消主控索引,但不关闭索引文件
close inde :关闭当前工作区内已经打开的普通索引、非结构复合索引,不能关闭结构复合索引。只对当前工作区有效。
close inde all:即使加了all(不起作用),和上边命令功能一样。注意区分:close all index与下边的close all功能一样。
close all:关闭所有打开的数据库和其中的表、所有打开的自由表、所有工作区内所有索引和格式文件、选择工作区1为当前区。
4.索引文件上命令的使用:
1)find 常量
2)seek 表达式
重点:
find和seek两个命令只能工作在索引文件模式下。
find、seek的目的快速查找指定的内容,结果是指向符合条件的记录,如果找不到则指向EOF(),即文件结尾。
需要查找的内容,必需和当前主控索引的索引项目(索引表达式)相匹配,即需要找的是姓名‘张三’,就得对姓名字段建立索引(普通、结构、非结构都可),并将其打开,置于主控索引。如果查找内容所在的列项目发生改变,如需要找的是‘工业机械’,那么得把按‘版别’索引文件打开,并把其做为主控索引。如果不置为主控索引,那么得使用 seek "工业机械" orde tag 版别 的形式。
find 、seek的区别:一个是常量,一个是表达式。常量本身就是表达式的一种形式。
use xs &&打开xs的同时,对应的xs.cdx结构复合索引自动打开
inde on xm to xm1 &&建立一个普通索引
find "陈旭东" &&找到该记录后指向它
disp &&显示结果
go top &&将指针指向首条记录
seek "陈旭东" &&找到该记录后指向它
disp &&显示结果
*以上两条命令是结果是一样的
xm="陈旭东"
seek xm &&找到该记录后指向它
disp &&显示结果
find xm &&找不到,因为这句话的意思是找姓名叫xm的那条记录,当然找不到了。指向eof()。
find &xm &&这次就可以顺利找到,宏替换的妙用。
disp &&显示结果
seek 陈旭东 &&问这个结果是什么?找不到变量,为什么。
seek "徐水县遂城镇大次良" &&为什么找不到,查找内容发生改变,需要改变索引,即住址为索引项目。
seek "徐水县遂城镇大次良" orde tag zhuzhi &&这样可以查找非主控索引中的内容。也可以如下操作:
set orde to tag zhuzhi &&索引标识zhuzhi在结构复合索引文件中
seek "徐水县遂城镇大次良" &&顺利找到
总结:
find、seek工作在索引文件上,查找内容与索引项目匹配。
find、seek只是定位记录,并不显示记录。
find、seek查找内容的条件是隐含的,即索引项目为查找内容。如:find "陈旭东",当前应该按姓名索引并找开,设置为主控索引,这样的查找条件默认为 姓名是陈旭东。
find、seek两命令只定位到第一条符合条件的记录上。没有找到指向EOF()。
注意:索引表达式为复合表达式的情况下的查找。只能按照复合索引表达式的‘值’查找。如:inde on 姓名+性别 to xb中,如果要查找 "陈旭东" "男"的记录,应该使用 find 陈旭东男 或 find "陈旭东男" 或 seek "陈旭东男"的形式。不能使用 find 陈旭东+男 或 find "陈旭东"+"男"等形式。
5.相关函数:
eof()、recn()、found()。
seek、find如果找到符合条件的记录,那么:
found()为真,eof()为假,recn()返回该记录指针。
如果没有找到,那么:
eof()为真,found()为假,recn()返回recc()+1。
eof()、found()在这里的结果相反。
6.相关知识:
请关注locate、continue命令组合的用法。
与find、seek的区别。
|
D:2011-2-25 T:19:37:00 IP:192.168.1.200
作者: 张顺海 | 第二章 表的基本操作 (2011.2.25 上午3、4节内容)
1.创建数据库
数据库:.DBC .DCT .DCX。
创建方式:菜单方式、向导方式、命令方式。
数据库特点:是一个容器,存放:表格、视图、连接、存储过程。
命令方式:Create Database xx (创建数据库文件xx.dbc,同时自动创建xx.dct、xx.dcx)
2.打开数据库:
打开方式:项目管理器、菜单方式、命令方式。(也可使用工具栏)
命令方式:
1.open database [数据库名]
2.modify database [数据库名]
相同点:使指定的数据库处于打开状态
不同点:open只让数据库打开,但不打开数据库设计器窗口。modi打开数据库设计器窗口。
参数:
[exclusive|shared]:独占或者共享打开。
open中的[noupdate]、modi中的[noedit]可以使用打开数据库时,让数据库只读。只读请看前边的留言,关于open data 和modi data的介绍。
3.关闭数据库
命令方式:close data
4.可以同使多个数据库同时处于打开状态,但只有一个当前数据。
改变当前数据库的命令:set database to 数据库名
5.创建数据表:.DBF、.FPT。
建立方式:菜单方式、向导方式、命令方式。
命令方式:(交互方式、SQL方式)
1.create xx
2.create table xx (xm c(6),xb c(2),nl n(2))
数据表的各类:库表、自由表。
不同:自由表字段名最长为10个字符(5个汉字),库表则为最长128个字符。库表可以拥有长表名、且可以设置字段标题、字段有效性规则、记录级有效性规则等。
注:建立表结构的过程,就是输入字段属性的过程。
6.数据类型:13类(书的P16页)
常用的:字符型(C),数值型(N),日期型(D),逻辑型(L),备注型(M),时间型(T),货币型(¥),浮动型(F),通用型(G)等。
7.Null,值表示允许该字段为空,不等于0。
8.修改表的结构:(对已经打开的数据表格有效)
命令:MODIFY STRUCTURE
SQL命令:alter table
功能:增加字段、修改字段、删除字段、调整字段顺序、设置字段属性。
9.表的基本操作:
1.表的打开:
use [表|?][exclusive|shared][noupdate]
2.输入记录:
append,insert
格式:(交互模式)
append/append blank/append from 表
insert/insert blank/insert before/insert before blank
SQL命令:insert into xx (xm,xb,nl) value ("李彬","男",18)
3.备注型字段(memo--Memo),通用型字段(gen--Gen)的意思,进入编辑方式(鼠标双击、Ctrl+PgDn),放弃修改(ESC)。
4.append 追加记录与当前记录指针位置无关
insert插入记录与当前记录打针有关。
相同点,命令完成后指针指向刚刚加入的记录。
相关函数:recno(),recsize(),reccount()。
5.显示记录:
disp list (可省略Field关键字)
范围:(四种)
all / next n /record n /rest
list 默认范围为:all
display默认范围为:next 1
6.修改记录:(重点 replace)
browse:边浏览边修改;
edit/change:顺序逐条修改;
replace:成批修改,但对M型、G型等数据无效;
update:成批转换,数据源来源于其他的表格。
7.删除记录:
逻辑删除、物理删除。
delete (默认当前记录)
recall (默认当前记录)
pack (没有参数)
zap (全部删除记录,保留库结构,成为空库)
相关设置:提醒开关--set safety on/off
dele、recall默认为当前记录,如果想为多条记录加、减删除标志,请使用范围或者条件选项。
|
D:2011-2-25 T:19:16:00 IP:192.168.1.200
作者: 张顺海 | 第一章 Visual FoxPro 6.0基础知识
复习要点:
1.数据库基本概念:
数据库是盛放数据的集合。
特点:有数据模型组织、数据独立、可共享。
2.DBS-DBMS-DB(范围由大到小)
数据库系统-数据库管理系统-数据库
3.VFP 6.0指的就是DBMS。
4.DBMS:数据定义、数据操作(纵)、数据管理、数据控制。(四大功能)
5.数据库系统(DBS):由数据库、数据库管理系统、计算机系统、数据库管理员、用户。
特点:特定的数据模型、数据共享、数据独立、保护控制。
6.数据模型:层次模型、网状模型、关系模型。
Visual FoxPro6.0(DBMS)简称:VFP6.0是建立在关系模型基础上的数据库管理系统。
7.关系模型上的操作:
筛选:找出满足条件的记录。(FOR 条件)
投影:找出指定若干个字段。(Field 字段列表)
连接:两个表文件经过运算得到一个新表(Join with)
8.数据表的存储级别:(由小到大)字符-字段-记录-文件。
9.关系指的就是一张二维表。性质:
表不能嵌套;一列数据拥有同种性质;行列可以交换位置;表中的行称为元组,代表一个实体,行不能重复。
实际操作中:关系称为表(DBF),把属性称为字段,把元组称为记录。
10.关系中:实体-属性-域 -元组-关键字 对应
表格中:对象-字段-范围-记录-标识唯一的字段或组合
11.退出VFP6.0的命令为:QUIT
本章重点:
1.数据模型的分类;
2.关系操作的分类;
3.DBS-DBMS-DB的含义;
4.数据表中数据存储的级别;
5.VFP的启动与退出。
|