当前位置:文档之家› vf笔记

vf笔记

Vf笔记

VF的特点:

1.小型DBMS

2.面向对象

3.结构化

4.32位

1.创建表结构

create *.dbf

数据库表自由表

student.dbf(学号c(2),wx N(6,2))

wx (-99.99 ,999.99)

I M 4 G

数字,数值

2.输入记录内容append

ARP

指针cdx ---数据表复合索引文件

建立索引、索引是否有作用

use student in 1---->sele 1

use student

NULL --->空值不确定的数值

如何在表中输入空值:

1.在表设计器中NULL处对应的字段打“√”---》可以输入NULL值

2.具体输入NULL值在表浏览窗口中按CTRL+0

注意事项:1.0不是小键盘上的0 上面的0

2.ctrl ,0 同时按

3.英文输入法状态下

项目文件:

1.创建create project ***

2.打开、修改(显示) MODIFY PROJECT ***

3.关闭无(close all)

4.删除无(windows方式)

数据库文件:

创建----CREA TE DataBase

打开---OPEN DA TABASE

修改(显示)---MODI DA TABASE

关闭---CLOSE DA TABASE

删除---Delete DA TABASE [... ][DeleteTables] [Recycle]

指定当前数据库---set database to [*.dbc]

创建---CREA TE

打开---USE [表文件名.dbf]

修改---垂直方向修改结构-->MODI StruCture

---水平方向修改记录--->REPLACE ,EDIT,CHANGE,INSERT,APPEND,Delete,Pack,

Recall,Zap 等等

关闭---USE

删除---drop table 表文件名(SQL方式)

显示---垂直方向-->list stru ,disp stru

水平方向-->list all ,display, browse last

项目管理器数据库数据表查询视图表单菜单报表程序

创建create proj cerate database create

打开modify project open database use <表文件>

关闭无(close all) close database use

修改

删除无delete database drop table *.dbf

set safety on/off 安全模式是否打开,创建,修改已有文件给予安全提示。

set database to

use---->关闭当前正在操作表文件

close all 关闭所有的库文件、表文件

clear all 清除所有的内存变量

EXCLUSIVE

daseIII

foxboase--

索引---idx 单索引

安装、----卸载(删除)1.控制面版本2。setup.exe

启动---退出

数据库

创建-- create database

启动

1.桌面快捷方式

2.开始菜单方式

3。主程序文件方式

4.命令方式c:\Program Files\Microsoft V isual Studio\Vfp98\vfp6.exe

退出

1.**法

2.标题栏图标法(双击)

3.菜单法

4.键盘法ALT+F4

5.命令法quit

6.任务栏法

7.绝招法---任务管理器法-- CTRL+ALT+DEL一次

visual studio 6.0----- visual c++ ,visual basic,visual foxpro 系列软件的集合。

msdn----vs的帮助文档和示例集合。700M

office----word ,execl,acess,frontpage,outlook,powerponit

创建、打开、关闭、删除VF VC++ VB

LIST

热键---- 单键(ALT+字母)激活情况下使用F10

快捷键---- 组合键(CTRL+功能键,ALT+功能键(F1-F12键,CTRL+字母)) 任意情况下使用常用快捷键。。。。。

Ctrl+A,P,S,O,N,C,V...

Ctrl+F4--->关闭命令窗口

Ctrl+F2---》打开命令窗口

ALt+F4--->关闭VF系统

set default to ....

工作路径设置:工具--》选项---》文件位置-->默认位置

一次有效的:-----“确定”---》set default to d:\lhj1972

长期有效:------先"设置为默认值"--》再"确定"。

命令查找文件的次序:

1。用户指定的路径

2。如果用户没有指定的路径,就在工具--》选项---》文件位置-->默认位置

3。如果1,2 指定的路径,VF系统主程序文件VFP6.exe所在的位置

c:\Program Files\Microsoft Visual Studio\Vfp98

4。如果1,2,3都没有查找到,系统显示找不到文件。

copy 拷贝安装--》setup.exe或install.exe

1G=1024M 1860 1850-1840 320G 300G 240

----------------------------------------------------------------------

24. sele 课程名,成绩from student, sc, course where student.学号=sc.学号;

and sc.课程号=course.课程号and 姓名="林

25. sele 姓名from student, sc, course where student.学号=sc.学号;

and sc.课程号=course.课程号and 课程名="高等数学"

28. ×sele * from student where 平均成绩>(sele * from student where 姓名="林萍")

√sele * from student where 平均成绩>(sele 平均成绩from student where 姓名="林萍")

容易出错字符:

1." (半角双引号) ''(2个半角单引号) “(全角双引号)

工资N(6,2) 999.99 -99.99 9999 4字节byte=32位bit 2^32

-----------------------------------------------------

传统方式(windows操作方式)

1.要更名(拷贝)的文件,不能是正在使用的,要关闭。

2.要将与之相关的文件都更名(拷贝)。

3.复制之前将要更名(拷贝)的文件的管理关系先行处理。

最好是在VF环境中更名(拷贝)

复制*.dbf文件:

方式1.传统方式(windows方式)不建议使用

方式2.VF命令方式copy to

copy \create 产生文件的位置:

1. 用户指定的位置copy to e:\lhj1972\student.dbf

2.如果用户没有指定的位置,copy tostudent.dbf,系统会将文件存放在

“工具”-->“选项”---》“默认目录”

3.“工具”-->"选项"---》“默认目录”用户也没有设置,则系统将文件存放在VF的安装目录中"C:\Program Files\Microsoft V isual Studio\Vfp98"

copy 几种使用形式:

1.copy to *.dbf 同时复制表结构,内容(记录)。

2.copy stru to *.dbf 只复制表结构

3.copy fields 姓名,年龄to *.dbf 同时复制部分指定字段的表结构,内容.

4.copy to *.dbf for 性别="女" 复制整个表结构,按条件复制部分记录

5.copy to *.txt sdf √将整个表复制成文本文件。(*.txt 可以省掉)

copy to *.dbf sdf (dbf不可以写,如果有dbf扩展名则生成的是表文件而非文本文件)

append(追加) 几种使用形式:

1.append 进入追加方式--->"显示"--》"追加方式"

2.append from e:\ks2008\ks03\student.dbf 从其他表文件中追加所有记录---》"表"-》"追加记录"

3.append from e:\ks2008\ks03\student.dbf for 性别="女" 按条件从其他表文件中追加记录

4.append blank 追加一条空白记录

5.append fields 学号,姓名from e:\ks2007\k03\student 从其他表文件中追加所有记录的指定字段内容。

思考题:用append 分步追加字段学号,姓名,性别,产生的的结果?

*append 分步追加字段学号,姓名,性别,产生的记录数量累加的。

* append 、copy 执行时注意当时正在操作的对象(出发点,角度)to from

*append 如果没有相应字段,则会产生N个空白记录。

create

既可以建立自由表,又可以建立数据库表

如果有数据库打开时,此时建立就是数据库表,

如果所有的数据库是关闭的,此时建立就是自由表。

insert

1.insert 插入----goto n ,insert --->插入在当前记录的后面

2.insert blank ----插入空白记录

3.insert before -----在当前记录之前插入记录

4.insert 受到索引的影响,可能达不到预期目的。

5.insert 在以下情况时,可能不能使用

(1)设置字段有效性规则

(2)建立主、候选索引

(3)建立表与表的关联,参照完整性等.

此时建议用SQL中的insert 命令.P145

----replace----

例如:replace 姓名with "青蛙"

1.replace 姓名with "青蛙"---->默认范围是当前记录

2.replace 命令+for 短语,默认范围变为all.

3.replace all 姓名with "青蛙" for 姓名="达娃" 对所有记录满足条件就替换。

9题: 将student表中“达娃”→“青蛙”

方法1:replace all 姓名with "青蛙" for 姓名="达娃"

方法2: replace 姓名with "青蛙" for 姓名="达娃"

方法3: goto 7

replace 姓名with "青蛙"

方法4: SQL语句update student set 姓名= "青蛙" where 姓名="达娃"

方法5: 手工方式

思考题:9、将student表中“达娃”→“青蛙”,性别→“男”一条replace 完成.

replace all 姓名with "青蛙",性别with "男" for 姓名="达娃"

---》replace all 姓名with "青蛙" for 姓名="达娃"

replace all 性别with "男" for 姓名="青蛙"

与replace相关的set 命令

set delete on/off

1.set delete on -->有删除标记的记录不参与replace的操作

2.set delete off -->全参与replace的操作

3.系统默认是set delete off

list all for 出生日期<={^1988-12-31} and 出生日期>={^1988-01-01}

list all for year(出生日期)=1988

---list---

6题: 查找student表中姓“张”的人员信息

×list for 姓名="张*" or 姓名="张**"

list for 姓名="张"

list for (姓名="张")=.t.

list for left(姓名,2)="张"

list for substr(姓名,1,2)="张" substr("取子字符串",3,4)

list for at("张",姓名)=1

查找student表中姓名有“张”的人员信息

list for at("张",姓名)>0

list for "张"$姓名

list for at("张",姓名)!=0

查找student表中姓名没有“张”的人员信息

list for at("张",姓名)=0

7、新建一自由表student1,内容包含student表中除性别以外的所有内容

方法1:copy to ....,再打开student1.dbf,进入表设计器,删除“性别”字段

方法2:use e:\ks2007\ks03\student.dbf

copy fields 学号,姓名,年龄,班级号,照片to student1

*方法3:sele 学号,姓名,年龄,班级号,照片from e:\ks2007\ks03\student.dbf into table student1

方法4:先modi stru建立student1.dbf的结构,append from e:\ks2007\ks03\student.dbf

表浏览窗口中,*表示退出,但是VF会在退出前自动保存修改数据,

不想保存修改数据,按ESC键放弃.

表-----------------------关系

水平方向记录------------------------元组

垂直方向字段(字段值)-----------属性(属性值)

记录----append ,replace(成批),edit(一条) ,change,insert..

字段----modi stru

VF命令范围

1.all 全部记录

2.record N 第N条记录(默认记录---正在操作的记录)list record 4

3.next n 下N条记录(包含当前记录在内) 例如:use student , go 2 ,list next 3,显示2,3,4条记录

4.rest 从当前记录到最后一条记录(包含当前记录在内)

例题1:

use student

list ---->执行完成后,指针指向EOF

disp ---->执行完成后,指针不动

显示效果

例题2:

use student

list

disp

显示效果

list ----->一次性显示

display all ---》分屏显示

表文件有N记录,指针可移动的范围是N+2 ,

------------------------

文件头----->第一条记录的前面bof()->.t. recno()-->1

1------->bof()-->.f. |--------------------->recno()-->1

2 |

3 |

. |------>

. |

. |

n ----->eof()---->.f. |--------------------> recno()--->n

文件尾-------->最后一条记录的后面eof()-->.t.---recno()--->n+1

--------------------------

----函数---名词---

bof() ------测试指针是否指向第一条记录的前面(文件头)------》结果值为L型eof() -------测试指针是否指向最后一条记录的后面(文件尾)-----》结果值为L型recno()-----测试指针指向第几记录---》结果值为N型

reccount()------测试表文件中有多少条记录---》结果值为N型

---命令----动词-----------

goto /go-----绝对移动指针------->先判断,后执行

skip-------相对移动指针------>先执行,后判断

continue-----按Locate指定条件移动指针

--------

goto 1---->goto record 1指针指向记录号为1的记录

goto top ----->指针指向排在最前面的记录

goto bottom--->指针指向排在最后面的记录

*goto 1 (go record 1)不等于goto top ,(索引,排序)

题1 student.dbf有9条记录

use student

go 20

?recno()---->1

题2 student.dbf有9条记录

use student

skip 20

?recno()---->10

题3 student.dbf是空的,没有任何记录

use student

?bof()------->.T.

?eof()------->.T.

?recno()----->1

?reccount()--->0

**windwos 任务栏只能有一只"狐狸"------>VF在整个操作过程中只能打开一次。数据库!数据表.字段

班级号="11"--->数据类型不匹配,< > = == 符号的两边数据类型不一致。

average、sum------自动对表中所有的N型求结果

sum

sele count(*) as 人数from student where 班级号="11"

sele avg(年龄) as 平均年龄from student where 性别="男"

sele sum(年龄) as 总年龄from student where 性别="男"

统计---use student, count all for 班级号="11"

求和sum ,求平均average ----针对所有的N型数据

求班上20岁以上的男生人数(的总和)----->count统计

求班上20岁以上的男生年龄的总和---->年龄---N---> sum

字段有效性规则----->只有数据库表才有此功能。

------

性别="男女"

性别="男" and 性别="女"

性别="男" and "女"

性别="男" or "女"

性别=("男" ,"女")

性别=("男" or "女")

-------

性别="男" or 性别="女"

性别$"男女"

性别$"男女"=.t.

注意:

1.选择设置规则的指定字段

2.“规则”的表达式正确,表达式结果值必定是L型。

3.原有记录必须满足新设置的条件

4.“信息”表达式结果值必定是C型。

5.“默认值”表达式结果值类型与指定字段类型一致。

12题、将student表中性别和年龄字段的显示顺序交换

逻辑意义---虚拟效果-----》浏览窗口中操作

物理意义---真实效果----》表设计器中操作

student.dbf有2字段学号(c,2) 姓名(c,8),9条记录

文件总长度是:--->9*(2+8+1)=99 1---》逻辑删除标记占1位。

delete ---->逻辑删除例如:delete all for 姓名=" "

pack ----->物理删除,必须先进行逻辑删除,才可以pack

recall ,recall all ---->恢复逻辑删除的记录(不是物理删除)

zap ----->delete all ,pack 清库物理删除所有记录,保留结构。

使得在相关操作中有删除标记的记录无效----set delete on

系统默认set delete off

ODBC ----各种数据库软件的数据文件转换的平台或工具系统。

打开表文件的方式:use *.dbf <****>

1.EXCLUSIVE 独占方式-----》可以对表文件进行修改

2.SHARED------》共享方式多人共用,不可以对表文件进行修改

3.NOUPDA TE-----》只读方式不可以对表文件进行修改

非常异常情况下。。。。。。独占方式不可以使用,不可以清理数据库等等

方式1.分别执行clear all +close all

方式2.退出VF,重新进入VF,再次操作。

注意:

use e:\lhj1972\fz.dbf

use C:\Program Files\Microsoft V isual Studio\Vfp98\fz.dbf --->×

use "C:\Program Files\Microsoft Visual Studio\Vfp98\fz.dbf" --->√

pjx(pjt)-----项目文件(项目备注文件)

1.项目文件与其他文件之间是管理关系,不是包含关系。

2.建立同时产生2个文件*.pjx 项目文件*.pjt(项目备注文件)

3.项目文件与程序文件(*.prg)数据库文件(*.dbc) 数据表文件(*.dbf)....性质一样都是VF 文件,项目文件作用不一样---》管理。

*.dbc(*.dct,*.dcx)----数据库文件(数据库备注文件,数据库索引文件)

dbf 数据表文件-----》修改后产生*.bak (数据表备份文件)

FPT 数据表备注文件----->修改后产生*.TBK (数据表备注备份文件)

如果数据表文件有M,G型字段时,*.dbf就会产生对应的*.FPT文件*.fpt文件用来存放M,G具体内容。

如果表文件有多个M,G型字段,*.dbf就会产生也一个*.FPT文件。

如果表文件的所有的M,G型字段删除掉,则对应的*.FPT文件自动消失。

学号、身份证号、电话号码---》C字符型,而不是N型

1.虽是数字,但不是数值,不要参与数学运算。

2.设置为C型---C型数据函数丰富,操作方便。

性别----字符型2个宽度,一般不用逻辑型。

学生.dbf(学号C(6),工资N(6,2),....)

-99.99<=工资<=999.99

N(6,2) 总宽度6个,小数位2位,小数点,符号(负号)各占1位。

常量----6

字段名变量---13

-99.99<=N(6,2)<=999.99 ---->负号,小数点要占一位.

系统自动宽度:

货币型Y --8

日期型 D ---8

日期时间T----8

双精度型D----8 (字节)

整形I-----4

逻辑型L ----1

备注型M ---4-----》个人简历

通用型G---4----->声音,照片,多媒体信息

网景

dbase I->II-->III

foxplus ----> Foxpro ---> VF 4.0--- VF6.0(mircosoft)

Fox---数据库文件

数据库文件与数据库表文件的关系:

1.两者是管理关系,不是包含关系,数据库文件管理着数据库表文件。

2.两者一般在同一文件夹下,但也可以在不同的文件夹下。

3.两者的管理关系是一对多,一个数据库文件可以包含多个数据库表文件,一个数据库表文件只能对应一个数据库文件。

4.一个数据库表文件改变管理关系,必须从原来的数据库中移出来,重新建立新的管理关系。数据库表---有且只有一个数据库管理的表文件

自由表----没有任何数据库直接管理的表文件

---完全自由的自由表

---有项目管理器管理的自由表

自由表和数据库的比较:

1.长文件名,

2.长字段名,

3.字段有效性规则,

4.参照完整性,

5.标题与注释,6支持触发器

详见教材老教材P96,新教材P117。

如何识别数据库表,自由表:

1.表设计器----》有字段有效性规则

2.索引类型-----》是否可以建立主索引

3.字段名的长度自由表字段名的长度<=10,数据库表字段名的长度《128, (*C型总长度<=254)

4.查看VF状态栏MY_DBC!st5 c:\....\st6.dbf 例如:my_dbc!student.姓名

自由表与数据库表之间的转换:

1.在数据库设计器中操作

2.命令方式

自由表----》数据库表:先打开数据库open database,再add table ...

数据库表----》自由表: 先打开数据库open database,再remove table ...

项目文件———》数据库文件---》数据库表(*.dbf)

---------------------》自由表(*.dbf)

———》菜单文件、

------》报表文件、表单文件、

----》程序文件

一个*.dbf文件如果属于某个数据库文件管理,该*.dbf文件就是数据库表文件,否则

就是自由表。自由表可以放在项目文件中,也可以不放在项目文件中。

*一夫多妻制:一个数据库文件可以包含多个数据库表文件,一个数据库表文件只能对应一个数据库文件。

数据库表与自由表之间的转换:

1.项目管理器

2.数据库管理器

3.命令方式:ADD TABLE <表名> ---》自由表转数据库表

REMOVE TABLE <表名> ----》数据库表转自由表

------------

面向对象

17题. 在屏幕上同时打开三个表①②③(用二种方法)

方法1:建议使用用数据库设计器,将要同时打开表文件添加到一个数据库中,

在数据库设计器环境中操作

方法2:传统方式--->多工作区的使用

1.VF 有32767----(2^15-1) 工作区编号:1----32767

2.sele n -->选择几号工作区例如:sele 1 ,sele 9

3.前10个工作区可以用字母表示A~J 例如sele b ---->sele 2

4.可以用工作区打开的表文件名来代替工作区编号sele k----》k.dbf 所在的工作区

sele 3

use k

----->sele 3,或sele c或sele k

5.0 表示最小空闲(没有使用)的工作区sele 0

6. sele 1 |

use student |------->use student in 1 [alias apple] 别名

7.如果使用别的工作区中表文件的字段内容,则要使用<工作区代号>.字段名或<工作区代号>->字段名形式。

?a->姓名√?a.姓名√

?student.姓名√?student->姓名√

?1.姓名×?1->姓名×

姓名=12

?姓名,vartype(姓名)

?姓名=12

use student

?姓名

?m.姓名,m->姓名

1.当普通变量与字段名变量同名,字段名变量同名优先。

2.如果要使用普通变量,则用m.普通变量, m->普通变量的形式。

关系

二维方向

属性---字段

元组---记录

纯数字---C

数值N

常量普通变量---6 N Y C D T L

字段(字段名)变量--13

double float I int memory G

list all for 性别="男" or 性别="女"

8字节(byte) 64位(bit)

{2007-07-17} {2007-07-17,09:43}

07/07/17

12.45 5 2

容错性

VF 命令形式:

1 传统命令形式sele 、creat、insert 、delete、replace

2 SQL命令形式sele 、create、insert、delete、update

*区别:查看命令行中是否有表文件名,每个SQL命令行中必定有表文件名。

订购定购订货c(10),

嵌套查询

sele 工资from 职工where 仓库号=(sele 仓库号from 仓库where 城市="上海") 关联查询

sele 工资from 职工,仓库where 职工.仓库号=仓库.仓库号and 城市="上海"

*.dbf数据表文件---->*.bak数据表备份文件

有M 、G 字段*.FPT 数据表备注文件----->*.TBK数据表备注备份文件

自由表数据库表数据库

投影---- fields 姓名,学号--- 垂直方向

选择--- for 性别="女"---水平方向

联接---2个或者2个以上的表关联操作

sdb!student.姓名

recno()----1 文件头(第一条记录的前面)

---- n (表中)

---- n+1 文件尾(最后记录的后面)

bof()---- 指针是否指向文件头

eof()---指针是否指向文件尾

go top ---指针指向第一条记录

go 1-----#go top ,指针指向记录号为1的记录,

go bottom --指针指向最后一条记录

count---统计

sum -----求和

average----求平均值

------------------------------------索引----------------------------------------

对表中记录按要求排列顺序,目的相同,方法不同。

排序---sort,物理意义上,生成与原表相同大小新的*.dbf,体积大,速度慢,效率低。

索引---index,逻辑形式上,生成idx,cdx文件,相对原表而言体积小,速度快,效果好。dbase fox

打比方:参军问题

1

A--1

B--3

层次1》是否有参军指标-----》是否有索引文件--》index on ...to [tag]

层次2》那个家庭得到参军指标---》指定那个索引文件起作用--》set index to <索引文件> 层次3》家庭中的那个儿子去参军--》指定那个索引项目起作用--》set order to <索引项目>

向下兼容----软件

分类:创建方式

单索引文件----只有一个索引项目的索引文件(*.IDX)

命令:index on 索引表达式to 单索引文件名

复合索引文件----可以有多个(1个或2个以上)索引项目的索引文件(*.CDX)

(1)非结构复合索引文件(*.cdx)---索引文件名不同于数据表名的复合索引文件命令:index on 索引表达式tag 索引项目名of 非结构复合索引文件名(2)结构复合索引文件(*.cdx)----索引文件名与数据表名完全相同的复合索引文件

命令:index on 索引表达式tag 索引项目名

(索引文件的有无)索引文件的打开,索引文件(索引项目)是否起作用是2件事情。

索引文件的打开---->set index to [*.cdx]

索引文件(索引项目)是否起作用---->set order to [索引项目] (指定一个索引项目)

单索引只能升序,不能降序。但是可以通过一些技术处理来实现降序例:index on 100-年龄to nl

复合索引既能升序,又可以降序(desc)---> index on 学时desc tag sx.

任何索引第一次建立时,自动起作用。

以后再次使用时,就要先指定索引文件set index to

再指定索引项目---set order to [索引项目]。(单索引不需要执行set order to [索引项目] 为什

么?)

对于结构复合索引,set index to 无效,为什么?

对于单索引,set order to 无效,为什么?

单索引文件(*.idx)非结构复合索引(*.cdx) 结构复合索引(*.cdx)

------------------------------------------------------------------------------------

SET INDEX TO

<索引文件名> √√×

-----------------------------------------------------------------------------------

SET ORDER TO

<索引项目名> ×√√

------------------------------------------------------------------------------------

任何类型的索引都可以分别在表设计器中显示出来。

但是在表设计器中做出来的索引必定是结构复合索引文件。

结构复合索引文件的优点:

1、自动打开

2、索引文件中可以有多个索引项目

3、在添加更改删除记录的时候会自动索引

见P100 P112

索引文件

索引项目(名)----索引标识xb

主控索引---只在复合索引文件中有,正在起作用的索引项目。

组合索引---通过多字段组合形成的一个索引项目。(索引表达式)

一个数据表文件可以有多个单索引文件,多个非结构复合索引文件,最多一个结构复合索引文件(*.cdx)。

单索引文件只能有一个索引项目,复合索引文件可以有多个索引项目。

单索引文件只能有一个索引项目)。在某一时刻,一个数据表文件能打开多个索引文件,只有一个是当前索引文件(set index to ),一个索引文件又只能有一个索引项目是起作用的(主控索引,set order to).

set index to + 索引文件名-----》打开索引文件,指定当前索引文件

set order to +索引项目名-----》指定主控索引,即指定一个索引项目是起作用

建立索引------>[index on... to ..] [index on .. tag .. of ..] [index on .. tag ..] 三种形式

打开索引----->set index to [*.cdx]

关闭索引----->set index to

删除索引---->在表设计器中操作--取消索引项目.

指定索引项目----set order to <索引项目名>

关闭(当前)索引项目---- set order to

关闭当前索引文件---set index to

关闭所有的索引文件----close index

删除索引(项目) ----delete tag 索引项目名

删除全部索引(项目)----delete tag all ---->全部索引项目删除了,则结构复合索引文件也随之自动删除。只删除一个索引文件中的全部索引项目。

索引----创建、打开、关闭、删除

打开 https://www.doczj.com/doc/d618825132.html,e student 结构复合索引自动打开

2.所有的索引文件第一次建立时自动打开

3.再次使用索引时,set index to [*.idx ,*.cdx]

4.打开表文件同时打开索引文件use student index nl.idx

索引分类---- 类型(索引文件类型)---单索引,复合索引

索引分类---- 性质(索引项目性质),

主索引primary key------(1)字段不能有null值(2)不能有重复值(3)最多一个主索引(4)数据库表才有,自由表没有(5)作用:字段值的唯一(记录不重复)

* 学号,身份证号--》主索引,还可以通过字段组合建立主索引:姓名+dtoc(出生日期)。。。

候选索引candidate key-----(1) (2) (3)可以有多个(4)数据库表、自由表都有(5)

唯一索引UNIQUE key ---指索引项的唯一,不是字段值的唯一---->以“性别”字段试一试,看效果

普通索引foreign key -(1)字段可以有null值,(2)可以有重复值,(3)可以有多个,(4)数据库表、自由表都有

*身份号,学号可以作主索引,还可以通过字段的组合建立主索引。

排序----sort on 字段1[/A/D],字段2[/A/D],。。。to 新表文件名

/A或不写--->升序列/D 降序

例1:sort on 年龄to student1.dbf

----->sele * from student order by 年龄into table student1

例2: sort on 性别/a,年龄/d to student2

------>sele * from student order by 性别,年龄desc into table(dbf) student2

相同点:对表文件按某个要求重新排列次序。

不同点:1.排序(sort)---> 物理意义上,索引(index)逻辑意义上

2.结果:排序---》*.dbf (文件大小与源文件一样大).索引--->*.idx,*.cdx(新文件小)

3.效果:排序---》速度慢索引--》速度快

思考题:修改student.dbf结构,增加出生日期D字段。

1.以年龄的降序建立一个单索引文件nl.idx

2.以性别(索引项目名:sex)的降序建立一个非结构复合索引文件xb.cdx

3.建立一个结构复合索引student.cdx,包含

(1)班级号(索引项目名:bjh)的升序

(2)姓名(索引项目名:姓名xm)的降序

(3)以性别的升序,性别相同时,再以班级号的升序(索引项目名:zh)

4.以性别的升序,性别相同时,再以出生日期的降序(索引项目名:zh2)建立一个非结构复合索引xbnl.cdx

--》性别+str(date()-出生日期))

5.以性别的降序加姓名的升序重新生成一个student2的新表student2.dbf

6.做完前5步,关闭VF,再次进入VF,分别显示以上所有效果。

7.用VF的命令删除全部索引(项目)。

4题:index on 性别+str(date()-出生日期) tag zh of xbnl4题:

sort on 性别/a,出生日期/d to st

set century on

sele * from student order by 性别asc ,出生日期desc

---ANSWER-------------------

1.index on 100-年龄to nl

2.index on 性别desc tag sex of xb

3.(1) index on 班级号tag bjh

(2) index on 姓名desc tag xm

(3) index on 性别+班级号tag zh

4.index on 性别+str(date()-出生日期) tag zh2 of xbnl

5.sort on 性别/d,姓名/a to student2

https://www.doczj.com/doc/d618825132.html,e student

list

set index to nl.idx

list

set index to xb.cdx

set order to sex

list

set order to bjh

list

set order to zh

list

set index to xbnl

set order to zh2

list

use student2

list

8.delete tag bjh

对于单索引,非结构复合索引文件通过操作直接删除。

delete file nl.idx

-----查找---------

locate----seek---find ---》查询

查询----直接查询--不需要事先对表进行索引的查询locate ,特点:使用方便,速度慢----索引查询---需要事先对表进行索引seek 、find 特点:使用较复杂,速度快

locate---定位(直接查询,任意情况下都能使用)

continue ,display配合使用.

continue 1.不单独使用,必须和locate配合使用,

2. locate在前面,continue 在后面

3.可以1个locate 多个continue

4.continue是按locate的条件转跳记录,不同于skip .

例如逐条显示女性的记录。

locate for ......(for 性别="女")

do while not eof()

.......

。。。。。。

continue

enddo

seek---查找

find----发现

@x,y say ...get..

read

seek --- (1) 必须要建立索引的,该索引还要起作用

(2)seek 只对索引关键字(正在起作用的索引)进行查询-->seek "张三" 必须事先

按姓名建立索引,而不是学号等其他字段建立索引。

(3)多用于字符型数据,使用时要用字符定界符(" ",' ', [ ])。

find ----(1)(2)同seek ,(3)C,可以不用定界符

(4)find是动作,found()是函数,名词--->.t.

用find执行动作,用found()来看结果。--->.t. .f.

--------关系-------------------------------------------------------VF数据库---

关键字---》以某个字段,或者字段组合作为索引项目,这个字段,或者字段组合称之关键字。-->索引

主关键字----->保证记录不重复的关键字--->主索引、候选索引

外部关键字--->某个字段,字段组合是一个表(表1)主关键字,同时又是另一个表(表2)的关键字,

这个字段,字段组合称之另一个表(表2)的外部关键字. --->普通索引永久性联系一方----》多方的连线--->(只有数据库表才有此操作,此操作在数据库设计器中完成)

1.父表建立主索引,子表建立普通索引。

2.主索引、普通索引同一字段(类型、宽度要一致,与索引项目名无关)

3.从主索引划线到普通索引

临时性联系set relation to

VF数据完整性:

1.实体完整性---记录唯一性------>主索引或者候选索引(主索引)

2.域完整性----属性的取值的范围----->字段有效性规则

3.参照完整性---多表的联系----->表之间的永久性联系、参照完整性约束

参照完整性规则---》要先清理数据库

更新:级联、限制、忽略

删除:级联、限制、忽略

插入:限制、忽略

思考题:为什么插入规则没有级联?

当无法清理数据库时,方式1.clear all+close all

方式2.退出VF,再次进入VF,重新操作.

1.参照完整性规则表格中有多个永久性联系,请先确定好操作对象,再行设置规则。

2.父表的关联字段是主索引,不可以改为重复值。

3.父表的主索引方的值在子表中没有,则改动不影响子表。

4.主索引、普通索引同一字段(类型、宽度要一致),否则改动无效果。

相关主题
文本预览
相关文档 最新文档