第四章表的建立和操作数据表和数据库基本操作常用的两种方式是:命令方式和菜单方式,前者是重要基础。下面主要讲述命令方式,菜单方式中常用和重要的才作介绍。一、建立表文件分建表结构和输入数据(增加记录)两个过程。1.建表结构【命令】CREATE表文件名【菜单】文件菜单---“新建”---在对话框中选“表”【功能】建立表结构,形成表文件,记录在之后输入。【说明】.表文件的默认扩展名为.dbf,可不输入;.保存路径:缺省为系统VFP子目录;使用工具菜单----“选项”--自定默认目录在命令窗口中执行SETDEFAULTTOD:\ABC即指明目录为D盘的ABC子目录.如表结构有备注型和通用型字段,VFP自动生成.fpt表备注文件;2.输入数据.命令(后面讲)进行输入;.结构建立以后出现编辑框,随即输入;【说明】.在表中输入数据时,各类型数据都不用定界符,如逻辑型直接用t(y)和f(y);.输入备注型和通用型数据时,分别双击备注型和通用型字段中的memo和gen,将数据输到.fpt文件中;.输入日期时,可用命令SETDATETO或工具菜单的“选项”项目进行设置。二、表的打开与关闭“打开”指表调入内存,在对表作所有操作之前,必须先打开表。“关闭”指内存清除并存盘。1.打开表【命令】USE表文件名【菜单】文件菜单----“打开”【说明】.表打开前,先关闭当前已打开的表文件,若有备注或通用型字段,则相应的.FPT文件也同时被打开;.文件打开时,记录指向首记录。.如果要修改结构或记录,应选打开对话框中的“独占”复选框,否则打开的表是只读文件。2.关闭表【命令】USE【功能】关闭当前已打开的一个表文件。【命令】CLOSEALL【功能】关闭所有工作区中的所有类型文件,但不释放内存变量。【命令】CLEARALL【功能】关闭所有工作区中的所有表及各类型文件,并且释放内存变量。【命令】CLOSE文件类型【功能】关闭数据库中文件类型指定的相应类型文件,如CLOSEDATABASE、CLOSETABLES(含自由表)。3.退出VFP【命令】QUIT【菜单】文件菜单---“退出”(注意不是“关闭”)或点击窗口右上方关闭按钮。【功能】关闭打开的所有文件,退出VFP,回到Windwos状态。三、表的显示1.表结构的显示【命令】DISPLAY/LISTSTRUCTURE[TOPRINTER|TOFILE文件名]【菜单】显示菜单-----表设计器【功能】显示表文件的字段结构信息。2.表记录的显示【命令】DISPLAY/LIST[范围][[FIELDS]字段名表][FOR条件][OFF][TOPRINT[PROMPT]/TOFILE文件]【功能】在表中按指定范围与条件筛选出记录并显示出来,或发送至指定设备。【说明】.LIST与DISP的区别:缺省范围LIST为全部记录而DISP为当前记录;LIST为滚屏显示而DISP为分屏显示。.FIELDS子句用于确定需要操作的字段(FIELDS可不写),字段名表用来列出需要的字段,缺省时显示除备注型、通用型字段外的所有字段。.可选项[OFF]指示不显示记录号,[TOPRINT]表打印。【命令】BROWSE[[FILEDS]字段名表][FOR条件[REST]]【菜单】显示菜单----“浏览”命令【功能】打开浏览窗口,可显示浏览和修改记录数据。【命令】SETFILTERTO[条件]【功能】筛选出满足条件的记录,以后用其它命令时只操作这些记录,不满足条件记录被忽略。【说明】取消筛选条件:SETFILTERTO【命令】SETFIELDSTO[字段名表]【功能】设定要操作的字段,用其它命令时只对字段名表中的字段进行操作。【说明】取消设定:SETFIELDSOFF四、表的记录指针定位记录指针所指的记录称为当前记录,每当打开表时指针总指向第一条记录,在操作中它可随时向前(上)或向后(下)移动。1.绝对定位【命令】GO[TO]数值表达式/TOP/BOTTOM【菜单】显示菜单---“浏览”-----“表”-----直接点击要定位记录的前面灰色区域【功能】将表文件的记录指针定位到指定的记录。【说明】.数值表达式代表所要定位记录的记录号,其值能小于1也不能大于记录总数加1。.TOP表定位到第一个记录(首记录).BOTTOM表定位到最后一个记录(尾记录)【例】USE学生&&打开“学生”表,设有10个记录,第一个为当前记录?RECNO()&&显示结果为1GO4?RECNO()&&显示结果为4GOBOTTOM?RECNO()&&显示结果为10GOTOP?RECNO()&&显示结果为1USE2.相对定位【命令】SKIP[数值表达式]【菜单】显示菜单-----“浏览”----“表”---“转到记录”--进行记录定位【功能】从当前记录开始向前或向后移动指针,数值表达式表示移位记录的个数。【说明】.[数值表达式]为正值,文件向后移位;为负值,文件向前移位;若缺省,相当于执行SKIP1,则指针向后移动一个记录。.执行SKIP命令前若执行了SETDELETEDON命令,则SKIP命令将不把具有删除标记的记录计算在内。【例】USE学生达式&&打开“学生”表,设有10个记录,第一个为当前记录?RECNO(),BOF()&&显示结果为1,.F.SKIP-1?RECNO(),BOF()&&显示结果为1,.T.SKIP3?RECNO(),BOF()&&显示结果为4,.F.GOBOTTOM?RECNO(),BOF(),EOF()&&显示结果为10,.F.,.F.SKIP1?RECNO(),BOF(),EOF()&&显示结果为11,.F.,.T.USE五、记录的插入和追加1.插入记录【命令】INSERT[BLANK][BEFORE]【说明】.[BEFORE]子句表在当前记录之前插入新记录,缺省则在当前记录之后插入新记录。.[BLANK]子句表插入一条空记录。2.记录的追加【命令】APPEND[BLANK]【菜单】显示菜单----“追加方式”或表菜单----“追加新记录”【功能】在当前表的表尾追加新记录【命令】APPENDFROM文件名[FIELDS字段名表FOR条件[[TYPE][DELIMITED[WITH定界符|WITHBLANK|WITHTAB]|SDF|XLS]](一般了解)【功能】将另一文件中的记录追加到当前表的表尾。【说明】.追加时,只能对两个文件中字段名和字段类型相同的数据进行。.源文件的类型可以是表,有TYPE子句时也可以是文本文件或MicrosoftExcel文件。.源文件不需打开。【命令】APPENDFROMARRAY数组名[FOR条件][FIELDS字段名表]该命令将在多记录和数组之间的数据交换的内容中介绍。(一般了解)六、记录的删除和恢复1.逻辑删除【命令】DELETE[范围][FOR条件]【功能】对当前表在指定范围内满足条件的记录加删除标记。【说明】.对满足条件的记录打上删除标记,即进行逻辑删除。若执行了SETDELETEDON命令,则以后不操作具有删除标记的记录。.如果选项都缺省只删除当前记录。【例】use学生deletefor入校总分=565&&入校总分565的学生全部作逻辑删除。listuse2.记录恢复【命令】RECALL[范围][FOR条件]【功能】去掉满足条件记录的删除标记,如可选项都缺省则只恢复当前记录。3.物理删除【命令】PACK【功能】从物理上删除,也即真正删除带有删除标记的记录。【说明】使用该命令将真正删除带有删除标记的记录,不可恢复。【例】DELETERECORD5PACK&&从盘中物理删除第5号记录。4.物理删除全部记录命令【命令】ZAP【功能】从物理表上删除当前表中的所有记录。【说明】执行ZAP相当于执行DELETEALL和PACK两条命令,应注意表结构仍保留。七、表的修改1.表结构的修改【命令】MODIFYSTRUCTURE【菜单】显示菜单---表设计器【说明】.当表处于打开状态时,“显示”菜单中会包含表设计器命令。.“字段”选项卡为用户提供了对表中字段的添加、删除以及设置字段的有效性规则。2.记录的修改【命令】EDIT[范围][字段名表][FOR条件]【说明】页式编辑的修改【命令】CHANGE[范围][字段名表][FOR条件]【说明】编辑修改,功能与EDIT相同【命令】BROWSE[范围][字段名表][FOR条件]【说明】浏览编辑修改【命令】REPLACE[范围][字段名表][FOR条件][WHILE条件]字段名1WITH表达式1[ADDITIVE][,字段名2WITH表达式2[ADDITIVE]……]【功能】.成批替换(修改)记录数据【说明】.缺省范围与条件,只对当前记录的有关字段进行替换。【例】将“学生”表中第5个学生记录的出生年日期改为“01/01/85”。USE学生GO5REPLACE出生日期WITHCTOD(“01/01/85”)USE【例】将“学生”表中全部女生的入校总分加10分。USE学生REPLACEALL入校总分WITH入校总分+10FOR性别=“女”USE【例】为学生.DBF增添一个字段出生星期C(1),并且添加出生星期的值,写出命令序列。USE学生MODISTRUREPLACEALL出生星期WITHSTR(DOW(出生年月),1)八、数据复制1.复制表结构【命令】COPYSTRUCTURETO文件名[FIELDS字段名表]【功能】复制当前表的结构,但不复制其中的数据。【说明】.FIELDS指定要复制的字段,缺省复制所有字段。.如有备注和通用字段,则自动建立相关的.fpt文件。【例】use学生copystruto学生成绩fields姓名,学号,入校总分use学生成绩liststru2.复制表文件【命令】COPYTO文件名[范围][FILEDS字段名表][FOR条件]【功能】将当前表中选定的部分记录和部分字段复制成一个新表或其它类型的文件。【说明】.对于含有备注型字段的表,系统在复制扩展名为DBF的文件的同时自动复制扩展名为FPT的备注文件。.复制所得的新表必须被打开,也即被选作为当前表后才可进行操作。.新文件的类型除了可以是表之外,还可加选项TYPE复制成其它类型文件。。【例】use学生copytoxscopytoxushengfields学号,姓名,性别FOR三好生usexueshenglistusexslistuse3.复制任何类型的文件【命令】COPYFILE文件名1TO文件名2【功能】从文件名1文件复制得文件名2文件【说明】要对表进行复制,该表必须处于关闭状态文件名1与文件名2可使用通配符*和?,表复制一类文件。【例】USECOPYFILEXSQK.DBFTOXSQK2.DBFCOPYFILEXSQK.FPTTOXSQK2.FPTCOPYFILEXSQK.*TOXSQK2.*九、数组和表之间的数据交换数组元素值或内存变量值可以传送到表内以替代记录中的数据,反之也能将记录中的数据输出到数组或内存变量中。1.单记录和数组之间的数据交换①表中记录传送到数组或内存变量【命令】SCATTER[FIELDS字段名表][MEMO]TO数组名[BLANK]\MEMVAR[BLANK]【功能】将当前记录的字段值按字段名表顺序依次送入数组元素中,或依次送入一组内存变量。【说明】.使用TO数组名子句能将数据复制到指定的数组中去。数组未定义或建立的元素个数不够,VFP自动建立或进行扩大。.使用MEMVAR能将数据复制到一组内存变量中。这些内存变量由系统自动建立,每一个内存变量与相应字段的名称、类型相同,且为与字段变量相区分,内存变量使用时可在其前面加上m..若要传送备注型字段还需加上MEMO选项。【例】use学