大学程序设计-数据表基本操作课件_第1页
大学程序设计-数据表基本操作课件_第2页
大学程序设计-数据表基本操作课件_第3页
大学程序设计-数据表基本操作课件_第4页
大学程序设计-数据表基本操作课件_第5页
已阅读5页,还剩158页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

大学程序设计——数据表基本操作41、俯仰终宇宙,不乐复何如。42、夏日长抱饥,寒夜无被眠。43、不戚戚于贫贱,不汲汲于富贵。44、欲言无予和,挥杯劝孤影。45、盛年不重来,一日难再晨。及时当勉励,岁月不待人。大学程序设计——数据表基本操作大学程序设计——数据表基本操作41、俯仰终宇宙,不乐复何如。42、夏日长抱饥,寒夜无被眠。43、不戚戚于贫贱,不汲汲于富贵。44、欲言无予和,挥杯劝孤影。45、盛年不重来,一日难再晨。及时当勉励,岁月不待人。第4章数据表基本操作数据表的建立数据表操作命令数据表的排序与索引数据表的查询与统计数据表之间的操作1.表结构的建立建表工具表设计器打开工具的方法,新建表时会打开该工具菜单方法命令方式,CREATE表结构的建立过程“文件”“新建”选“表”,按“确定”在“表设计器”中输入(1)字段名(2)字段类型(3)字段宽度(4)NULL值建完之后,按”确定”请先确认自己的工作目录字段名由英文字母、中文字、数字和下划线组成,不能含空格,且必须以汉字或字母开头,自由表的字段名至多10个字符,数据库表至多128个字符字段数最多255个注意事项类型13种类型:字符型、数值型、货币型、日期型、日期时间型、逻辑型、备注型、通用型、整型、浮点型、双精度型、二进制字符型与二进制备注型注意事项字段宽度除字符型、二进制字符型、数值型和浮点型外,其它9种字段宽度是固定不变的字段类型逻辑型日期型备注型通用型二进制备注型整型日期时间型双精度型货币型固定宽度184444888小数点占一位,数值型与浮点型不得超过20,有效位为16位,小数位数不超过9位注意事项如果表结构中包含有“备注型”或“通用型”字段,则创建两个文件,扩展文件名为:dbf与fpt;否则,只创建一个dbf文件方法一:“文件””打开”,或按”打开”按钮.选择文件类型(.dbf)

文件名方法二:USE表名建议用此方法打开表文件注意:打开与显示不同,状态栏上显示表是否打开。2.打开表文件修改表结构的过程打开表文件“显示”“表设计器”(1)修改字段属性(2)插入字段(3)删除字段(4)调整字段位置3.表结构的修改问题手工追加多条记录的菜单命令是什么?手工追加多条记录的窗口命令是什么?追加一条记录的菜单命令是什么?如何输入备注型与通用型数据?4.1.2表记录数据的输入输入多条数据菜单命令显示浏览显示追加方式窗口命令

Append追加单条记录显示浏览表追加新记录从其它文件中追加显示浏览表追加记录如何输入数据一般字段的输入日期型输入格式:mm/dd/yy,用setdatetoymd,setcenturyon备注字段的输入备注窗口打开:双击(或Ctrl+Pgdn)备注窗口关闭:关闭(或ctrl+W)保存,Esc(Ctrl+Q)放弃,Memo表示有数据通用字段的输入通用窗口打开:双击(或Ctrl+Pgdn)“编辑”+“插入对象”(“选择性粘贴”)通用窗口关闭:关闭(或ctrl+W)保存,Esc(Ctrl+Q)放弃,Gen表示有数据如何浏览数据?浏览方式如何切换?如何修改数据?4.1.3表数据的浏览与维护

浏览数据

打开表文件显示浏览两种浏览方式切换显示浏览显示编辑在浏览窗口修改记录删除记录显示浏览表删除记录(彻底删除)4.2数据表操作命令4.2.1表结构操作命令建表结构的命令?打开表的命令?关闭表的命令?显示表结构的命令?修改表结构的命令?复制表结构的优点与命令?如何复制表结构与记录?创建表结构命令格式:CREATE[<表文件名>/?]

功能:新建一个VisualFoxPro数据表文件名可以包含盘符与路径CREATE=CREATE?,这时会弹出创建对话框如:CREATEXSCJ打开数据表命令格式:USE[<表文件名>]

功能:打开指定的数据表或关闭数据表表打开时,记录指针指向首记录表打开同时,自动打开相应备注文件(·FPT)当缺省<表文件名>,关闭当前工作区中的表文件如:USEZGDA

关闭数据表命令格式1:CLOSEDATABASES

关闭数据库与表文件

格式2:CLOSEALL

关闭所有文件

格式3:CLEARALL

关闭所有文件,清除内存

格式4:QUIT

关闭所有文件,退出VFP显示表结构命令格式1:LISTSTRUCTURE

格式2:DISPLAYSTRUCTURE注意:DISPLAY是分屏显示,如:

USEZGDADISPSTRULISTSTRU

修改表结构命令格式:MODIFYSTRUCTURE

功能:打开“表设计器”窗口,显示并修改当前数据表的结构注意:系统自动备份原数据表文件,其扩展文件名变化:.dbf.bak,.fpt.tbk

如:USEZGDAMODISTRU

复制表结构命令格式:COPYSTRUCTURETO<表文件名>[FIELDS<字段表>]

功能:对当前数据表结构进行复制,形成一个指定名称的新表结构。例1创建新表zgbak.dbf,使其结构与zgda.dbf一样usezgdacopystrutozgbakusezgbakliststruuse

复制数据表命令格式:COPYTO<表文件名>[<范围>][FOR<条件>][WHILE<条件>][FIELDS<字段表>][TYPE<文件类型>]

功能:对当前数据表中指定范围内符合条件的记录进行复制,形成一个指定名称的新数据表。注意:(1)缺少所短语时,新文件是和原表文件完全相同的表文件

(2)选择TYPE短语时,新文件的类型与TYPE所指定的文件类型一致例2由表zgda创建表nanzgfile保存男职工的记录,创建文本文件nvzgfile保存女职工的记录USEZGDACOPYTONANZGFILEFOR性别="男“COPYTONVZGFILEFOR性别=“女“TYPESDFUSENANZGFILELIST!NOTEPADNVZGFILEUSE4.2.2追加与插入记录命令如何手工追加记录?如何从其它文件中追加记录到当前表文件?

如何插入一条空记录?

追加记录命令格式:APPEND[BLANK]

功能:在当前数据表的末尾增加新记录注意:缺省BLANK,弹出记录编辑窗口,这时等价菜单命令:“显示”“追加方式”。APPENDBLANK类似于菜单命令:“表”“追加新记录”

从其他表追加记录命令格式:APPENDFROM<表文件名>[<范围>][FOR<条件>][WHILE<条件>][FIELDS<当前表字段表>][TYPE<文件类型>]

功能:将指定表文件中指定范围内符合条件的记录自动添加到当前数据表的末尾注意:若由TYPE指定类型,则从指定类型的文件添加,常见的有txt,xls等,否则为表文件。等价于菜单命令:“表”“追加记录”例3创建nanzg与nvzg表,并分别从nanzgfile.dbf与nvzgfile.txt追加数据usezgdacopystrutonanzgusenanzgappendfromnanzgfilebrowlastusezgdacopystrutonvzgusenvzgappendfromnvzgfiletypesdfbrowlastuse注意:copystructureto+appendfrom等价于copyto3.插入记录命令格式:INSERT[BLANK][BEFORE]功能:在当前数据表指定的位置上插入一条新记录。注意:选BLANK时,插入空记录,否则,弹出记录编辑窗口;选BEFORE时,在当前记录前插入,否则,在当前记录后插入。如:USENANZGGO3INSERTBLANK4.2.3记录指针移动命令怎样移动记录指针?相对移动与绝对移动有什么不同?其它命令会移动记录指针吗?记录指针的绝对移动格式1:GO[TO]<expN>

功能:将记录指针移到第<expN>条记录。格式2:GO[TO]TOP

功能:将记录指针移到当前表的第一条记录。格式3:GO[TO]BOTTOM

功能:将记录指针移到当前表最后一条记录。

记录指针的相对移动格式:SKIP[<expN>]

功能:相对于当前记录,记录指针向上或向下移动若干条记录。说明:当<expN>的值为正数时,向下移动<expN>条记录;当<expN>的值负数时,向上移动<expN>条记录;缺省<expN>时,默认向下移动一条记录。当expN有小数时,只取整数部分,go1.9与go1等价,skip2.5与skip2等价

关于记录指针的问题如果记录指针指向文件的开头,则bof()为.T.,否则为.F.如果记录指针指向文件的结尾,则eof()为.T.,否则为.F.Recno()返回记录号,即记录指针指向记录的序号,如recno()为3,表示第3条记录的开头,第2条记录的结尾.Reccount()计算表文件的记录个数.简写为recc()表文件刚打开时,recno()为1,但并不是表文件的开头第一条记录不是表文件的开头,但在文件的开头时,记录号还是为1.换言之,recno()为1并不一定在文件开头,bof()可能为.t.,也可能为.f.,但bof()为.t.时,recno()一定为1当指向最后一条记录时,并不是文件的结尾.若文件总共有14条记录,当recno()为14时,表示指向第14记录的前面,若recno()为15时,表示在14条记录的后面,此时,eof()为.t.当go1或gotop后,再skip-1,记录不会减1,但bof()的值变为.t.,当gobottom或gorecc()后,再skip或skip1,记录号会加1,且eof()的值变为.t.Usezgda?reccount()?recno()Go5?recno()Gotop?recno()?bof()Skip5Recno()Skip与go命令不能超过记录的范围.UsezgdaSkip-3?recno()Skip6?recno()Gobottom?recno()?eof()Skip1?recno()?eof()4.2.4显示记录命令如何在主窗口中显示记录显示记录与浏览记录有什么差别?显示记录命令格式1:LIST[<范围>][FOR<条件>][WHILE<条件>][[FIELDS]<表达式表>][OFF][TOPRINT]格式2:DISPLAY[<范围>][FOR<条件>][WHILE<条件>][[FIELDS]<表达式表>][OFF][TOPRINT]

功能:输出指定范围内满足条件的各个记录的有关内容。注意:LIST的缺省范围为ALL,DISPLAY的缺省范围为当前记录,但有条件短语时,默认范围为ALL.选OFF,不输出记录号例4(1)显示zgda中男职工记录的编号与姓名(2)第8条记录的编号与姓名usezgdalist编号,姓名for性别=[男]或disp编号,姓名for性别=[男]或listfor性别='男'fiel编号,姓名go8disp编号,姓名或listrecord8或disprecord8思考:list8是什么意思?Disp8呢?4.2.5删除记录命令怎样逻辑删除?即delete命令使用.物理删除(pack)与逻辑删除的不同.恢复逻辑删除数据的命令是什么?Recall的使用.Zap的意义?1.逻辑删除记录命令格式:DELETE[<范围>][FOR<条件>][WHILE<条件>]功能:对指定范围内满足条件的记录打上删除标志(逻辑删除)。注意:(1)缺省范围与条件选项时,仅对当前记录删除;(2)SETDELETEDON可以屏蔽删除记录,即不显示;(3)用测试函数deleted()可以显示当前记录是否有删除标志例5创建zgda表的备份文件zgbak,然后把zgbak中年龄大于等于45岁的记录打上删除标志,最后彻底删除usezgdacopytozgbakusezgbakdelefor年龄>=45browlistsetdeletedon&&屏蔽有删除标志的记录browlistpackuse2.去除删除标志命令格式:RECALL[<范围>][FOR<条件>][WHILE<条件>]功能:去除指定范围内满足条件的记录已有的删除标志。注意:缺省范围和条件短语时,仅去当前记录的删除标志UsezgdaCopytotmpUsetmpGo1Dele?deleted()Recall?Deleted()UseDelefiletmp.dbf3.物理删除记录命令格式:PACK功能:对当前数据表进行压缩,剔除带有删除标志的记录,永久删除。如:usezgdacopytozgbakusezgbakdelefor年龄>=45?reccount()pack?reccount()use思考:相应的菜单命令是什么?Delete呢?4.一次性删除全部记录命令格式:ZAP功能:删除当前数据表中的所有记录,使其成为只剩有表结构的空表文件。注意:zap=deleall+pack,但zap速度更快如:usezgdacopytotmpusetmplistzaplistuse4.2.6修改记录命令EditChangeBrowse如何成批替换记录?Replace命令的使用.4.2.6修改记录命令1.编辑修改命令格式1:EDIT[<范围>][FOR<条件>][WHILE<条件>][FIELDS<字段表>]

格式2:CHANGE[<范围>][FOR<条件>][WHILE<条件>][FIELDS<字段表>]

功能:弹出编辑窗口对记录进行修改。如:usezgbakeditfor性别=“男”2.浏览修改命令格式:BROWSE[FIELDS<字段表>][LOCK<expN>][FREEZE<字段名>][NOAPPEND][NOMODIFY]功能:以浏览窗口方式显示当前数据表数据并供用户进行修改。注意:(1)此命令等价“显示”“浏览”;(2)NOAPPEND:禁止追加,NOMODIFY:禁止修改(3)LOCK:锁定指定的字段,FREEZE:光标冻结在该字段上如:usezgdacopytozgbakusezgbakbrowlock3browfreeze姓名use3.成批替换修改命令格式:REPLACE[<范围>][FOR<条件>][WHILE<条件>]<字段1>WITH<表达式1>[,<字段2>WITH<表达式2>...]功能:对指定范围内符合条件的记录,用指定的<表达式>值替换指定<字段>的内容。注意:(1)缺少范围与条件短语时,只改变当前记录(2)表达式类型与字段类型必须一致例6(1)将zgbak中的年龄增加一岁,基本工资增加20%;(2)将zgbak第13条件记录的性别改为男;(3)将zgbak中的高工的工资加300。usezgdacopytozgbakusezgbakreplall年龄with年龄+1,基本工资with基本工资*1.2

replreco13性别with“男”replall基本工资with基本工资+300for职称="高工"usezgbak小结菜单命令:建表、修改表结构、显示、追加记录、修改记录窗口命令(建议使用窗口命令

)表结构:创建、显示、修改、复制表基本操作:打开、关闭表的复制:复制命令(结构与数据一起复制)记录添加:追加、插入、从其它文件追加记录移动:相对、绝对记录显示:显示、浏览记录删除:逻辑、物理、全部删除、恢复记录修改:手工修改、成批修改思考已知表文件zgda.dbf,创建zjgz.dbf,包含编号、姓名、基本工资,并相应字段的记录由zgda追加到zjgz中.添加新字段:增加额,类型为N(7,2).添加新字段:总工资,类型为N(8,2).70年前出生的职工的增加额置为200,70年以后(70年出生的)出生的职工为100,总工资为基本工资与增加额的和.最后删除60年以前出生的男职工.请写出命令序列.4.3数据表的排序与索引要点物理排序:Sorton建立索引:Indexon打开索引:Setindexto主控索引:Setorderto索引的三个要素:排序关键字表达式、索引名(标识)、文件名索引使用:建索引打开索引指定主控索引排序方式:物理排序、逻辑排序物理排序会把排序的结果放到一个新文件中,即产生一个新数据表.逻辑排序方法是建立索引表,记载关键字或索引表达的值与记录号,其索引表是一个单独的文件,但相对于数据表来说所占空间小.逻辑排序速度快、效率高、数据冗余少基本概念4.3.1物理排序格式:SORTON<字段1>[/A][/C][/D]

[,<字段2>[/A][/C][/D]...]TO<文件名>[<范围>][FOR<条件>][WHILE<条件>][FIELDS<字段表>]

功能:对指定范围内满足条件的记录按指定<字段>之值的大小重新排序后生成一个给定名称的新数据表文件物理排序注意:(1)缺省范围和条件短语时,范围为ALL(2)生成的文件放在TO短语所指定的文件中,其结构由FIELDS所指定,缺省是与原表的结构相同(3)/A、/D表示升序与降序,同时指定则以最后的为准,默认为升序,/C表示不区分大小写(4)ASCENDING表示所关键都按升序、DESCENDING表示所关键都按降序(5)不能对备注字段和通用字段排序物理排序例7对zgda表中的基本工资按升序,若相同再按出生日期的降序进行排序,排序生成文件名为zggzb.dbf,且文件中只包含姓名、职称、基本工资、出生日期,并显示结果usezgdasorton基本工资/A,出生日期/Dtozggzbfields姓名,职称,基本工资,出生日期usezggzblist物理排序思考:对ZGDA表中性别与职称的降序排序生成文件xbzc.dbf,请写出命令。SORTON性别/D,职称/Dtoxbzc物理排序4.3.2索引类型索引文件类型索引项的类型索引的三个要素是什么?

文件名索引名关键字索引类型

索引文件的类型单索引文件:扩展名为.IDX(index),只包含一个索引项复合索引文件:扩展名为.CDX(compoundindex),可以包含多个索引项并以压缩方式存储结构复合索引文件:与数据表同名的.CDX文件非结构复合索引文件:与数据表不同名的.CDX文件索引类型索引类型类型文件名打开方式打开与更新idx可同名也可不同名命令打开不自动更新,用reindex重建索引结构cdx同名随表打开及关闭随表的更新自动更新非结构cdx不同名命令打开不自动更新,用reindex重建索引工号姓名性别评分011张剑男91008刘俊男85023黄丽女83094高涵男89045郭云女93Zg.dbf记录号姓名4高涵5郭云3黄丽2刘俊1张剑用”姓名”建单索引文件xm索引--单索引文件Xm.idx关键字表达式建单索引文件标识Xm记录号工号20081011302350454094记录号姓名4高涵5郭云3黄丽2刘俊1张剑1.用”工号”建复合索引zgsy,索引标识为gh2.用”姓名”建复合索引zgsy,索引标识为xm索引--复合索引文件Zgsy.cdx标识:gh标识:xm关键字关键字

索引的类型(1)主索引:(2)候选索引(3)普通索引(4)唯一索引索引类型索引类型索引类型适应表类重复值否NULL否索引个数主索引数据库表不能有不能有一个候选索引数据库表自由表不能有不能有多个普通索引数据库表自由表可有可有多个唯一索引数据库表自由表可有,但索引一项可有多个可以用编号建立候选索引吗?用职称呢?索引类型4.3.3索引文件的建立建索引的方法表设计器命令方式建索引的关键之处是什么?索引文件的建立

在表设计器中建立索引步骤打开表打开表设计器索引列中指定,或索引选项卡中建立注意:(1)应先打开表文件;(2)在索引列中指定索引,此时建立的是普通索引,索引项(表达式)为该字段变量,索引标识(名)与该字段变量同名索引文件的建立(3)索引选项卡进行定义复杂的索引(4)表设计器建立的索引为结构复合索引(5)索引名(标识)可任意定义,用来标识该索引(6)表达式可以由表达式生成器生成,也可以自己定义例8用职称的前两个汉字与基本工资的升序建立一个索引标识为zcgz的普通索引索引文件的建立

用命令建立索引格式1:INDEXON<关键字表达式>TO<单索引文件名>[FOR<条件>][COMPACT][UNIQUE][ASCENDING][ADDITIVE]格式2:INDEXON<关键字表达式>TAG<索引标识名>[OF<索引文件名>][FOR<条件>][UNIQUE|CANDIDATE][ASCENDING|DESCENDING

][ADDITIVE]索引文件的建立功能:命令格式1是对当前数据表中记录按<关键字表达式>值的大小排列,建立一个单索引文件。命令格式2是对当前数据表中记录按<关键字表达式>值的大小排列,建立一个复合索引文件中的索引标识。注意:(1)tag指定索引标识(2)additive指明不关闭已打开的索引索引文件的建立例9对zgda表建立单索引文件(1)按照出生日期的升序对所有的记录建立一个单索引文件csrqsy(2)按照性别,性别相同时再按姓名的升序排列对所有的记录建立单索引文件xbxmsy(3)按姓名的升序仅对性别为男的记录建立唯一索引的单索引压缩文件nanxmsy索引文件的建立(1)按照出生日期的升序对所有的记录建立一个单索引文件csrqsy

usezgdaindexon出生日期

tocsrqsy

dispall编号,姓名&&有什么不同?

问题:索引文件名与索引标识是什么?索引文件的建立(2)按照性别,性别相同时再按姓名的升序排列对所有的记录建立单索引文件xbxmsyusezgdaindexon性别+姓名

toxbxmsy

dispall编号,姓名&&有什么不同?索引文件的建立(3)按姓名的升序仅对性别为男的记录建立唯一索引的单索引压缩文件nanxmsyusezgdaindexon姓名

tonanxmsyfor性别="男";uniquecompact

dispall编号,姓名&&有什么不同?use索引文件的建立例10(1)对zgda表中所记录按基本工资的升序建立一个索引标识名为jbgzsy,索引类型为普通索引的结构复合索引(2)对zgda表中所有记录按职称的前两个汉字的降序,若前两个汉字相同则按基本工资的降序建立一个索引标识为zcgzsy,索引类型为唯一索引的结构复合索引(3)对zgda表中所记录按性别与出生日期的升序建立一个索引标识名为xbcsrqsy,索引类型为候选索引的结构复合索引索引文件的建立(1)对zgda表中所记录按基本工资的升序建立一个索引标识名为jbgzsy,索引类型为普通索引的结构复合索引

usezgdaindexon基本工资tagjbgzsyascending

list编号,姓名

索引文件的建立(2)对zgda表中所有记录按职称的前两个汉字的降序,若前两个汉字相同则按基本工资的降序建立一个索引标识为zcgzsy,索引类型为唯一索引的结构复合索引

usezgdaindexonleft(职称,4)+str(基本工资,7,2);tagzcgzsyuniquedescendinglist编号,姓名&&显示了多少条记录问题:索引文件名是什么?索引文件的建立(3)对zgda表中所记录按性别与出生日期的升序建立一个索引标识名为xbcsrqsy,索引类型为候选索引的结构复合索引

usezgdaindexon性别+dtoc(出生日期,1)tag;

xbcsrqsycandidatelist编号,姓名

use索引文件的建立例11(1)对zgda表中的所有性别为男的记录,用基本工资的降序序建立一个索引标识为nangzsy,索引类型为普通索引的复合索引,且索引文件名为gz.cdx(2)对zgda表中的所有记录按基本工资的升序,若基本工资相同再按出生日期的升序建立一个索引标识名为gzrqsy,索引类型为普通索引的复合索引,且文件名为gz.cdx索引文件的建立(1)对zgda表中的所有性别为男的记录,用基本工资的降序序建立一个索引标识为nangzsy,索引类型为普通索引的复合索引,且索引文件名为gz.cdxusezgda

indexon基本工资tagnangzsyofgzfor性别="男"descendinglist编号,姓名问题:索引关键字、文件名、标识是什么?索引文件的建立(2)对zgda表中的所有记录按基本工资的升序,若基本工资相同再按出生日期的升序建立一个索引标识名为gzrqsy,索引类型为普通索引的复合索引,且文件名为gz.cdx

usezgda

indexonstr(基本工资,7,2)+dtoc(出生日期,1);taggzrqsyofgz

list编号,姓名

use索引文件的建立4.3.4索引文件的打开与关闭如何打开索引文件怎样指定索引哪些记录移动命令是针对于索引文件的如何使用索引文件打开索引文件指定索引索引文件的打开与关闭索引文件的打开格式1:USE<数据表文件名>INDEX<索引文件名表>

功能:在打开指定数据表的同时,打开与之相关的一系列索引文件。格式2:SETINDEXTO<索引文件名表>

功能:在数据表已打开的情况下,打开与之相关的一系列索引文件。索引文件的打开与关闭注意:(1)若<索引文件名表>中第一个单索引文件,则该单索引文件起作用;<索引文件名表>中有多个索引文件,但第一个不是单索引文件,则都不起作用(2)<索引文件名表>中有多个索引文件,则按下列顺序排列索引项:单索引文件结构复合索引文件非结构复合索引索引文件的打开与关闭例12(1)打开zgda时,打开单索引文件csrqsy、xbxmsy、非结构复合索引zg.cdx(2)先打开zgda,再打开单索引文件csrqsy、xbxmsy、非结构复合索引zg.cdx(3)如何打开结构复合索引zgda.cdx呢?索引文件的打开与关闭(1)打开zgda时,打开单索引文件csrqsy、xbxmsy、非结构复合索引zg.cdx

usezgdaindexcsrqsy,xbxmsy,gzlist姓名,出生日期索引文件的打开与关闭先打开zgda,再打开单索引文件csrqsy、xbxmsy、非结构复合索引zg.cdxusezgdasetindextozg,csrqsy,xbxmsylist性别,姓名问题:如果复合索引文件中有多个索引,那么哪个索引发生作用呢?如何指定哪个索引发生作用呢?索引文件的打开与关闭

指定主控索引项格式1:SETORDERTO[<expN>][ASCENDING|DECENDING]格式2:SETORDERTO[<单索引文件名>][ASCENDING|DECENDING]格式3:SETORDERTO[[TAG]<索引标识名>][ASCENDING|DECENDING]

功能:指定主控索引文件或主控标识,单索引文件的索引标识与文件名是相同的.索引打开与关闭(1)setorderto或setorderto0命令使当前的主控索引失效(2)不管原索引是升序还是降序,均可以用ASCENDING和DESCENDING对数据表进行重新处理(3)INDEXON姓名TOxmINDEXON出生日期TAGcsrqOFzg索引的建立与关闭SETINDEXTOxmSETINDEXTO姓名SETINDEXTOcsrqSETINDEXTOzgSETORDERTOxmSETORDERTOTAGxmSETORDERTO出生日期SETORDERTOTAGcsrqSETORDERTOcsrqSETORDERTOzg索引建立与关闭Indeon姓名toxmIndeon出生日期;tagcsrqofzg并且zg、xm已经打开例13执行usezgdaindexcsrqsy,xbxmsy,gz后,回答下面问题,其中gz包含索引nangzsy与gzrqsy,结构复合索引包含zcgzsy与xbcsrqsy两索引,csrqsy与xbxmsy是单索引文件(1)显示记录的姓名与编号,把主控索引指向第二项,显示记录的姓名与编号(2)取消主控索引(3)打开csrqsy.idx,然后显示数据(4)打开gz.cdx,并把主控索引指向gzrqsy索引打开与关闭(1)显示记录的姓名与编号,把主控索引指向第二项,显示记录的姓名与编号

List编号,姓名

Setorderto2List编号,姓名索引打开与关闭(2)取消主控索引Setorderto索引打开与关闭(3)打开csrqsy.idx,然后显示数据SetindextocsrqsyDispall姓名,出生日期索引打开与关闭(4)打开gz.cdx,并把主控索引指向gzrqsySetindextogzList编号,姓名SetordertogzrqsyList姓名,基本工资,出生日期use索引打开与关闭索引项起作用时记录指针的移动当某个索引项起作用时,记录指针实际上是在该索引项对应的索引表上进行移动,但当明确指定移动到某号记录时例外。如:gotop指向索引表的第一条记录

gobottom指向索引表的最后一条记录

skip指向索引表的下一条记录

go3指向表文件的第三条记录问题:gotop=go1?索引打开与关闭S1例14打开表文件zgda.dbf,设置主控索引为zcgzsy,并移动记录指针观察结果usezgdasetordertozcgzsydesendinggotop?recn()skip2?recn()gobottom?recn()go5?recn()索引文件的关闭格式1:CLOSEINDEXES格式2:SETINDEXTO

功能:关闭当前工作区内除了结构复合索引文件之外的所有索引文件。索引打开与关闭

索引文件的更新格式:REINDEX(1)打开了的索引文件,当记录更新时记录会自动更新(2)未打开的索引文件(单索引文件、非结构索引文件)不会自动更新,须用reindex更新4.4数据表的查询与统计查找条件查找:Locatefor常量查找:Find表达式查找:seek统计 求和:sum

求平均:average

统计个数:count数据表的查询与统计一般计算:calculate分类汇总:totalon工作区 选择工作区:select

表间更新:updateon…from…replace

物理连接:joinwith…to…for…

逻辑连接:setrelationto…into…数据表的查询条件查询命令格式:LOCATE[<范围>]FOR<条件>

功能:查找符合指定条件的第一条记录,并将记录指针指向该记录。(1)找到时,指针定在第一条满足条件的记录处,且Found函数返回真值(2)指定范围时,只范围内查找格式:CONTINUE

功能:按最近一次LOCATE命令的条件在后续记录中继续查找。注意:只有Locate之后才能用Continue命令数据表的查询例15在zgda中查找职称为高工的男职工,并判断是否找到,若找到显示记录与记录号。usezgdalocafor职称=[高工]and性别=[男]?found()?recno()list姓名,职称,性别数据表的查询例16在zgda中找1972出生的职工,并显示其记录usezgdalocaforyear(出生日期)=1972?found()list姓名,出生日期数据表的查询常量查询命令格式:FIND<字符常量>/<常数>功能:快速查找索引关键字值和所指定的<字符常量>或<常数>相匹配的首记录。数据表的查询(1)必须建立索引文件,并且打开相应的索引文件,指定主控索引(2)只能字符串或常数进行查找,字串常量可不用定界符(3)用Found函数可以判断是否找到,skip命令可作继续查找(4)与Setexacton/off有关索引表达式只能为数值型或字符型?数据表的查询例17在zgda中用find命令进行查找姓李的,姓张的以及张立功usezgdacopytozgtmpusezgtmpindexon姓名toxmsetindextoxm.idxfind李setexacton数据表的查询

find张?found()find张立功dispxm=张立功findxm&&错误find&xmcloseindexsuse思考:用Find命令查找1972出生的职工.数据表的查询表达式查询命令格式:SEEK<表达式>功能:快速查找索引关键字值与指定<表达式>值相符的记录。数据表的查询(1)必须建立并打开索引文件,使相应的索引项成为主控索引(2)表达式可以是常量、变量、表达式的值,字符串常量必须带定界符(3)备注型与通用型数据不能查找,(4)找到时,Found函数返回真值,skip继续查找(5)表达式的类型与索引表达式的类型一致数据表的查询例18在Zgda中,用seek查找张立功,查找1971年出生的职工UsezgdaIndexon姓名tagxmIndexonyear(出生日期)tagnfSetordertotagxm数据表的查询Seek“张立功”?found()?recno()dispCsn=1971SetordertonfSeekcsnDisp数据表的查询多记录求和命令格式:SUM[<表达式表>][<范围>][FOR<条件>][WHILE<条件>][TO<内存变量表>]

功能:对指定范围内满足条件的记录计算其指定的各个表达式值的和。数据表的统计(1)表达式的值应该是数值型的,可以是字段变量、内存变量、常数、函数及其组合;缺省表达式时,为所有数值型字段求和(2)默认的范围是ALL,数据表的统计例19对zgda中所数值型字段求和,并显示出来usezgdasumtonl,jbgz?”年龄总和为:”,nl?”基本工资总和是:”,jbgzuse数据表的统计例20计算zgda中的女性职工的基本工资的总和、女性职工的人数、基本工资的平均值usezgdasum基本工资,1for性别=“女”togzzh,rs?”女职工的基本工资总和:”,gzzh?”女职工的人数:”,rs?”妇职工的平均基本工资:”,gzzh/rsuse数据表的统计2.多记录求平均命令格式:AVERAGE[<表达式表>][<范围>][FOR<条件>][WHILE<条件>][TO<内存变量表>]功能:对指定范围内满足条件的记录计算其指定的各个表达式值的平均值。(1)表达式是数值型,缺省时对所有数值型字段求平均(2)默认范围为ALL变量表个数与表达式表个数要匹配数据表的统计例21计算zgda中年龄大于等于35岁的男职工的平均工资,并显示出来usezgdaaverage基本工资for年龄>=35and性别=‘男’topjgz?”年龄大于等于35岁的男职工的平均工资:”;+str(pjgz,7,2)例22统计zgda中的年龄平均值,并显示之数据表的统计3.记录个数统计命令格式:COUNT[<范围>][FOR<条件>][WHILE<条件>][TO<内存变量>]功能:统计指定范围内满足条件的记录个数。缺少范围和条件子句时,为所有记录个数(ALL),其计算值等于reccount()的值数据表的统计例23统计zgda中的记录个数usezgdacounttojls?jls?jls=reccount()数据表的统计例24统计zgda中的基本工资超过1000的人数及所占比例usezgdacounttofor基本工资>1000tojbgz?”基本工资超过1000元的人数”+str(jbgz,2,0)?”所占比例:”;+str(100*jbgz/reccount(),5,2)+”%”数据表的统计4.专用计算命令格式:CALCULATE<表达式表>[<范围>][FOR<条件>][WHILE<条件>][TO<内存变量表>]功能:对指定范围内满足条件的记录分别计算指定的各个表达式的值。注意:(1)表达式为:sum()、avg()、cnt()、max()、min()、npv()、std()、var()(2)默认范围为ALL数据表的统计例25计算zgda中男职工的平均年龄、总基本工资、平均基本工资usezgdacalculateavg(年龄),avg(基本工资),sum(基本工资)for性别=‘男’topjnl,pjgz,gzzh?”平均年龄:”+str(pjnl,5,2)?”平均基本工资:”+str(pjgz,7,2)?”基本工资总和:”+str(gzzh,8,2)数据表的统计5.记录分类求和命令格式:TOTALON<关键字>TO<文件名>[<范围>][FOR<条件>][WHILE<条件>][FIELDS<字段表>]功能:对当前数据表中指定的数值型字段进行分类求和,并形成汇总数据表。(1)应按关键字排序或索引,关键字是分类的标准(2)Fields<字段表>指定求和的数值型字段,否则对全部数值型字段(3)非数值型字段不参与求和,但同类关键字的首记录的值写入分类汇总产生的数据表中数据表的统计例26在zgda表中,分按职称与性别进行分类汇总,产生分类汇总表分别为zchz,xbhzusezgdaindexon职称tagzcindexon性别tagxbsetordertozctotalon职称tozchzfields基本工资

数据表的统计setordertosbtotalon性别toxbhzfields基本工资usezchzbrowusexbhzbrowuse数据表的统计4.5数据表之间的操作VisualFoxpro能将内存分成几个区,即工作区,工作区可以用编号表示,如1,2,3,…前10个工作区也可以用A~J来表示允许开辟32767个工作区每个工作区只能打开一个表文件,当几个表同时进行操作时,必须打开多外工作区注意:从资源管理器中用鼠标双击可造成同一个文件在多个工作区中打开4.5数据表之间的操作4.5.1工作区的选择1.工作区选择命令格式:SELECT<工作区号/别名>

功能:选择某个内存工作区作为当前工作区。(1)若打开表时使用别名,则该别名为数据表的简称,同时也可以指代该工作区(2)Select0表示选择最小的工作区(3)显示当前工作区号:?select()如:select1&&seleausezgdabrowselect2&&selebuseborrowaliasborbrow其中,sele2selebselebor

等价数据表之间的操作2.多工作区操作规则①每个工作区只能打开一个表文件,每一时刻只能选择一个工作区进行操作。②同一数据表文件不能同时在多个工作区中打开。③当前选择的工作区称为主工作区,在其内打开的数据表为主表;其他工作区称为别名工作区,在其内打开的数据表被称为别名表。系统启动后自动选择1号工作区为主工作区。数据表之间的操作④各工作区中打开的数据表都有各自的记录指针,若各表之间未建立逻辑关联时,则对主工作区进行的各种操作都不影响其他工作区中数据表记录指针的位置。⑤若要访问其他工作区中数据表的某个字段时,需要用“别名.字段名”或“别名->字段名”的格式来指定。别名由打开表时指定,否则1号工作区用a来替代,2号工作区用b来替代数据表之间的操作4.5.2表间的数据更新如何用基本工资与奖励工资更新应发工资呢?ZGDAZGGZ数据表之间的操作格式:UPDATEON<关键字段名>FROM<工作区号/别名>REPLACE<字段1>WITH<表达式1>[,<字段2>WITH<表达式2>,...][RANDOM]

功能:当<别名>表中记录的关键字段值与当前表中记录的关键字段值匹配时,用所指定的表达式的值来替换当前表中匹配记录指定字段的值。数据表之间的操作注意:(1)别名表要事先打开,关键字段名必须是两个表共有的字段(2)指定了RANDOM短语,则要求主表按关键字段建索引,否则,两者可不建索引(3)主表与别名表中关键字段值相同记录有多个时

都不建索引,则只用别名表的第一条记录更新主表的第一条主表建索而引别名表不建索引,指定random,则用别名表中相同关键字段值修改主表相同关键字的第一条记录;不指定random,则只用别名表的第一条记录更新主表的第一条主表与别名表都建索引(主控),则用别名表中相同关键字段值修改主表相同关键字的第一条记录例27如下两表(zg、zj)zgzj数据表之间的操作Sele1UsezgUsezjinbupdateon姓名frombreplace基本工资with基本工资+b.增加工资数据表之间的操作Inde

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论