420 likes | 568 Views
第 2 章 VFP 表的基本操作. 2.1 VFP 表的建立 的建立、修改与运行 2.1.1 分析和设计表的结构 表是由行和列组成的二维表格,它是处理数据和建立关系数据库及其应用程序的基本单元。 表分为自由表和数据库表。自由表是独立于数据库而存在的一种表,而数据库表是包含在数据库中的表。 表主要由结构和记录两部分组成。结构可以理解为表的框架,记录即表中的数据。. 关系名. 记录 ( 行 ). 属性 ( 列 ). 1. 表结构的分析. 字段名. Teacher 表. 值. 2.1.2 表结构的建立. 菜单方式 命令方式 项目方式. 字段的基本属性.
E N D
第2章 VFP表的基本操作 2.1 VFP表的建立的建立、修改与运行 2.1.1 分析和设计表的结构 • 表是由行和列组成的二维表格,它是处理数据和建立关系数据库及其应用程序的基本单元。 • 表分为自由表和数据库表。自由表是独立于数据库而存在的一种表,而数据库表是包含在数据库中的表。 • 表主要由结构和记录两部分组成。结构可以理解为表的框架,记录即表中的数据。
关系名 记录(行) 属性(列) 1.表结构的分析 字段名 Teacher表 值
2.1.2表结构的建立 • 菜单方式 • 命令方式 • 项目方式
字段的基本属性 • 字段名(Field Name),每一个字段必须取一个名字,称为“字段名”,用以在表中标志该字段。以字母或汉字开头,可包括字母、汉字、数字和下划线,长度不超过10。 • 字段的数据类型(Type),表中每个字段都有特定的数据类型。 • 字段宽度(Width),指该字段所能容纳数据的最大的字节数,字段的宽度必须能足够容纳可能的最长的数据信息。除字符型、数值型、浮动型字段由用户根据需要设定字段宽度外,其它类型均由系统规定宽度。
字段的基本属性 • 小数位数(Decimal),对于数值型、浮点型和双精度型的字段,还可以指定其小数的位数。小数位和正负号都须在字段宽度中占一位。 • 空值(NULL)支持,空值是用来指示记录中的一个字段“没有值”的标志。空值表示没有任何值或没有确定值,空值不同于数值0、空字符串或逻辑“假”。
2.1.3 表数据的录入 表数据的输入要点: • 逻辑型字段只能接受.T.,.Y.,.F.,.N.四个字母之一; • 日期型数据必须与日期格式相符,默认按美国格式mm/dd/yy; • 对于备注型和通用型字段,输入时将光标定位在memo或gen区,双击鼠标,打开相应的编辑窗口,输入完后,按ctrl+w存盘退出,按esc或ctrl+Q输入作废。
2.2 表的打开与关闭 2.2.1 打开表 【命令】USE [<文件名>] 【功能】打开表文件,当USE后不加文件名时,为关闭已打开的表。
2.3 表的显示 • 浏览窗口的打开: 方法一:打开表 选定“显示”菜单的“浏览”命令 方法二:USE<表名> BROWSE • 一窗两区:将窗口分割器向右拖动
BROWSE命令 【命令格式】BROWSE [<范围>][FIELDS<字段名表>][FOR<条件表达式>][LAST] 【功能】在“浏览”窗口中显示或修改数据。 【说明】使用FIELDS子句,对指定的字段进行操作。使用FOR子句,对满足条件的记录进行操作。LAST子句选用最后一次的显示配置(浏览方式或编辑方式)。
BROWSE命令例题 【例2.8】 使用BROWSE命令浏览表teacher.dbf中的记录。 USE teacher EXCLUSIVE BROWSE 【例2.9】使用BROWSE命令浏览表teacher.dbf中职称是“讲师”的记录。 USE teacher EXCLUSIVE BROWSE FOR 职称="讲师" 【例2.10】使用BROWSE命令浏览表teacher.dbf中记录的“姓名”、“性别”、“出生年月”三个字段的内容。 USE teacher EXCLUSIVE BROWSE FIELDS 姓名,性别,出生年月
LIST/DISPLAY命令 【命令格式】LIST/DISPLAY [<范围>] [FIELDS<字段名表>] [FOR <条件表达式>] [OFF] [TO PRINT][TO FILE <文件名>] 【功能】在工作区窗口显示当前表中符合条件的记录。 【说明】 • LIST命令的范围默认值为ALL,DISPLAY命令的默认值为当前记录。如省略范围,使用[FOR<条件>]子句,默认范围为ALL。 • 若省略FIELDS子句,默认所有字段。 • 若省略OFF子句,显示记录号,否则不显示记录号。 • 若使用TO PRINT子句,输出记录到打印机。默认输出到屏幕。 • 若使用TO FILE <文件名>子句,将输出内容写入指定表文件。
LIST/DISPLAY命令例题 【例2.11】在工作区窗口显示表teacher.dbf中记录。 USE teacher EXCLUSIVE LIST 【例2.12】在工作区窗口显示表teacher.dbf中计算机教研室老师的记录。 USE teacher EXCLUSIVE LIST FOR 教研室="计算机"
LIST/DISPLAY命令例题 【例2.13】在工作区窗口显示表teacher.dbf中70年以前出生的老师记录。 USE teacher EXCLUSIVE LIST FOR 出生年月<{^1970/1/1} 【例2.14】在工作区窗口显示表teacher.dbf中月收入在1000元以上的老师的姓名、月收入。 USE teacher EXCLUSIVE LIST FOR 月收入>1000 FIELDS 姓名,月收入
LIST/DISPLAY命令例题 【例2.15】在工作区窗口显示表teacher.dbf中已婚老师记录。 USE teacher LIST FOR 婚否 OFF
2.3.2表结构的显示 【命令格式】LIST/DISPLAY STRUCTURE 【功能】在工作区窗口显示当前表的结构。 【例2.16】显示表teacher.dbf的结构。 USE teacher LIST STRUCTURE
2.5文件的复制和删除2.5.1表文件的复制 【命令格式】COPY TO <新表名>[<范围>][FIELDS<字段名表>][FOR<条件>] 【功能】将当前表的结构和记录全部或部分复制到新表中。 【说明】 若没有任何子句,则将复制一个与当前表结构和内容完全相同的新表。新表的结构由FIELDS子句的<字段名表>决定,新表的记录个数由FOR子句的<条件>决定。
表文件的复制 【例2.18】复制完全相同的表teacher.dbf到teacher2.dbf和teacher2.fpt. USE teacher COPY TO teacher2 USE teacher2 LIST 【例2.19】从表teacher.dbf复制到teacher3.dbf,新表中含有女教师的“姓名”、“性别”、“教研室”3个字段。 USE teacher COPY TO teacher3 FOR 性别="女" FIELDS 姓名,性别,教研室 USE teacher3 LIST
2.5.2表结构的复制 【命令格式】COPY STRUCTURE TO <新表名> [FIELDS<字段名表>] 【功能】将当前表的结构全部或部分复制到新表中。 【说明】产生的新表是一个只有表结构而没有记录的空表。若使用FIELDS子句,则新表只包含FIELDS子句指定的字段。
2.5.3任意类型文件的复制 【命令格式】COPY FILE <源文件名> TO <目标文件名> 【功能】将源文件内容拷贝到目标文件中去。 【说明】 • 该命令可复制任何类型的文件。 • 源文件和目标文件若有扩展名,必须写上。 • 源文件和目标文件不能使用通配符 “*”、“?”。 • 使用该命令前,源文件必须是关闭的。 • 若源文件是一个带有备注型字段的数据表文件,则需要另外复制.FPT文件。
2.5.4文件的删除 【命令格式】ERASE/DELETE FIEL <文件名>/? 【功能】删除磁盘文件。 【说明】 • 要删除的文件中若有扩展名,必须写上。 • 要删除的文件中可以使用通配符 “*”、“?”。 • 文件名前可带盘符和路径,若省略盘符和路径,则指当前盘当前路径。 • 使用该命令前,被删除的文件必须是关闭的。 • 若要删除的文件是带有备注型字段的数据表文件,则需要另外删除.FPT文件。
2.6记录指针的定位 • 表中的每个记录都有一个编号,称为记录号。对于打开的表,会被分配一个记录指针。记录指针指向的记录称为当前记录。 • 定位记录就是移动记录指针,使指针指向符合条件的记录过程。使用RECNO()函数可以获得当前记录的记录号。 • 表文件有两个特殊的位置:文件头(表起始标记)和文件尾(表结束标记)。文件头在表的第1个记录之前,当记录指针指向文件头时,BOF()函数的值为.T.;文件尾在表的最后1个记录之后,当记录指针指向文件尾时,EOF()函数的值为.T.,
2.6.1 绝对定位 将记录指针直接定位到某条记录,称记录的绝对定位。 【命令格式】GO / GOTO [TOP / BOTTOM]/ <n>] 【功能】将记录指针指向定位记录 【例2.21】GO 命令定位示例。 USE teacher ?RECNO() && 刚打开的表,指针指向第 1个记录 GO BOTTOM && 定位到末记录 ?RECNO() ?EOF() GO 3 ?RECNO() GO TOP && 定位到首记录 ?RECNO()
2.6.2相对定位 【命令格式】SKIP[+/-] [<数值表达式>] 【功能】从当前记录开始向前或向后移动记录指针。 【说明】 • SKIP 向表尾方向移动1个记录。 • SKIP +n 向表尾方向移动n个记录。 • SKIP -n 向表头方向移动n个记录。
2.7记录的追加与插入2.7.1记录的追加 【命令格式】APPEND [BLANK] 【功能】在已打开的当前表的尾部追加一个或多个记录。 【说明】当命令使用BLANK子句时,在表的尾部追加一个空白记录,并且不进入编辑窗口。
2.7.2记录的插入 【格式】INSERT [BEFORE][BLANK] 【功能】在当前表中某个记录的之前或之后插入记录。 【说明】 • INSERT 表示在当前记录的之后插入一条记录。 • INSERT BEFORE表示在当前记录的之前插入一条记录。 • INSERT BLANK 或INSERT BEFORE BLANK表示在当前记录之后或之前插入一条空记录。 • 插入空记录后,其后所有记录的记录号加1,空记录只有记录号而无内容。
2.8记录的删除和恢复2.8.1记录的逻辑删除 【命令格式】DELETE [<范围>] [FOR <条件> ] 【功能】逻辑删除指定范围内符合条件的记录。删除标记用“*”表示。 【例2.25】逻辑删除表teacher.dbf中的第3个和第5个记录。 USE teacher EXCLUSIVE GO 3 DELETE GO 5 DELETE LIST
2.8.2记录的恢复 【命令格式】RECALL [<范围>] [FOR <条件表达式> ] 【功能】恢复指定范围内符合条件的被逻辑删除的记录为正常记录。 【说明】 • RECALL 仅恢复当前记录指针指向的带有删除标记一个记录。 • RECALL ALL恢复所有带删除标记的记录。 • 若使用FOR <条件表达式>子句,则恢复指定范围内所有符合条件的带有删除标记的记录。
2.8.3记录的物理删除 【命令格式】PACK 【功能】物理删除所有带删除标记的记录。 【说明】PACK命令不受SET DELETE ON/OFF状态的影响。 【例2.27】物理删除表teacher.dbf中的第3个记录。 USE teacher EXCLUSIVE RECALL ALL GO 3 DELETE PACK BROWSE
2.8.4记录的清空 【命令格式】ZAP 【功能】物理删除表中的全部记录,删除后,表中只保留结构,没有记录。
2.9 VFP表的修改2.9.1表结构的修改 【命令格式】MODIFY STRUCTURE 【功能】打开“表设计器”对话框,修改当前表的结构。 【例2.28】用命令修改表teacher.dbf的结构。 USE teacher EXCLUSIVE MODIFY STRUCTURE
2.9.2表记录的修改 1.在“浏览”窗口中修改记录 2.EDIT/CHANG命令 3.REPLACE命令 【命令格式】REPLACE [<范围>][<字段名1> WITH <表达式1>], [<字段名2> WITH <表达式2>]…[<字段名n> WITH <表达式n>] [FOR <条件表达式>] 【功能】用表达式的值替换指定字段的值,即用表达式1的值替换字段名1原来的值;用表达式2的值替换字段名2原来的值;……。
【例2.30】将表teacher.dbf中所有教师的工资增加500元。【例2.30】将表teacher.dbf中所有教师的工资增加500元。 USE teacher EXCLUSIVE REPLACE ALL 月收入 WITH 月收入+500 BROWSE 【例2.31】将表teacher.dbf教师景秀丽的职称由“讲师”改为“副教授”。 USE teacher EXCLUSIVE REPLACE 职称 WITH "副教授" FOR 姓名="景秀丽" BROWSE
【例2.32】给表teacher.dbf增加一个记录,各个字段的值依次是:“石磊”、“男”、“10/30/63”、“已婚”、“计算机”、“教授”、“1800元”。【例2.32】给表teacher.dbf增加一个记录,各个字段的值依次是:“石磊”、“男”、“10/30/63”、“已婚”、“计算机”、“教授”、“1800元”。 USE teacher EXCLUSIVE APPEND BLANK REPLACE 姓名 WITH "石磊",性别 WITH "男",出生年月 WITH {^1963/10/30},婚否 WITH .t. ; 教研室 WITH "计算机",职称 WITH "教授",月收入 WITH 1800 BROWSE LAST
2.9.3记录与数组间的数据传送1.将当前记录复制到数组或内存变量中2.9.3记录与数组间的数据传送1.将当前记录复制到数组或内存变量中 【命令格式】SCATTER [FIELDS<字段名表>][MEMO] [BLANK]TO [<数组名>]│[MEMVAR] 【功能】将当前记录的字段值按<字段名表>顺序依次送入数组元素中,或一组内存变量中。 【说明】 • 若使用FIELDS子句,则只传送字段名表中的字段,否则将传送所有字段(备注型字段除外)。若传送备注型字段,还需使用MEMO选项。 • 使用TO <数组名>子句能将数据复制到<数组名>所示的数组元素中。 • 使用MEMVAR可将数据复制到一组变量名与字段名相同的内存变量中。 • 如果使用BLANK,则将创建一组与各字段相同数据类型的空内存变量。
【例2.33】SCATTER命令使用示例。 USE teacher EXCLUSIVE SCATTER BLANK TO A GO 4 SCATTER TO B GO 5 SCATTER TO MEMVAR DISPLAY MEMORY
2.数组或内存变量中的数据复制到当前记录 【命令格式】GATHER FROM <数组名>│MEMVAR [FIELDS<字段名表>][MEMO] 【功能】将数组或内存变量中的数据依次复制到当前记录,以替换相应的字段值。 【说明】 • 修改记录前需确定记录指针的位置。 • 若使用FIELDS子句,则只有<字段名表>中的字段才会被数组元素值替代,若传送备注型字段,还需使用MEMO选项。 • 内存变量将传送给与它同名的内存变量,若某字段无同名的内存变量,则不对该字段进行数据替换。 • 若数组元素多于字段数,则多出的数组元素不传送;若数组元素少与于字段数,则多出的字段值不会改变。
【例2.34】SCATTER命令使用示例。 USE teacher EXCLUSIVE COPY STRUCTURE TO teacher5 USE teacher5 APPEND BLANK GATHER FROM A APPEND BLANK GATHER FROM B APPEND BLANK GATHER FROM MEMVAR BROWSE
2.10 表的筛选 在实际应用中,表的记录较多或字段数目较大,处理数据就显得不大方便。Visual FoxPro提供了表的筛选功能,可以只对满足条件的部分记录或部分字段进行操作。挑选出满足条件记录的操作称记录的筛选,挑选出部分字段的操作称字段的筛选。
2.10.1 记录的筛选 • 命令中使用FOR短语 例如: LIST FOR LEFT(姓名,2)="张" • 工作区属性窗口中使用数据筛选功能
一定不要忘记 2.10.2 字段的筛选 • 命令中使用FIELDS短语 例如:LIST FIELDS 姓名,教研室 FOR 性别 • 工作区属性窗口中使用字段筛选功能