数据库管理系统DBASEⅢ
出处:按学科分类—农业科学 中国农业出版社《植物保护统计手册》第143页(19971字)
DBASEⅢ是一种功能强大,简单易学,灵活方便的数据库管理系统。它拥有118条命令(包括34条SET命令)和37个函数。在此我们并不逐一介绍这些命令和函数,仅介绍一些最基本的概念和功能,使读者能够更方便和灵活地使用植保专业统计软件。
一、简介
(一)什么是数据库 数据库就是以一定的组织方式动态存储的相互关联的数据的集合。它能以最佳的方式,最小的冗余为多个用户或应用程序服务。它可独立于使用它们的程序;数据的增加、检索、修改,删除等操作由公用的程序来完成。
DBASEⅢ的一切操作都是对数据库而言的,只要数据能成为二维表格就可以组成数据库,DBASEⅢ数据库文件的扩展名规定为“DBF”,所以在磁盘上凡扩展名为.DBF的文件都是数据库文件。
在这个二维表格(表6-1)中,共有七个字段,每一列为一个字段,字段名是bh,sm,zc,xb,nl,gz,cs。每一行为一条记录,共有9条记录,它记录了每一个人的基本情况。这就构成了一个很简单,但又是很正规的数据库文件。
表6-1 人事档案数据库文件(RSDA.DBF)
注释:1 职称栏中:1——高级农艺师;2——农艺师;3——助理农艺师
2 性别栏中:1——男;2——女
(二)DBASEⅢ主要指标 DBASEⅢ可用于交互式运行或应用程序开发工作,具有完整的关系运算特征,使用方便。同时具有“自动运行”方式,简明的HELP帮助提示,ASSIST引导你一步步地进行工作。
.每个记录可有128个字段,可容纳4000个字符。
新型的备注字段(MEMO)数据类型使记录可达500000字符长。
.每个文件可容纳10亿个记录;
.同一时刻可使用10个数据库文件;
.每个字段的字符数最多254个字符;
.字段内数值精度为15.9位;
.内存变量可达256个(可占6000个字节)九种文件类型。
(三)文件类型 DBASEⅢ可以管理以下九种类型的文件
1.数据库文件(.DBF)
2.数据库备注文件(.DBT)
3.索引文件(.NDX)
4.报表格式文件(.FRM)
5.标签格式文件(.LBL)
6.命令文件(.PRG)
7.内存变量文件(.MEM)
8.屏幕格式文件(.FMT)
9.文本文件(.TXT)
(四)符号的约定
〈…〉内容由用户提供。
[…]内容是可选项。
/ 表示两个选择项中的任一个选择。
n 为指定的一个数值。
二、数据库的基本操作
我们已经知道了数据库就是把数据组成一层栏目的表格,并对表格进行处理。存储一层栏目的表格,就称数据库。那么怎样建立数据库,并对其进行操作,则是我们的核心内容。
(一)如何进入DBASEⅢ 运用DOS的有关命令,进入DBASEⅢ所在的子目录,例如DBASEⅢ放在DBASE子目录中,操作如下:
c:\〉cd dbase
c:\dbase\〉dbase
此时屏幕上显示一些提示,并在左下角出现一个圆点提示符,如下所示:
注:“〉”以前的内容均为系统提示,“〉”以后的内容要用键盘敲入。
“”表示按回车键。
(二)建立数据库
命令格式:CREATE[〈文件名〉]
例如:建立一个名为RSDA.DBF的数据库。操作如下:
.CREATE RSDA.DBF
此时将进入屏幕编辑方式,用户可用系统提供的屏幕编辑功能,输入数据库的结构。
(三)数据库文件的结构 数据库文件的结构包括以下四个部分,它们是:
1.字段名 字段名以字母或汉字开头,最长不得超过10个ASCII字符。一个数据库文件最多可以有128个字段。如A1,AB,姓名,Last-name等都是正确的字段名。而l-A,A*B等都是不允许的。
2.字段类型
C-字符型:只能输入ASCII字符
N-数值型:只能输入数字
1-逻辑型:只能输入大、小写的y,n,t,f
D-日期型:按MM/DD/YY输入日期
M-备注型:以字处理的方式输入内容
3.字段宽度(Width) 字符型字段的宽度可为1-255;数值型字段的宽度最多允许19位(小数点也要算一位)。
4.小数位数(dec) 例如上面的RSDA.DBF,其数据库结构如下:
(四)打开数据库文件 要想对已建好的数据库进行操作,首要的步骤是打开数据库,其格式如下:
USE[〈文件名〉]
例如:要打开刚刚建好的RSDA.DBF数据库,操作步骤为:
.USE RSDA.DBF
(五)对数据库内容进行编辑
1.追加记录 只要数据库文件处于打开状态,随时都可为其追加新记录,追加新记录使用的是APPEND命令,其格式如下:
APPEND[BLANK]
该命令既可在只有结构没有数据的空数据库添加数据记录,又可在已有一些记录的数据库文件末尾追加新记录。
命令行中的[BLANK]为可选项,如果给出此可选项,则在当前打开的数据库文件的后面追加一个空记录。
例如:要增加刘万才的人事档案,则操作步骤如下:
.use RSDA.DBF
.append
此时记录号将变成10。
表6-2 人事档案数据库文件(RSDA.DBF)
2.插入记录 如果需要在数据库文件的中间插入一条新记录,可使用INSERT命令,它的格式是:
INSERT[BFFORE][BLANK]
在数据库文件中,有一个用来指示记录位置的指针,我们把指针所指向的记录称为当前记录。INSERT命令可以在当前记录的前面或后面插入一条新记录或空记录。
若给出选择项[BFFORE],则可在当前记录的前面插入一条新记录。例如:要在张萌的后面加上王建强,其操作步骤如下:
.use RSDA.DBF
·go3
.insert
此时数据库将有如下变动:
表6-3 人事档案数据库文件(RSDA.DBF)
3.修改记录
(1)用于对记录的修改
命令格式:EDIT[[RECNO]〈N〉]
例如:.use RSDA.DBF
·gO 5
.edit
(2)有选择地对记录进行修改
命令格式:CHANGE[〈范围〉][FIELDS〈字段名清单〉]
[FOR/WHILE〈条件〉]
例如:要普调一级工资,凡工资小于90元的,均改为98元。
.use RSDA.DBF
.change all fields bh,sm,gz for gz〈90
此时可在全屏幕编辑方式下,逐一进行修改。
(3)全屏幕浏览与编辑具有菜单辅助功能的全屏幕方式下的编辑命令,每个屏幕最多可显示17个记录。
命令格式:BROWSE[FIELD〈字段名清单〉]
例如:.use RSDA.DBF
.brow
或 .use RSDA.DBF
.brow fields bh,sm,nl
在全屏幕编辑方式下,其功能键的功能如下:
Pg Up 向前翻一页
Pg Dn 向后翻一页
Ins 插入与覆盖状态的转换开关
Del 删除光标所在的字符
End 光标移到下一项
Backspace 删除光标前面的字符
Ctrl+End 存盘(当对数据进行编辑后,要用Ctrl+End先存盘,后退出)
Esc 异常结束全屏幕方式或终断程序执行
Ctrl+← 屏幕向左滚动一个字段
Ctrl+→ 屏幕向右滚动一个字段
Ctrl+N 增加一个字段
Ctrl+Y 删除一个字段
Ctrl+U 删除一条记录
Fl 帮助清单
Ctrl+HOME 可对数据库进行特定的操作,它将显示如下信息:
其功能如下:
Bottom 到数据库文件的底部
Top 到数据库文件的顶部
Lock 对给定的字段(列)进行锁定,即无论屏幕怎样移动,被锁定的字段将永远保持在屏幕上。
记录号 给出记录号后,光标将调到记录号所在的行上。
Freeze 固定编辑某一字段,即光标仅在给定的字段上移动,只能对给定的字段进行编辑。
(4)以替代方式修改 将数据库字段的内容改变为新的规定值。
命令格式:REPLACE[〈范围〉]〈字段名1〉WITH〈表达式1〉
[,〈字段名2〉WITH〈表达式2〉...][FOR/WHILE〈条件〉]
例如:要普调一级工资,凡工资小于90元的,均改为98元。
.use RSDA.DBF
.repl gz with 98.00 for gz〈=90.00
此时数据库变动如下:
表6-4 人事档案数据库文件(RSDA.DBF)
4.删除记录
(1)为记录加删除标记
命令格式:DELETE[〈范围〉][FOR/WHILE〈条件〉]
例如:李小帆已调走,但在浩瀚的人事档案库中又不知其所在的记录号,则操作如下:
.use RSDA.DBF
.dele all for sm=“李小帆”
.list
此时可见在第10号记录上,有一个*。此时该记录并未真正地被删除,仅仅做了删除标记而已。
(2)恢复加了删除标记的记录
命令格式:RECALL[〈范围〉][FOR〈表达式〉]
.use RSDA.DBF.
.recall all for recno()〈=11
此时带有删除的记录将被恢复。
(3)清除加了删除标记的记录
命令格式:PACK
.use RSDA.DBF
.pack
执行此命令后,凡是带有删除标记的记录不可再恢复,永远地被删除了。
(4)清除数据库中的所有记录
命令格式:ZAP
例如:.use RSDA.DBF
·zap
执行此命令后,数据库中的所有记录均被删除,仅剩库结构。
(六)记录的显示和定位
1.显示结构
命令格式:LIST STRUCTURE[TO PRINT]
命令格式:DISPLAY STRUCTURE[TO PRINT]
2.显示记录
命令格式:LIST[OFF][范围][〈表达式清单〉][FOR/WHILE〈条件〉][TO PRINT]
命令格式:DISPLAY[OFF][范围][〈表达式清单〉][FOR/WHILE〈条件〉][TO PRINT]
*LIST 是将整个内容显示完后才停止;
DISPLAY是列满一屏后暂停,等待用户按任意键后继续。加上TO PRINT后,屏幕上显示的内容将在打印机上打印出来。
3.记录指针定位
(1)命令格式:GO[TO]〈数值表达式〉/TOP/BOTTOW将记录指针指向特定的记录。
例:.use rsda.dbf
.go 3 指针指向第3号记录
.go top 指针指向第1条记录
.go bott 指针指向最后1条记录
(2)命令格式:SKIP[+/-〈数值表达式〉]
向前或向后移动数据库的记录指针。
例:当前指针指在第8号记录
.skip-3 指针前移3个记录,指向第5号记录
·skip+2 指针后移2个记录,指向第7号记录
(七)数据库文件的排序、索引及查询
1.排序 将数据库按指定字段排序,产生新的数据库文件。
命令格式:SORT TO〈新文件名〉ON〈字段1〉[/A][/D][/C][,〈字段2〉[/A][/D][/C]…[范围][FOR/WHILE〈条件〉]
当未给出任选项/D,是按升序排序;当给出/D而无/A时,是按降序排序;当给出/C时,对字符型字段排序时英文不分大小写,均按大写字母的ASCII码计算。
例如:按处室排序,并把排序结果放在一个新的库名为rsdal.dbf中,其操作如下:
.use rsda.dbf
.sort to rsdal.dbf on cs
此时rsdal.dbf中的数据全部按处室为A、B、C的顺序重新组合了。
2.索引
(1)索引命令
命令格式:INDEX ON〈关键字表达式〉TO〈文件名〉
该命令按给定的关键字表达式为当前数据库文件建立索引文件。
注意:同一个数据库文件最多可以生成7个不同的索引文件;INDEX操作并不把数据库文件中的记录进行物理的重排列,即当结束此运行,关闭所用的数据库后,数据库记录顺序无变化。
例:.USE RSDA.DBF
.INDEX ON GZ TO GZ.NDX
.LIST
此时可见数据按工资从小到大重新排队。
(2)索引的使用 由于索引文件是依赖于数据库文件而存在的,所以索引文件不能单独使用。若要使用某一个索引文件,则必须在打开该索引文件的同时也要打开与之相适应的数据库文件。
命令格式1:
USE〈文件名〉INDEX〈索引文件名清单〉
例:.USE RSDA INDEX GZ
命令格式2:
在数据库文件打开之后再打开索引文件
SET INDEX TO〈索引文件名清单〉
例:.USE RSDA.DBF
.SET INDEX TO GZ.NDX
.LIST
(3)重新索引 重建现存的索引文件
命令格式:REINDEX
例:.USE RSDA INDEX GZ
.REINDEX
(4)查询
①直接查询
命令格式:LOCTAC[〈范围〉]FOR〈条件〉
指向满足条件的记录。
例如:要找姓名为宋山亭的人,其操作步骤如下:
.use rsda.dbf
.locate for sm=“宋山亭”
.?recno()
. 6
②索引查询
a.命令格式:FIND〈字符串〉
指向具有与指定的字符号串或数值相匹配的索引关键字的记录。
例:.USE RSDA.DBF
.INDEX ON SMTO SM.NDX
.FIND“王建强”
.?recno()
4
b.命令格式:SEEK〈表达式〉
指向具有与指定表达式相匹配的索引关键字的记录。
例如:.USE RSDA INDEX SM.NDX
.SEEK“王建强”
.RECNO()
4
(八)数据记录的计数、求和、求平均数及分类求和
1.计数 对指定的记录进行计数,并显示计数结果。
命令格式:COUNT[〈范围〉][FOR/WHILE/〈条件〉]
[TO〈内存变量〉]
例如:想要知道C处室共有多少人,并将总人数放到内存变量aa中,其步骤如下:
.use rsda.dbf
.count all for cs=“C”to aa
.3 records
2.求和 对指定的数据库记录进行计算并显示表达式的和。
命令格式:SUM[〈范围〉][〈表达式清单〉][TO〈内存变量名单表〉][FOR/WHILE〈条件〉]
例如:想要知道A处室的工资总额,并将工资总额放到内存变量gzl中,其步骤如下:.use rsda.dbf
.sum all gz to gzlfor cs=“A”
.5 records summed
gz
572.00
3.求平均数 计算并显示指定的数据库记录的一个或多个字段表达式的算术平均值。
命令格式:AVERAGE[〈表达式清单〉][〈范围〉][FOR/WHILE〈条件〉][TO〈内存变量名清单〉]
例如:想要知道C处室的平均年龄,并将结果放到内存变量nl1中,其步骤如下:
.use rsda.dbf
.aver nl forcs=“C”tonl1
3 records averaged
NL
39
4.分类求和 对有序的数据库按关键字对数字型字段求和,并产生新的数据库。
命令格式:TOTAL ON〈关键字段〉TO〈文件名〉[〈范围〉]
FIELDS〈字段清单〉][FOR/WHILE〈条件〉]
例如:想要知道各处室的工资总额是多少,并将其值放到一个库名为rsda2.dbf中,其步骤如下:
.use rsda.dbf
.index on cs to cs.ndx
.total on cs to rsda2.dbf fields gz
1 1 records totalled
3 records generated
.use rsda2.dbf
.brow
三、辅助操作命令
(一)列文件目录
命令格式:DIR[磁盘驱动器号][〈PATH\〉][通配符]
显示指定磁盘驱动器上的后缀为.dbf的文件名。
例:DIR
(二)删除磁盘文件
命令1:ERASE〈文件名〉
删除文件。
例:.ERASE ZZGDAILY.DBF
命令2:DELETE FILE〈文件名〉
对指定的记录做删除标记。
例:.DELE FILE ZZGPG.DBF
(三)文件改名
命令格式:RENAME〈原文件名〉TO〈新文件名〉为文件改名。
例:.RENAME ZB.PRG TO ZB1.PRG
(四)列ASCII文件内容
命令格式:TYPE〈文件名〉[TO PRINT]输出磁盘文件的内容。
例:.TYPE zB.PRG TO PRINT
(五)关闭文件
命令格式:CLOSE〈文件类型〉
关闭指定类型的文件。
例:.CLOSE DATA
(六)文件复制
1.命令格式:COPY FILE〈文件名1〉TO〈文件名2〉复制各类文件。
2.命令格式:COPY TO〈文件名〉[〈范围〉][FIELDS〈字段清单〉][FOR/WHILE〈条件〉][SDF/DELIMITED[WITH〈分界符〉/BLANK]]
将打开的数据库复制到另外的数据库文件中,或者在有最后一任选项时,复制到一个文本文件中。
例:植物保护专业统计中的数据编码数据库sjbm.dbf,要将其变为其后缀为.txt的文本,其操作如下:
.use sjbm.dbf
.copy tosjbml.txtsdf
(七)从磁盘文件追加记录
命令格式:APPEND FROM〈文件名〉[FOR/WHILE〈条件〉][SDF/DEL IMTED[WITH[〈分界符〉/BLANK]]]
从其他文件追加记录到当前数据库文件之中。
例:现将在pe下编辑的sjbml.txt的文本文件中的内容重新放到sjbm.dbf中,其操作如下:
.use sjbm.dbf
·zap
.appe from sjbm!.txt sdf
四、常用函数
DBASEⅢ为用户提供了37种函数,这些函数可以出现在命令行中、表达式中或用?命令直接调用,在此我们仅列出比较常用的10个函数。
(一)字符变日期函数CTOD()
格式:CTOD(‘〈字符串〉’)
该函数将给定的字符串转换成日期型函数,要求给定的字符串必须是“月/日/年”的形式,其中月、日和年都必须是两位数字。
例:.date=“01/12/91/”
01/12/91
.?ctod(date)
01/12/91
.?ctod(date)+31
02/12/91
(二)日期变字符函数DTOC()
格式:DTOC(‘〈日期型表达式〉’)
该函数是ctod的反函数,它将给定的日期型表达式的值转换成一个字符串。
(三)系统日期函数DATE()
格式:DATE()
该函数将返回系统日期。所谓系统日期是指开机引导操作系统时输入的日期。
例:.?date()
显示:
01/31/91
(四)数值变字符函数STR()
格式:STR(〈数值表达式〉,[〈长度〉],[<小数位>])
该函数先计算数值表达式的值,然后将其变成字符串。
例:?str(243.12,6,2)
243.12
(五)取子串函数SUBSTR()
格式:SUBSTR(‘〈字符串〉’,〈子串开始位置〉[,〈子串字符个数〉])
该函数的功能是从给定字符串中取出一部分形成一个子字符串。
例:.s=“I am a student”
I am a student
.? substr(s,7,7)
studen
(六)检测文件结束函数EOF()
格式:EOF()
当记录指向文件结束位置时,该函数的值为真,否则,值为假。
例:.use rsda
.5
.? eof()
.F.
.go bottom
.? eof()
.F.
.skip
record no.12
·? eof()
.T.
(七)测当前记录号函数RECNO()
格式:RECNO()
该函数用来测试当前指针所指记录的记录号。
例:.use rsda
.? recno()
1
.skip 3
record no.4
(八)取整函数INT()
格式:INT(〈数值表达式〉)
该函数先计算〈数值表达式〉的值,然后截去值的小数部分,保留整数部分。
例:.x=3.141592*10
31.415920
? INT(X)
31
(九)宏代换函数&
格式:&〈字符型内存变量〉
该函数的功能是用字符型内存变量的值代替内存变量的名,究其实质,它只是去掉了字符型内存变量值的引号。它的主要用途有以下几个方面:
1.代替一条命令
例:程序中要反复用到命令“DISPLAY ALL”,则可将该命令存入一个内存变量之中:
.STORE“DISPLAY ALL”TO D
在需要用此命令的地方,可用宏代换引用:
&D
2.代替字段名
例:.STORE“SM”TONAME
.USE RSDA
.? &NAME
李红
3.代替文件名
例:.R=RSDA
.RSDA
.USE&R
4.将字符型数据转换为数值型数据
例:.X=“123.5”
.Y=&X
.?Y+10
.133。5
(十)测字符串长度函数LEN()
格式:LEN(‘〈字符串〉’)
该函数用来测试给定字符串的长度,它的返回值是字符串中字符的个数。注意,空格也包括在内。
例:.? LEN(“THIS IS A BOOK”)
五、程序设计
(一)程序的编写方法
1.用modify comm命令,在DBASE下编写。
2.在PE,Word star,wps等文本编辑方式下编写。
(二)屏幕格式的编写方法
1.用modify screen命令,在DBASE下编写。
2.在PE,Word star等文本编辑方式下用命令文件来控制屏幕格式的输出。
(三)命令文件的执行
1.在圆点提示符下:
格式:.DO〈文件名〉
例:在PE下已编辑好了一个命令文件,文件名zb.prg
.DOZB
2.在操作系统提示符下:
格式:C〉DBASE〈文件名〉
例:在PE下已编辑好了一个命令文件,文件名zb.prgC〉DBASEzb
注:此时假定该命令文件被装在根目录下。
(四)有关命令
1.键盘命令
(1)Wait[提示]to〈内存变量〉
暂停程序,等待用户按键干预。
例:.WAIT”请调整好打印纸,按任意键继续”
(2)Accept[提示]to〈内存变量〉
将从键盘上获得的一个字符串存入一个内存变量中。
例:ACCEPT”是否继续打印下一页,Y/N”to cc
(3)Input[提示]to〈内存变量〉
将用户输入的数据送入内存变量中。
例:.INPUT”请输入你的年龄=“to cc
2.结构式程序设计命令
(1).Do while..〈命令〉..enddo
.do whlie执行一个程序或过程
.Exit退出do while循环
.Loop跳到do while循环的开始处
.enddo终止do while命令
(2)do case..case..[OtherWise]…endcase
.Do case允许执行几条路径中的一条
.Case路径之一
.Otherwise前面所列出的所有路径都不能走时所应走的路径
.Endcase终止一条do case命令
(3)If..[else]..endif
.If开始有条件地执行命令
.E1se允许在if中执行另一条路径
.Endif终止一条if命令
例:
IF GZ〉=90.and.XB=2
10,10 SAY”工资在90.00元以上的女工是-”+SM
ELSE
10,20 SAY”工资少于90.00元的职工是-”+SM
ENDIF
3.其他命令
(1)Return退出或返回上一级调用程序并执行下一条命令。
例:.RETURN
(2)quit关闭全部文件并退出DBASEⅢ。
例:.QUIT
注:这一命令是很关键的一步,所有用户在使用DBASEⅢ退出时,必须经过这一步。