程序设计与医学数据库:第3章 Visual FoxPro数据表的操作与管理_第1页
程序设计与医学数据库:第3章 Visual FoxPro数据表的操作与管理_第2页
程序设计与医学数据库:第3章 Visual FoxPro数据表的操作与管理_第3页
程序设计与医学数据库:第3章 Visual FoxPro数据表的操作与管理_第4页
程序设计与医学数据库:第3章 Visual FoxPro数据表的操作与管理_第5页
已阅读5页,还剩98页未读 继续免费阅读

下载本文档

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

文档简介

第3章VisualFoxPro数据表的操作与管理辽宁省教育厅“十一五”立项教育研究规划课题辽宁省普通高等学校精品课程全国等医药院校计算机系列规划教材中国医科大学计算机中心《程序设计与医学数据库应用基础》教学组教学思想与教学目标7个目标掌握数据表的建立、打开和关闭方法;掌握表记录的显示、定位、追加、修改和删除等操作方法;掌握为表建立排序文件的方法;掌握表索引的相关操作;掌握顺序查询和索引查询的方法;熟悉VisualFoxPro的统计和计算命令;熟悉VisualFoxPro的多表操作。课程导航3.23.3VisualFoxPro表记录的基本操作表记录的统计与计算VisualFoxPro表结构的基本操作3.13.23.4表的排序3.23.6表的索引表的查询3.53.7多表操作3.7节3.4节3.5节3.6节3.1节3.2节3.3节要点总结3.1VisualFoxPro表结构的基本操作

数据表是处理数据和建立关系型数据库及应用程序的基本单元。而数据表又是数据库的基本组成部分。数据库的创建则是开发与编辑数据库软件的基础,而数据库是表的集合。

在Visual

FoxPro中有两种表:数据库表和自由表。如果建立表时数据库是打开的,则建立的表为当前数据库的数据库表,否则,建立的是自由表。第5章介绍数据库表3.1.4表结构的创建3.1.13.1.23.1.3表结构的显示表结构的复制表结构的修改3.1VisualFoxPro表结构的基本操作3.1.5表文件的打开、关闭与删除住院号姓名性别出生日期吸烟否预付押金05002003刘中华

男11/23/1972.T.5000.0005002001李小萍女12/30/1978.F.5000.0005001002胡秉男11/23/1990.F.6000.003.1.1表结构的创建1.表结构中的概念与规定(1)字段名:是表中唯一的。必须以汉字、字母和下划线开头,由汉字、字母、数字和下划线组成。数据库表中字段名长度最多128个字符,自由表中字段名长度最多10个字符。(2)字段类型:存储在该字段中的数据类型。(3)字段宽度:字段所能容纳数据的最大字节数。(4)小数位数:数值型数据将保留几位小数。

此时的字段宽度=整数位数+1+小数位数。(5)NULL值(空值):NULL值指无明确的值。3.1.1表结构的创建2.创建数据表的命令【格式】CREATE[D][<表文件名>|?]【功能】建立一个表文件,同时打开该表文件。【说明】[路径]用来指定表文件的保存位置,若省略则保存在VisualFoxPro的默认路径中。若省略<表文件名>短语或使用“?”,则VisualFoxPro将弹出“创建”对话框提示用户输入表文件名和指定保存位置。输入命令后,按Enter键,屏幕上会出现“表设计器”对话框,利用该对话框即可建立表的结构。不指定文件扩展名时,默认扩展名为.dbf备注文件.fpt。【例3-1】在E盘中的“住院管理”文件夹中建立数据表文件,并命名表文件名为“患者信息”。

CREATEE:\住院管理\患者信息3.1.2表文件的打开、关闭与删除

打开表文件【格式】USE[路径][<表文件名>|?]【功能】打开指定路径下保存的指定表文件。【说明】若表结构中含有备注型、通用型字段等,同名的.fpt文件同时打开。【例3-4】打开在E盘住院管理子文件夹中的“患者信息.dbf”表。USEE:\住院管理\患者信息注意其他打开方法3.1.2表文件的打开、关闭与删除

2.关闭表文件(5种)USE:关闭当前打开的表。CLEARALL:关闭各种类型的文件,释放内存变量。CLOSEALL:关闭各种类型的文件。CLOSEDATABASE:关闭所有打开的数据库文件、表文件、索引文件等。QUIT:关闭所有文件,退出VisualFoxPro系统。表文件操作完成后,或暂时不用时,必须将其关闭。如果已有打开的表文件,在打开另一个数据表的同时会自动关闭当前打开的数据表。3.1.3表结构的显示

【格式】LIST|DISPLAYSTRUCTURE【功能】显示当前表文件的结构。【说明】在执行该命令时,如果系统中没有已经打开的表文件,系统将提示输入文件名。若无任何子句则将信息输出到Visual

FoxPro主窗口中,若使用TOPRINT子句则将信息输出到打印机,若使用TOFILE子句则将信息输出到文件。注意:LIST|DISPLAY的区别?【例3-2】显示在E盘住院管理子文件夹中患者信息.dbf表的结构。

USEE:\住院管理\患者信息

LISTSTRUCTURE系统主窗口显示3.1.4表结构的修改

【格式】MODIFYSTRUCTURE【功能】显示并修改当前打开的数据表结构。【说明】执行该命令后,将打开“表设计器”对话框显示当前数据表的结构,并允许用户对其进行修改。经修改的表结构存盘后,系统将自动备份原数据表文件,原.dbf文件变为.bak文件,原.fpt文件变为.tbk文件。【例3-3】修改在E盘住院管理子文件夹中的“患者信息.dbf”表结构。USEE:\住院管理\患者信息MODIFYSTRUCTURE3.1.5表结构的复制

【格式】COPYSTRUCTURETO<文件名>[FIELDS<字段名表>]【功能】从当前表文件复制新表文件的结构。【说明】命令执行后生成的新表文件只有表结构,没有记录。FIELDS选项中<字段名表>决定新表文件结构,<字段名表>中的字段必须是当前表中的字段,若默认情况下该子句则生成的新表文件与当前表结构相同。【例3-3】将“患者信息.dbf”表中的住院号、吸烟否、诊断、既往病史、过敏史、血型、住院科室、家族病史字段生成一个新表文件“患者病情信息空表.dbf”作为该表文件的结构。USE患者信息COPYSTRUCTURETO患者病情信息空表FIELDS住院号,;吸烟否,诊断,既往病史,过敏史,血型,住院科室,家族病史USE患者病情信息空表LISTSTRUCTURE3.7节3.4节3.5节3.6节3.1节3.2节3.3节要点总结3.2VisualFoxPro表记录的基本操作将数据存储在表中的目的即为方便用户进行编辑、查询等管理,在VisualFoxPro中提供了关于表记录操作的方法。表记录的录入和追加3.2.13.2.23.2.3表记录的显示记录指针的定位3.2VisualFoxPro表记录的基本操作3.2.4表记录的修改3.2.53.2.63.2.7表记录的删除表的复制3.2.8外部数据文件与表记录之间的转换数组与表之间的数据传递3.2.1表记录的录入和追加表的数据录入有多种方法:1.表结构建立时录入数据2.表结构建成并存盘后,利用命令向表中追加记录【格式】APPEND[BLANK]【功能】在表的末尾添加一个或多个新记录。【说明】若使用BLANK子句,则不打开记录编辑窗口,由系统自动在当前表的末尾添加一条空记录。若省略BLANK子句,则打开如图3-3所示的记录编辑窗口,即可输入记录。3.菜单方式【例3-4】设例3-1中创建的数据表“患者信息.dbf”为打开状态,请在该表的末尾追加一条空白记录。APPENDBLANK插入记录【格式】INSERT[BEFORE][BLANK]【功能】在当前表文件的指定位置插入新记录或空记录。【说明】省略BERORE子句时将在当前记录之后插入新记录;若使用BEFORE子句则在当前记录前插入新记录;若使用BLANK子句则插入一条空记录。若表文件建立了索引,并且相关的索引文件已经打开了,则插入的新记录按索引值进行排序。【例3-12】在“患者信息.dbf”的第3条记录后插入一条新记录,在第1条记录前插入一条空白记录。USE患者信息GO3INSERTGO1INSERTBEFOREBLANK3.2.1表记录的录入和追加3.2.4表记录的添加

从另一表文件中追加记录【格式】APPENDFROM<表文件名|?>[FIELDS<字段名表>][FOR<逻辑表达式>]【功能】从指定的表中读取数据并追加到当前表文件的末尾。【说明】<表文件名>为数据来源表名,而当前打开的数据表为被追加的数据表。若当前表的字段宽度大于数据来源的宽度,记录能正常追加;反之,不能正常追加。【例3-13】现存在一空表名为“外科患者信息.dbf”,表结构与“患者信息.dbf”表相同。要求从“患者信息.dbf”表中读取外科患者的信息追加到“外科患者信息”表中。USE外科患者信息APPENDFROM患者信息FOR住院科室="外科"LISTFIELDS住院号,姓名,性别,住院科室3.2.2表记录的显示

【格式】

LIST|DISPLAY

[OFF][FIELDS<字段名表>][<范围>][FOR<条件>][WHILE<条件>]【功能】显示指定范围内满足条件的各个记录【说明】1.使用OFF时,不显示记录号,否则显示记录号

2.FIELDS<字段名表>:用来指定显示的字段

3.范围为可选项,可以为ALL,RECORD(N),NEXT(N),REST中任意一个

4.FOR<条件>:指定对表文件中指定范围内满足条件的记录进行操作

5.WHILE<条件>:作用同FOR,但是,当第一次遇到不满足条件的记录时,停止继续往后操作。3.2.2表记录的显示

【例3-5】显示“患者信息.dbf”表中全部记录的住院号、姓名、性别、入院日期、吸烟否、现住址字段。【例3-6】显示表中外科患者的住院号、姓名、性别、住院科室字段的信息,不显示记录号。【例3-7】显示表中2008年6月之前入院患者的住院号、姓名、住院科室、入院日期信息。【例3-8】显示表中姓张的和姓刘的患者的住院号、姓名、住院科室、诊断信息。【例3-9】显示表中不吸烟(吸烟否值为.f.)患者的住院号、姓名、住院科室、诊断、吸烟否信息。LISTFIELDS住院号,姓名,性别,入院日期,吸烟否,现住址

LISTOFFFIELDS住院号,姓名,性别,住院科室FOR住院科室="外科"DISPLAYFIELDS住院号,姓名,住院科室,入院日期FOR

入院日期<{^2008/06/04}DISPLAYFIELDS住院号,姓名,住院科室,诊断FOR姓名="张".OR.姓名="刘"DISPLAYFIELDS住院号,姓名,住院科室,吸烟否,诊断FOR.NOT.吸烟否DISPLAYFIELDS住院号,姓名,住院科室,吸烟否,诊断FOR吸烟否=.F.3.2.3记录指针的定位

记录号是用于标识数据记录在表文件中的物理顺序。记录指针中存放的是当前的记录号。当某个数据表文件刚打开时,其记录指针指向第1条记录。记录指针的定位就是将记录指针移到指定的记录上,记录指针指向的记录称为当前记录。VisualFoxPro的记录指针移动命令分为两类,即绝对移动命令和相对移动命令。3.2.3记录指针的定位

记录指针的绝对移动【格式】[GO|GOTO]<数值表达式>【功能】将记录指针绝对定位到<数值表达式>指定的记录上。【说明】<数值表达式>:记录的物理记录号绝对定位与是否打开索引文件没有关系。【例3-10】绝对定位命令的用法如下:USE患者信息GO2?RECNO() &&系统主窗口显示24?RECNO() &&系统主窗口显示4DISPLAY&&系统主窗口显示第4条记录的所有字段USE3.2.3记录指针的定位

记录指针的相对移动【格式1】SKIP<数值表达式>【功能】记录指针从当前记录向前或向后移动若干个记录。【说明】<数值表达式>表示移动的记录个数,数值表达式值为负数时,表示向前移动;为正数时,表示向后移动;默认时,表示向后移动1个记录。【格式2】GO|GOTO<TOP|BOTTOM>【功能】将记录指针移到表文件的首记录或尾记录。【说明】TOP:则将记录指针移到当前表文件的首记录;BOTTOM:则将记录指针移到当前表文件的最后一条记录。常用测试函数第一条记录前最后一条记录后第一条记录空表BOF().T..F..F..T.EOF().F..T..F..T.RECNO()1记录数+111【例3-11】相对定位的用法:USE患者信息LIST&&共13条记录?RECNO()&&系统主窗口显示14?EOF()&&系统主窗口显示.T.1SKIP2?RECNO()&&系统主窗口显示3SKIP-4?RECNO()&&系统主窗口显示1?BOF()&&系统主窗口显示.T.GOBOTTOM?RECNO()&&系统主窗口显示13?EOF()&&系统主窗口显示.F.USE3.2.3记录指针的定位

注意其他命令对记录指针位置的影响????3.2.4表记录的修改

1.编辑修改【格式】EDIT|CHANGE[FIELDS<字段名表>][<范围>][FOR<逻辑表达式1>][WHILE<逻辑表达式2>]【功能】按给定条件编辑修改当前打开的表文件的记录。2.浏览修改【格式】BROWSE[FIELDS<字段名表>][FOR<逻辑表达式>]【功能】以浏览窗口方式显示当前表数据,并供用户进行修改。【说明】按给定条件浏览修改当前打开的表文件的记录3.2.4表记录的修改

3.替换修改【格式】REPLACE<字段名1>WITH<表达式1>[ADDITIVE][,<字段名2>WITH<表达式2>[ADDITIVE]]…[<范围>][FOR<逻辑表达式1>][WHILE<逻辑表达式2>]【功能】用指定表达式的值替换当前表中满足条件记录的指定字段的值。【说明】此命令可以同时自动替换若干个字段的内容。ADDITIVE子句仅在替换备注型字段时才使用,表示将表达式的值追加在原备注字段内容之后。默认情况下,用表达式的值替换原备注字段的内容。3.2.4表记录的修改

【例3-14】由于“奥德金注射液”费用调整为72.20元,请使用命令修改“住院费用.dbf”表中费用名称为“奥德金注射液”记录的单价和费用小结字段的内容。【例3-15】已知住院号为“08060104”的患者在“床位分配.dbf”表中为第5条记录,现将负责看护该患者的护士更换为“赵小情”,请使用命令完成。【例3-16】已知“患者信息.dbf”表中第12和13条记录的患者“现住址”字段中未注明所在省份为“辽宁省”,请使用命令添加在该字段的尾部。USE住院费用LISTFIELDS住院号,费用名称,单价,用量,费用小结FOR费用名称="奥德金注射液"REPLACE单价WITH72.20,费用小结WITH单价*用量;FOR费用名称="奥德金注射液"LISTFIELDS住院号,费用名称,单价,用量,费用小结FOR费用名称="奥德金注射液"USE床位分配GO5REPLACE护士姓名WITH"赵小情"USE患者信息DISPLAYALLFIELDS住院号,姓名,住院科室,现住址GO12REPLACE现住址WITH"辽宁省"ADDITIVENEXT2DISPLAYALLFIELDS住院号,姓名,住院科室,现住址3.2.5表记录的删除

表记录的删除分为:逻辑删除和物理删除。1.逻辑删除(可以恢复)逻辑删除就是给指定的记录添加删除标记“*”。【格式】DELETE[<范围>][FOR<逻辑表达式1>][WHILE<逻辑表达式2>]【功能】对当前表中指定范围内满足条件的记录添加删除标记。【说明】当同时使用默认的<范围>和<逻辑表达式>子句时,仅逻辑删除当前记录。【例3-17】逻辑删除“患者信息.dbf”表中2008年6月4日之前入院患者的信息。USE患者信息DELETEFOR入院日期<{^2008/06/04}LISTFIELDS住院号,姓名,入院日期,住院科室3.2.5表记录的删除

3.恢复逻辑删除记录恢复逻辑删除是将被逻辑删除的记录恢复为正常记录,即将删除标记“*”去掉。【格式】RECALL[<范围>][FOR<逻辑表达式1>][WHILE<逻辑表达式2>]【功能】对当前表中指定范围内满足条件的记录的删除标记去掉。【说明】当同时使用默认的<范围>,<逻辑表达式>子句时,仅去掉当前记录的删除标记。【例3-19】恢复“患者信息.dbf”表中删除的所有记录。USE患者信息RECALLALLLISTFIELDS住院号,姓名,入院日期,出院日期,住院科室3.2.5表记录的删除

4.物理删除记录(不可恢复)【格式】PACK【功能】对当前表中所有带删除标记的记录全部真正地删除。【说明】选择DBF,表示仅清除逻辑删除的记录而不压缩备注文件,选择MEMO,表示仅压缩备注文件中无用的空间,而不清除被逻辑删除的记录。不带任何可选项时,PACK命令既清除逻辑删除的记录,又压缩备注文件。【例3-20】将“患者信息.dbf”表中的2008年6月1日到2008年6月10日期间入院的患者信息进行物理删除。USE患者信息DELETEFOR入院日期>={^2008/06/01}.AND.入院日期;<{^2008/06/10}PACKLISTFIELDS住院号,姓名,入院日期,住院科室3.2.5表记录的删除

5.一次性删除全部记录【格式】ZAP【功能】对当前打开的表文件中所有的记录全部进行物理删除。【说明】执行该命令后,只保留表文件的结构,而不再有任何数据。这种删除无法恢复,因此在执行该命令时,提示对话框,单击“是”按钮将清除所有记录,单击“否”按钮放弃ZAP操作。

ZAP命令等价于DELETEALL与PACK两条命令被执行。3.2.6表的复制

1.表文件的复制【格式】COPYTO<新文件名>[FIELDS<字段名表>][范围][FOR<逻辑表达式1>][WHILE<逻辑表达式2>]【功能】把当前打开的表文件中符合条件的记录的指定字段复制生成一个新表文件。【说明】生成的新表文件的结构由FIELDS<字段名表>指定,该项默认时复制所有字段,包含的记录由范围和条件子句指定。【例3-21】复制“患者信息.dbf”表中所有记录的住院号、吸烟否、诊断、既往病史、过敏史、血型、住院科室、家族病史字段生成一个新表文件“患者病情信息表.dbf”。USE患者信息COPYTO

患者病情信息表FIELDS

住院号,吸烟否,诊断,既往病史,过敏史,血型,住院科室,家族病史USE患者病情信息表LISTFIELDS住院号,吸烟否,既往病史,过敏史,血型,住院科室自学3.2.7

数组与表之间的数据传递

1.数组与记录之间的数据传递记录内容传递到数组【格式】SCATTER[FIELDS<字段名表>]TO<数组名>【功能】将当前表中当前记录的各个字段的数据依次复制到指定数组的各个元素中。【说明】若使用FIELDS子句,则只传递指定的各字段的值,否则传递除备注型和通用型字段外的其余字段的值。【例3-22】将“患者信息.dbf”表中第1条记录的信息传递到数组hzxx中(数组hzxx尚未定义)。CLEARMEMORYUSE患者信息SCATTERTOhzxxDISPLAYMEMORYLIKEhzxx3.2.7

数组与表之间的数据传递

数组内容传递到记录【格式】GATHERFROM<数组名>[FIELDS<字段名表>]【功能】将指定的数组中各元素的值依次复制到当前表的当前记录各字段中。【说明】若使用FIELDS子句,则只传递数组元素的值到指定的各字段。传递过程中不修改备注型和通用型字段的值,若遇到备注型或通用型字段,则越过它处理下一个字段。各数组元素与对应字段的数据类型必须一致,否则因类型不匹配将不会传递。【例3-23】利用数组向“患者信息.dbf”表中追加一条非空白记录,包含患者的住院号、姓名、性别、出生日期、吸烟否、婚否字段的信息。CLEARMEMORYDIMENSIONxhz(6)xhz(1)="08060501"xhz(2)="刘涵"xhz(3)="女"xhz(4)={^1957/12/03}xhz(5)=.F.xhz(6)=.T.USE患者信息APPENDBLANKGATHERFROMxhzDISPLAYFIELD住院号,姓名,性别,出生日期,吸烟否,婚否3.2.7

数组与表之间的数据传递

2.数组与表之间的数据传递将数据表内容复制到数组【格式】COPYTOARRAY<数组名>[<范围>][FOR<逻辑表达式>][FIELDS<字段名表>]【功能】将当前表中指定范围内符合条件的记录的字段值复制到指定的数组中。【说明】若指定数组尚未定义,则系统自动建立一个新的二维数组来接收数据。其余说明与SCATTERTO命令相似。3.2.7

数组与表之间的数据传递

2.数组与表之间的数据传递将数组内容复制到数据表【格式】APPENDFROMARRAY<数组名>[FIELDS<字段名表>]【功能】将指定数组变量中各数组元素的值复制到当前表中。【说明】与GATHERFROM命令相似。【例3-24】利用数组复制“患者信息.dbf”中吸烟患者的信息到新表文件“吸烟患者信息.dbf”表中。CLEARMEMORYUSE患者信息COPYTOARRAYxyhzFOR吸烟否=.T.COPYSTRUCTURETO吸烟患者信息USE吸烟患者信息APPENDFROMARRAYxyhzLIST住院号,姓名,性别,吸烟否,住院科室3.7节3.4节3.5节3.6节3.1节3.2节3.3节要点总结在数据管理过程中往往需要在不同格式的数据处理软件中进行数据的交叉使用,VisualFoxPro中提供了将其他数据文件格式与.dbf文件格式进行转换的方法。自学3.2.8

外部数据文件与表记录之间的转换

3.7节3.4节3.5节3.6节3.1节3.2节3.3节要点总结1.表的导入选择【文件】|【导入】命令,系统打开“导入”对话框,在“类型”下拉列表框中选择导入文件的类型,在“来源于”文本框中输入所导入文件的位置与文件名,然后单击“确定”按钮即可。3.2.8

外部数据文件与表记录之间的转换

3.7节3.4节3.5节3.6节3.1节3.2节3.3节要点总结2.表的导出选择【文件】|【导出】命令,“导出”对话框,在“类型”下拉列表框中选择导入文件的类型,在“到”文本框中输入所导出文件的位置与文件名,然后单击“确定”按钮即可。3.2.8

外部数据文件与表记录之间的转换

3.3

表记录的统计与计算计算机文化1.1.15.1.2综合计算3.3.13.3.23.3.33.3.43.3.5统计记录数求和求平均值分类汇总3.3.4分类汇总【格式】TOTALTO<汇总文件名>ON<关键字段>[FIELDS<字段名>][<范围>][FOR<逻辑表达式>][WHILE<逻辑表达式>]【功能】按关键字段对当前表文件的数值型字段进行分类汇总,形成一个新的文件【说明】当前表必须在关键字上排序或索引将当前表文件中关键字段值相同的记录分成一类,每一类产生一个记录,各记录中的汇总字段值为汇总后的和,而非汇总字段值为每一类的第一条记录的值。统计各科室预付押金总额USE患者信息.dbfEXCLUSIVE按住院科室排序(语句还没学到)totaltoa1on住院科室usea1clealistfiel

住院科室,预付押金3.3.4分类汇总【例4.23】统计表“住院费用.dbf”中各个患者费用小结的总和,将统计结果保存在患者“费用小结.dbf”文件中。USE住院费用按住院号排序TOTALTO患者费用小结ON住院号USE患者费用小结LIST住院号,费用小结3.3.4分类汇总??自学3.3.1统计记录数【格式】COUNT[TO<内存变量>]

[<范围>][FOR<条件>][WHILE<条件>]【功能】统计表中指定范围内满足条件的记录个数【说明】若使用<范围>子句,统计出指定<范围>内满足<条件>的记录个数,默认的范围是ALL。 若使用TO<内存变量>,可将统计的结果保存

到指定内存变量中。若SETDELETEOFF(默认状态),则加删除标记的记录将被计算;否则SETDELETEON不计算。3.3.2求和【格式】SUM[<表达式表>][TO<内存变量名表>]

[<范围>][FOR<条件>][WHILE<条件>]【功能】将指定范围内满足条件的记录按指定的各个表达式分别求和。【说明】在SETTALKON(默认)状态下,屏幕显示统计结果;在SETTALKOFF状态下不显示。<表达式表>由数值型字段组成,若省略,则对当前表的所有数值型字段求和。TO<内存变量表>:将求和结果按顺序存入内存变量【例4.22】统计表“患者信息.dbf”中所有患者的住院费用的总和。USE患者信息SUM住院费用TOfyzh3.3.3求平均值【格式】AVERAGE[<表达式>][TO<内存变量名>]

[<范围>][FOR<条件>][WHILE<条件>]【功能】将指定范围内满足条件的记录按指定的各个表达式分别求平均值。【说明】选项用法同SUMaver住院费用TOfypj3.3.5综合计算【格式】CALCULATE<表达式表>[TO<变量名表>][<范围>][FOR<逻辑表达式>][WHILE<逻辑表达式>]【功能】对当前表中指定范围内满足条件的记录进行指定的综合计算工作【说明】表达式表可以是

函数含义AVG(数值表达式)求平均值CNT()求记录个数MAX(表达式)求最大值MIN(表达式)求最小值SUM(数值表达式)求和【例4.24】计算表“患者信息.dbf”中,患者人数、住院费用的最大值、最小值和平均值、住院费用的总和。USE患者信息CALCULATECNT(),MAX(住院费用),MIN(住院费用),AVG(住院费用),SUM(住院费用);TOrs,fyzd,fyzx,fypj,fyzhSettalkon/off3.4表的排序排序是从物理上对表重新整理,按照指定的关键字段来重新排列表中数据的顺序,并产生一个新的文件【格式】SORTTO<新文件名>ON<字段名1>[/A|/D]

[<字段名2>[/A|/D]][FIELDS<字段名表>][<范围>][FOR<条件表达式>][WHILE<表达式>]【功能】对当前的表排序,并将结果输出到新表中【说明】ON<字段名1>:用作排序的关键字段

/A按升序排序,/D按降序排序,默认是升序;可实现多重排序,首先按<字段名1>排序,如果有可选项<字段名2>,则在<字段名1>之值相同的情况下,再按<字段名2>的大小进行排序。3.4表的排序【例4_1】将表文件“患者信息.dbf”中自费患者记录按住院费用降序、住院科室升序排列,生成新表文件“住院费用.dbf”,包含住院号、姓名、住院费用、住院科室和费用类别字段。USE患者信息SORTTO费用科室ON住院费用/D,住院科室/AFIELDS住院号,姓名,住院费用,住院科室,费用类别FOR费用类别="自费"USE住院费用LIST3.5

表的索引计算机文化1.1.15.1.2重新指定主控索引3.5.13.5.23.5.33.5.43.5.5建立索引文件打开索引文件关闭索引文件更新索引文件3.5

表的索引索引是从逻辑上对表进行重新整理,索引是以索引文件的形式存在的,它是根据指定的索引关键字表达式建立起来的。可以将索引文件看成索引关键字的值与记录号之间的对照表。索引文件必须与原数据表文件一起使用。打开索引文件时会改变表中记录的逻辑顺序,但是并不会改变表中记录的物理顺序。索引文件有二种:单索引文件(.IDX)和复合索引文件(.CDX)。一个数据表文件可以建立多个索引文件,也可以同时打开多个索引文件,但在同一时间内只有一个索引起作用,这个索引被称为主控索引。记录号学号准考证号姓名班级1011110990006李建国计01212011103990008李宁电01343011202990001赵娜英01124021204990005孙亮电01345011111990007赵林计0121原数据表:学号索引姓名索引班级索引索引文件单索引文件(.IDX)复合索引文件(.CDX)独立复合索引文件(自学)结构复合索引文件3.5

表的索引3.5.1建立索引文件1.单索引文件的建立【格式】INDEXON<关键字段表达式>TO<单索引文件名>

[FOR<逻辑表达式>][ADDITIVE]

【功能】对当前表按指定的关键字建立单索引文件【说明】<关键字段表达式>可以是字段名,也可以是含有当前表中字段组成的合法表达式。若在表达式中包含有几种类型的字段,常常需要使用类型转换函数将其转换为相同类型的数据单索引文件:指定要建立的单索引文件名。单索引文件扩展名是.IDX

1.单索引文件的建立【例4-3】为“患者信息”按照入院日期的升序建立单索引文件。3.5.1建立索引文件USE患者信息INDEXON入院日期TO入院日期单索引LIST住院号,姓名,吸烟否,入院日期,住院科室,实收押金建立索引文件举例cleaINDEXON姓名TOXMSYLISTfiel

住院号,姓名,性别,出生日期waitcleaINDEXON性别+dtoc(出生日期,1)toxcLISTfiel

住院号,姓名,性别,出生日期

1.单索引文件的建立FOR<逻辑表达式>表示对满足条件的记录建立索引ADDITIVE:表示保留打开的索引文件。否则,除结构复合索引文件外,以前打开的其他索引文件被关闭3.5.1建立索引文件2.复合索引文件的建立复合索引中包含多个索引,每个索引均有一个标识名(TAG),标识名由字母或下划线开头由字母、数字或下划线组成,长度不超过10个字符复合索引文件又可分为结构复合索引文件和独立复合索引文件两种。结构复合索引文件与表文件同名,打开表时自动打开结构复合索引文件;(自学)独立复合索引文件的文件名由用户指定,在打开表文件时独立复合索引文件不会自动打开而需要使用命令进行打开操作。3.5.1建立索引文件菜单建立方式2.建立复合索引命令方式

【格式】INDEXON<关键字表达式>TAG<标识名>[FOR<逻辑表达式>][ASCENDING|DESCENDING][ADDITIVE] 【功能】对当前表按指定的关键字建立复合索引文件【说明】TAG<索引标识名>用于指定复合索引文件中的索引标识;当缺省OF时建立一个与表同名的结构复合索引文件;加OF<独立复合索引文件名>将建立一个指定名称的独立复合索引文件;使用ASCENDING按升序索引;使用DESCENDING按降序索引。缺省时,按升序建立索引。3.5.1建立索引文件INDEXON<关键字段表达式>TO<单索引文件名>[FOR<逻辑表达式>][ADDITIVE]2.建立复合索引【例4-7】在“患者信息.dbf”表的结构复合索引文件中按照吸烟否的降序追加索引标识。3.5.1建立索引文件3.菜单方式建立、修改结构复合索引打开表文件选择[显示]-[表设计器]选择“索引”选项卡用表设计器建立的索引都是结构复合索引USE患者信息INDEXON吸烟否TAG吸烟降序DESCENDINGLIST住院号,吸烟否,住院科室,既往病史,家族病史,诊断【格式1】USE<文件名>[INDEX<索引文件名表|?>][ORDER<数值表达式2>|<单索引文件>|[TAG]<标识名>][ASCENDING|DESCENDING]

【功能】打开指定的表文件及相关的索引文件【说明】虽然可以同时打开多个索引文件,但同一时间只能有一个单索引文件或是复合索引文件中的一个索引标识作为主控索引,记录的操作和显示由主控索引来控制。如果<索引文件名表>中排在第一位的是单索引文件,则该单索引就是主控索引;如果排在第一位的是复合索引文件,所有索引项均不起作用,表文件的记录将以物理顺序被访问。【注意】

1、在建立索引的同时,即打开了该索引,并指定其为主控索引

2、在打开表的同时就打开了结构复合索引文件3.5.2打开索引文件ORDER子句:指定主索引<数值表达式2>:指定主索引的编号,若为0,表示不设主索引(如果打开多个索引文件,则系统自动为各打开的索引项统一编号,编号规则:先单索引,再结构复合索引,最后是独立复合索引)<单索引文件>:指定的单索引文件为主索引(如:usestudentindexfstud,性别order性别)[TAG]<标识名>[OF<复合索引文件名>]:表示将<复合索引文件名>中指定标识作为主索引,缺省[OF<复合索引文件名>]表示结构复合索引

3.5.2打开索引文件USE患者信息INDEX入院日期单索引,科室烟否单索引LIST住院号,姓名,入院日期,吸烟否,住院科室,诊断【例4-10】打开表文件“患者信息.dbf”,同时打开其单索引文件“入院日期单索引”和“科室烟否单索引”。(分析主控索引)3.5.2打开索引文件【例4-9】打开表文件“患者信息.dbf”,同时打开其单索引文件“入院日期单索引”,指定结构复合索引文件中的“吸烟否降序”标识为主控索引,并强制其按升序索引。(观察ORDER语句的使用)

USE患者信息INDEX入院日期单索引ORDERTAG吸烟降序ASCENDINGLIST住院号,姓名,吸烟否,入院日期,住院科室,诊断3.5.2打开索引文件【格式2】SETINDEXTO<索引文件名表>[ADDITIVE][ORDER<数值表达式2>|<单索引文件>|[TAG]<标识名>][ASCENDING|DESCENDING]

【功能】在已打开表文件的前提下,打开相关索引文件;存在同名的索引文件必须带扩展名【说明】ADDITIVE:表示保留以前打开的索引文件。缺省时,打开本索引同时关闭所有已打开的索引文件(结构复合索引文件外)。3.5.2打开索引文件复合索引打开索引文件举例indexon姓名tagxmindexon住院号tagzyhofdlfhsyindexon出生日期tagcsrqofdlfhsyUSE患者信息INDEXdlfhsyLISTfiel

住院号,姓名,住院科室,出生日期,诊断

&&物理顺序显示记录USE患者信息&&复合索引文件同时被打开SETINDEXTOdlfhsy

&&打开独立复合索引文件USE患者信息INDEXdlfhsyORDERxm

DESCENDINGLISTfiel

住院号,姓名,住院科室,出生日期,诊断

&&按姓名降序的顺序显示记录3.5.3关闭索引文件【格式1】USE【功能】关闭打开的表文件及所有索引文件【格式2】SETINDEXTO

【格式3】CLOSE

INDEX【功能】关闭当前工作区中打开的所有单索引文件和独立复合索引文件

注意:当表未关闭时,结构复合索引文件无法关闭如果对数据表记录进行了增删或记录数据发生了变化,应及时对已有的索引文件中的索引项重新进行索引进行更新。命令方式【格式】REINDEX【功能】重新进行索引,更新当前打开的索引文件3.5.4索引文件的更新【格式】SETORDERTO[<数值>|<单索引文件名>|[TAG]

<标识名>]

【功能】重新指定打开的索引文件中的主控索引【说明】数值表达式指定该数值号的索引为主控索引;其值为0取消主控索引,表文件的记

录将以物理顺序被访问(索引文件仍处于打开状态);

单索引文件名指定该名字的单索引为主控索引

TAG<标识名>指定复合索引文件中的该索引标识的索引项为主控索引。加OF<独立复合索引文件名>

指定独立复合索引文件3.5.5重新指定主控索引指定主控索引例题:USE患者信息INDEXzyhSY,csrqSY,XMSY&&打开患者信息表,同时打开住院号索引,出生日期索引和姓名索引,此时住院号索引为主控索引。

LIST&&按住院号升序显示记录SETORDERTOXMSY

&&重新指定姓名索引为主控索引。LISTSETORDERTO0&&LIST&&按物理顺序显示记录3.6

表的查询计算机文化1.1.15.1.23.6.13.6.2顺序查询索引查询3.6.1顺序查询按照记录的物理顺序逐个比较,逐个查询命令方式【格式】LOCATE[<范围>][FOR<条件>]【功能】在指定范围中按指定条件,物理顺序进行查找,记录指针定位到第一条符合条件的记录。【说明】(1)若找到符合条件的记录,则测试函数?FOUND()为真;如果没有找到,则测试函数

?FOUND()为假,并且指针定位到表底,即

?EOF()为真。一般用DISP显示当前找到的记录。(2)若继续查找符合该条件的其余记录,可使用CONTINUE命令。

【例4-13】在“患者信息”表中查询并显示B型血的患者的信息。USE患者信息LOCATEFOR血型=‘B’?found()DisplayContinue?found()Display()判断是否找到符合条件记录判断是否找到符合条件记录查找下一条符合条件记录例:顺序查询命令举例UsestudentLocateforleft(学号,2)=“05”?found().t.DispContinue?found().t.DispContinue?found().f.?eof().t.3.6.1顺序查询3.6.2索引查询打开索引文件后,可以使用FIND和SEEK命令快速查询1.FIND命令【格式】FIND<字符串>/<数值常量>【功能】在表文件的主控索引中查找关键字值与

<字符串>或<数值常量>相匹配的第一条记录【说明】(1)如果找到,则把记录指针指向该记录,并且将FOUND()函数的值置为“真”;如果没有找到与其相符的记录,将FOUND()函数的值置为“假”,EOF()函数的值置为“真”。(2)如果有多个与关键字匹配的记录,则记录指针定位于其中的第一条记录上,若浏览后续记录,可用SKIP(3)若字符常量无首尾空格,可省略定界符;字符串可用字符变量代替,但需用&转换,3.6.2索引查询打开索引文件后,可以使用FIND和SEEK命令快速查询1.FIND命令【说明】(4)执行SETEXACTOFF命令后,用FIND命令查找字符串时,字符串可以是索引表达式值的全部或是从首字符开始的一个子串。执行SETEXACTON命令后,用FIND命令来查找字符串,则精确匹配【例3.43】查找并显示表“患者信息.dbf”姓刘的患者的记录的信息。打开索引文件后,可以使用FIND和SEEK命令快速查询2.SEEK命令(表达式查询命令)【格式】SEEK<表达式>【功能】在表文件的主控索引中查找关键字值与<表达式>值相匹配的第一条记录【说明】SEEK命令可查找字符型、数值型、日期型、

逻辑型表达式值

SEEK命令中表达式必须有定界符,以确定表达式类型。3.6.2索引查询【例4-20】查找表“患者信息.dbf”中吸烟的患者的信息。(查询逻辑型数据)2.表达式查询命令(SEEK命令)3.6.2索引查询USE患者信息ORDER吸烟降序SEEK.T.?FOUND()&&系统主窗口显示结果为.T.DISPLAY住院号,姓名,吸烟否,入院日期,出院日期,住院科室SEEK命令练习举例USE患者信息INDEXXMSY,SRSY,CJSYSEEK“李强”DISPSetordertoSRSYSEEK{^1982/12/10}DISPSKIPDISP思考:SEEK“李强”一句如果用FIND或LOCATE命令该如何写。3.6.2索引查询查询命令比较4.3.1目4.3.2目返回本节命令适用类型C型比较是否用定界符必须有主控索引使指针指向下一条查找条件locateN、C、L、D、T是否continue可以是某个区间的值seek是skip唯一的值findN、C否相同点:命令执行后,记录指针指向满足条件的第一条记录。如果没有则指针指向文件尾。不同点:3.7

多表操作计算机文化1.1.15.1.2关闭多个工作区文件3.7.13.7.23.7.33.7.43.7.5工作区与多个表表间的逻辑连接表间的物理连接表间的数据更新工作区和当前工作区VFP系统最多能同时使用32767个工作区,每个工作区只能打开一个表文件。任何时候只能对一个工作区进行操作,这个工作区称为当前工作区(或主工作区)。当前工作区上打开的表文件为当前表文件。32767个工作区的区号分别为1-32767,系统启动后,默认1号工作区为当前工作区。对于1-10号工作区,系统别名为A-J。11-32767号工作区,系统别名为W11-W32767。3.7.1工作区与多个表2.选择当前工作区(1)表别名是代表打开的数据表文件的一个简短名称当用USE命令打开表文件时,系统默认表的文件名就是表的别名。(2)用户可自定义表的别名【格式】USE<表文件名>

[ALIAS<别名>]

<别名>是用英文字母或下划线开头,由字母、数字、下划线组成,长度最多为10个字节【例如】USE患者信息ALIASHZ

3.7.1工作区与多个表(3)工作区的选择【格式】SELECT<工作区号>/<工作区别名><工作区别名>可以是系统的别名,也可以是表的别名。如果指定“0”,则表示选用当前未使用过的编号最小的工作区作为当前工作区。

【例题】SELECTBUSE患者信息ALIAS

HZ

SELECTAUSE床位分配

BROWSE要回到B工作区,以下四条命令是等价的SELECTB|SELECT2

SELECTHZ|

SELECT患者信息3.7.1工作区与多个表3.非当前工作区字段的引用【格式】<工作区别名>-><字段名>或<工作区别名>.<字段名>【说明】通过工作区别名指定访问的工作区,所得到的字段值为指定工作区打开的表当前记录的字段值【例4.27】在1号工作区和2号工作区内分别打开表“患者信息.dbf”和“床位分配.dbf”,在1号工作区内查看当前记录的姓名、性别、出生日期、医生姓名、护士姓名和床位号等字段内容。3.7.1工作区与多个表SELECTAUSE患者信息SELECTBUSE床位分配SELECTADISPLAY姓名,性别,出生日期,B.医生姓名,B.护士姓名,B->床位&&显示A区当前记录的姓名、性别、出生日期字段值和B区当前记录的医生姓名、护士姓名、床位字段值学号姓名班级课程号成绩011110李建国计0121C60185011110李建国计0121C60387011202赵娜英0112C60188011202赵娜英0112C60488011202赵娜英0112C60583课程号课程名学时数C601高等数学150C602数据结构100C603操作系统80C604英语听力60C605大学物理60课程信息表:kc.dbf学生成绩表:cj.dbf2023/1/11每一个工作区都有一个自己的记录指针3.7.2表间的逻辑连接1.关联的概述表间的逻辑连接又称做关联。所谓关联是把工作区中打开的表与另一个工作区中打开的表根据关键字段进行逻辑连接,而不生成新表。两个表建立关联后,当前工作区中的表记录指针移动时,被关联工作区的表记录指针也将自动相应移动,以实现对多表的同时操作。在多个表中,必须有一个表为关联表,此表常称为父表或主表,而其他的表则称为被关联表,常称为子表。在两个表之间建立关联,必须以某一个字段为标准,该字段称为关键字段。表文件的关联可分为一对一关联、一对多关联和多对多关联。2.创建表间关联(1)一(多)对一关联的建立①命令方式【命令】SETRELATIONTO<关键字段>|<数值表达式>

INTO<工作区号>/<别名>[ADDITIVE]【功能】将当前工作区表与另一工作区表按关键字段或者记录号建立逻辑关联。这时,当主表记录指针移动时,被关联数据表的记录指针也将同步移动。

【说明】1、使用<关键字段>时,其中的关键字必须是主表和别名表都存在的,且别名表必须打开以此关键字建立的索引文件;使用<数值表达式>时,则别名表不必索引,此时主表记录指针移动时,被关联数据表的记录指针自动定位到其记录号与数值表达式值相匹配的记录上。

2、使用ADDITIVE时,当前表与其他表已经建立的关联仍有效;否则在建立本次关联时,将自动撤消当前表与其他数据表已建立的关联。3.7.2表间的逻辑连接3、当父表文件的记录指针移动时,子表文件的记录指针就定位于<关联表达式>值与<索引表达式>值相等的第一条记录上。如果子表中找不到匹配的记录,则子表的记录指针指向文件尾,这时EOF()返回值为.T.。【例4.28】将“患者信息.dbf”表和“床位分配.dbf”表以住院号为关键字段建立一对一的关联。SELECT2USE床位分配INDEXON住院号TOzyh&&索引表达式为住院号SELECT1USE患者信息SETRELATIONTO住院号INTOB&&关联表达式为住院号LIST住院号,姓名,B.医生姓名,B.护士姓名,B.床位3.7.2表间的逻辑连接学号姓名班级课程号成绩011110李建国计0121C60185011202赵娜英0112C60188011110李建国计0121C60287011202李建国英0112C60388011202赵娜英0112C60383课程号课程名学时数C601高等数学150C602数据结构100C603英语听力80C604操作系统60C605大学物理60课程表:kc.dbf学生成绩表:cj.dbf2023/1/11SELECT1USECJALIAS成绩表INDEXON课程号TAG课程

SELECT2USEKCSETRELATIONTO课程号INTO1LISTA.学号,CJ.姓名,课程名,成绩表->成绩(3)一对多关联的建立①命令方式【格式】SETSKIPTO[<别名1>[,<别名2>]…]【功能】将当前表文件与其他工作区中的表文件建立一对多关联。【说明】1、SETSKIPTO命令要在使用SETRELATIONTO

命令建立了一对一的关联之后才能使用,2、当父表中的一个记录与子表的多个记录相匹配时,在使用SKIP命令,父表的指针不移动,而子表的指针却向下移动,指向下一条与父表相匹配的记录;重复使用SKIP命令,直至在子表中没有与父表当前记录相匹配的记录后,父表的指针才向下移动。3、无任何选择项的SETSKIPTO

命令将取消一对多的关联(一对一的关联仍然存在)。②菜单方式利用前面介绍的使用菜单建立一对一关联的步骤,只要每次选择的子表不同,就可以分别建立一个表文件同多个表文件的关联。3.7.2表间的逻辑连接学号姓名班级课程号成绩011110李建国计0121C60185011202赵娜英0112C60188011110李建国计0121C60287011202赵娜英0112C60388011202赵娜英0112C60583课程号课程名学时数C601高等数学150C602数据结构100C603英语听力80C604操作系统60C605大学物理60课程表:kc.dbf学生成绩表:cj.dbfSELECT1USECJALIAS成绩表INDEXON课程号TAG课程

SELECT2USEKCSETRELATIONTO课程号INTO1SETSKIPTOADISPA.学号,CJ.姓名,课程名,成绩表->成绩SKIPDISPA.学号,CJ.姓名,课程名,成绩表->成绩将“患者信息.dbf”表和“住院费用.dbf”表以住院号为关键字段建立一对多的关联。SELECT2USE住院费用INDEXON住院号TOzyh&&索引表达式为住院号SELECT1USE患者信息SETRELATIONTO住院号INTOB&&关

温馨提示

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

评论

0/150

提交评论