1、2019/8/3,1,数据表设计,第4章,2,2019/8/3,主要内容,1.数据表的基本概念 2.创建新表 3.打开与关闭表 4.显示与修改表结构 5.复制表结构 6.复制数据表,7.浏览记录 8.追加记录 9.指针定位 10.修改数据表记录 11.删除记录,3,2019/8/3,4.1 数据表的基本概念,VFP6.0中的数据库是由许多相关联的数据表和其他对象组成,数据库的扩展名.DBC。 数据表可以有两种存在方式: 自由表单独的一个数据表,称之为自由表。 数据库表存在于数据库中的表,称之为数据库表。,问题1:自由表与数据库表的区别?,4,2019/8/3,4.1 数据表的基本概念,自由表与
2、数据库表的区别: 自由表的扩展名为.DBF。它独立存在,不与任何数据库相关联。 数据库表的扩展名为.DBF,它与某一个数据库相关联,数据库表有一些自由表所没有的特性:字段验证、记录验证、触发器和永久关系等。,问题2:自由表与数据库表可否互相转换?,5,2019/8/3,4.1 数据表的基本概念,自由表与数据库表的命名规则:命名规则和Windows系统中的规则一样,主文件名可以使用汉字、字母、数字、下划线及它们的组合,支持长文件名。不能用空格、和?等。扩展名为.DBF。工作区别名:系统默认A、B、CJ。W11、W12、W32767为工作区别名。,提示:不要把工作区别名作为数据库名或数据表名。,6
3、,2019/8/3,4.2 建立数据表结构,设计表的结构所谓表的结构,就是对表的每一列定义它的字段名、字段类型、字段长度、和小数点的位数以及是否允许NULL值等信息。 字段名字段名又称字段变量。它是由汉字、字母、下划线开头,后跟若干个汉字、字母、数字、下划线等组成的字符串。但不能用空格、和?。自由表的字段名最长为个字符,数据表中的字段最多是字符。,7,2019/8/3,字段类型每个字段中的数据必须是同一数据类型。 字段宽度数据宽度也称数据长度,指变量字段中的可能取值的最大宽度。而不是这段变量名本身的宽度。 小数位数只对数值型和浮点型数据有效,小数位的取值范围为0-15。 NULL值指定记录中字
4、段是否允许输入NULL(空)值。需要注意的是,NULL值与空格、空字符串或0是不同的。NULL不是一种数据类型,当一个字段的值被置为NULL时,其数据类型并不发生改变。,问题3:哪些数据类型的宽度是固定的?,8,2019/8/3,4.2 建立数据表结构,9,2019/8/3,4.2 建立数据表结构,建立表结构 建立表结构一般有四种方法: 利用表设计器 利用表向导 使用SQL语言的CREATE TABLE命令 利用命令方式创建 Create ,提示:若创建的数据表为数据库表, 则必须事先打开该数据库。,10,2019/8/3,4.2 建立数据表结构,建立表结构 建立表结构一般有四种方法: 利用表
5、设计器 【文件】“新建”对话框中选择“表” 新建文件进入“表设计器” 利用表向导 【文件】“新建”对话框中选择“表” 向导进入“表向导 ”,操作演示,问题4:通用型和备注型字段的内容如何输入?,提示:如果需要在一个字段上输入空值(NULL),则必须使用组合键:CTRL+0,或者输入“.NULL.”,11,2019/8/3,4.2 建立数据表结构,所有输入的数据记录输入完毕后,要单击窗口的关闭按钮或按Ctrl+W键退出输入数据状态。按Esc键或Ctrl+Q键也可关闭记录输入窗口,但最后输入的记录的数据将不被保存。备注型字段和通用型字段的内容都被保存在一个与表同名,扩展名为.fpt的文件中。,提示
6、:输入数据记录时,系统根据输入到表中顺序,表中的每个记录都自动赋予一个顺序号,称为记录号。,12,2019/8/3,4.2 建立数据表结构,使用SQL语言的CREATE TABLE命令 (第七章SQL语句) 利用命令方式创建 Create 【格式】CREATE 【功能】打开表设计器,建立一个新表结构,操作演示,create xsda,13,2019/8/3,4.3 打开与关闭表,打开表打开一个表最常用的方法有两种:一是在系统窗口中利用系统菜单按菜单操作的方式进行,二是在命令窗口中或程序中利用USE命令打开。 菜单方式: 【文件】“打开”在对话框中欲打开的选择文件名,14,2019/8/3,4.
7、3 打开与关闭表,命令方式: 【格式】 USE |?IN|ALIAS【功能】 打开表文件 指定需要打开的表,如果选择?号,则系统会显示一个“打开”对话框,让用户选择一个表打开。 用ALIAS子句为打开的表命名一个别名,若无此选项,原表主名就是它的别名。 如果选IN子句,那么可以用IN子句指定工作区号,以便在非当前工作区中打开一个表。 若当前工作区已经打开了一个表,则系统先关闭已打开的表,然后再打开指定的表。,15,2019/8/3,4.3 打开与关闭表,例如: USE 学生情况表.DBF &打开“学生情况表.dbf” 表文件 USE 学生情况表 ALIAS student &在打开表学生情况表
8、.dbf 的同时命名了一个别名student,16,2019/8/3,4.3 打开与关闭表,关闭表 若命令中输入不带任何参数的“USE”命令,则关闭当前工作区中已经打开的表。 若在当前工作区中新建或打开另外一个表,则系统自动关闭已在当前工作区中打开的表。 在系统提供的“数据工作期”窗口中,先单击选择需要关闭的表,然后单击“关闭”按钮,17,2019/8/3,4.4 显示与修改表结构,显示表结构 【格式】LIST| DISPLAY STRUCTUREto printerprompt|to files 【功能】显示表的结构。 1、命令执行之前首先应将表打开,否则系统将显示“打开”对话框,以选择要打
9、开的表。 2、LIST 和DISPLAY 可以选择任意一个,所不同的是:若字段较多,一页显示不下,LIST连续显示信息直到显示完毕为止;DISPLAY 采用分页显示信息,即显示一屏信息后暂停,按任意键或单击鼠标继续显示后面的内容。,USE 学生情况表 LIST STRU,18,2019/8/3,4.4 显示与修改表结构,修改表结构 【格式】MODIFY STRUCTURE 【功能】打开表设计器窗口,修改表结构 。 更改已有的字段 添加新字段 插入字段 删除字段 调整字段顺序,提示:1、字段宽度的总计数目?2、修改表结构应注意的问题?,19,2019/8/3,4.5 复制表结构,【格式】COPY
10、 STRUCTURE TO FIELDS【功能】复制当前表的结构,生成一个只有结构的自由表。,USE 学生情况表 COPY STRU TO stu FIELDS 学号,姓名,性别 USE stuDISP STRU &查看新表的结构,20,2019/8/3,4.6 数据表的复制,命令方式 【格式】COPY TO FORFIELDS 【功能】将打开的表全部或部分记录复制到指定的表中,产生一个新表。 【说明】 首先需要打开要复制的表,执行命令后新表处于未打开的状态;若需要操作新表,则应先将其打开。 新表的结构由FIELDS指定,确省时系统默认为全部字段。 复制的数据记录由短语和FOR短语指定,若确省
11、则系统默认全部记录。,21,2019/8/3,4.6 数据表的复制,【例1】 copy to shmf1 for 性别=“女“ type deli结果: “s0201103“,“刘雨“,“女“,01/02/1985,565,F, “s0201105“,“吴红梅“,“女“,05/12/1984,595,F, “s0201107“,“金阳“,“女“,11/07/1983,550,T, “s0201108“,“张敏“,“女“,09/30/1984,586,F,22,2019/8/3,4.6数据表的复制,【例2】 copy to shmf2 for 性别=“女“ type deli with blan
12、k 结果: “s0201103“ “刘雨“ “女“ 01/02/1985 565 F “s0201105“ “吴红梅“ “女“ 05/12/1984 595 F “s0201107“ “金阳“ “女“ 11/07/1983 550 T “s0201108“ “张敏“ “女“ 09/30/1984 586 F,23,2019/8/3,4.6 数据表的复制,【例3】 copy to shmf3 for 性别=“女“ type deli with tab 结果: “s0201103“ “刘雨“ “女“ 01/02/1985 565 F “s0201105“ “吴红梅“ “女“ 05/12/1984
13、595 F “s0201107“ “金阳“ “女“ 11/07/1983 550 T “s0201108“ “张敏“ “女“ 09/30/1984 586 F,24,2019/8/3,4.6 数据表的复制,【例4】 copy to shmf4 for 性别=“女“ type deli with “ 结果: s0201103,刘雨,女,01/02/1985,565,F, s0201105,吴红梅,女,05/12/1984,595,F, s0201107,金阳,女,11/07/1983,550,T, s0201108,张敏,女,09/30/1984,586,F,25,2019/8/3,4.7 数据
14、表记录的浏览,菜单方式 浏览模式(行式):【显示】 浏览 编辑模式(页式):【显示】 编辑 显示部分记录和字段【表】属性“工作区属性”窗口,26,2019/8/3,命令方式 【格式】 LIST|DISPLAYFIELDSFOR WHILEOFFTO PRINTER 【说明】 FIELDS指定要显示的字段名,它们之间用逗号分隔,FIELDS可选可不选。若缺省该项,显示表中的所有字段,但备注型、通用型字段不显示。 和FOR可选项短语限定显示的记录的范围和应满足的条件,相当于记录过滤器。 选OFF时,不显示记录号而只显示记录内容。 LIST和DISPLAY的区别有两点:一是若范围和条件短语均缺省,L
15、IST显示所有记录,DISPLAY显示当前记录;二是若记录很多,一页显示不下时,LIST连续显示,DISPLAY分页显示。,27,2019/8/3,4.7 数据表记录的浏览,【例1】 USE 学生情况表LIST 【例2】USE 学生情况表 DISPLAY & 显示当前记录DISPLAY ALL & 分屏显示所有记录DISPLAY FOR 性别=“男” FIELDS 姓名,性别,出生年月LIST 姓名,性别 LIST OFF 性别=“女”,28,2019/8/3, BROWSE命令 【格式】BROWSE FIELDSFORFREEZELOCK NOAPPEND NOMODIFY 【说明】 FIE
16、LDS 选项用来指定窗口中显示的字段,确省该选项系统默认为全部字段。 FOR 选项用来指定记录的显示条件,确省该选项系统默认为全部记录,即ALL。 FREEZE 选项用于指定可以编辑的字段。 LOCK选项指定锁定到的字段序号。,29,2019/8/3,4.7 数据表记录的浏览,【例1】BROW &显示“学生情况表.dbf” 【例2】BROW FIELDS 学号,姓名,性别,出生年月 FOR 性别=”男”,30,2019/8/3,4.8 数据表记录的追加,菜单方式打开表 显示浏览(或编辑)追加方式打开表 显示浏览(或编辑) 表 追加新记录 命令方式 【格式】APPEND BLANK 【功能】向当
17、前打开表中追加若干条记录或一条空记录。 不选任何可选项,则打开记录输入窗口(编辑窗口),可以追加若干条记录。 选BLANK只能在尾部添加一条空白记录,不打开记录输入窗口,并将记录指针指向这条记录空记录。,31,2019/8/3,4.8 数据表记录的追加,【例1】 USE 学生情况.dbf &打开学生情况表 APPEND &打开表编辑窗口,追加记录 APPEND BLANK,32,2019/8/3,4.8 数据表记录的批量追加,菜单方式打开表 在“浏览”窗口状态下 表 追加记录 进入“追加来源”对话框 命令方式 【格式】APPEND FROMFIELDSFOR 【功能】将指定的表中的记录追加到当
18、前打开的表中。 命令执行前要首先打开目的表(要追加记录的表),而源表则不需要提前打开。 选?将弹出“打开”对话框,以选择包含追加记录的文件。 FIELDS短语指定追加的字段,FOR短语用来指定要追加的记录应满足的条件,不选FOR短语则将所有记录添加到当前表中。,33,2019/8/3,4.8 数据表记录的批量追加,【例1】 USE xuesheng APPEND FROM 学生情况表 FOR 性别=”男” list use,34,2019/8/3,4.9 数据表记录的插入,菜单方式命令方式 【格式】INSERT BEFORE BLANK 【功能】在当前表中插入新记录。使用BEFORE选项,则在
19、当前记录之前插入一条新记录,缺省该选项则在当前记录之后插入新记录。若有BLANK选项则插入一条空白记录,并不立即进入新记录数据的输入状态,否则立即弹出新记录的编辑窗口,输入记录数据。,35,2019/8/3,4.9 数据表记录的插入,【例1】 use 学生情况表 list go 4 insert before blank list,问题3:insert 和 append的区别?,36,2019/8/3,4.10 数据表记录的指针定位,当前记录:系统设有一个记录指针,该指针指向的记录称为当前记录。打开一个数据表时,记录指针指向第一条记录。随着命令的执行,指针不断移动。 记录定位:若要操作表中(修
20、改某一个字段值),必须先使记录指针指向该记录,称为记录定位。,37,2019/8/3,4.10 数据表记录的指针定位,菜单方式打开表后,显示“浏览”窗口,然后执行“表”菜单中的“转到记录”命令后的级联菜单选择执行相应的命令。 命令方式 指针移动有绝对移动和相对移动两种情况: 指针的绝对移动所谓指针的绝对移动,就是不考虑目前指针的位置,直接将指针移动到指定的记录上。,38,2019/8/3, 指针的绝对移动 【格式一】GO|GOTO TOP|BOTTOM 【格式二】GO|GOTO 【功能】将指针定位到指定的记录或第一条、最后一条记录上命令中GO、GOTO可任选一种,二者的作用是等价的。选项TOP
21、可将记录指针定位在表的第一条记录上,但此时函数BOF()的值为.F.。选项BOTTOM可将记录指针定位在表的最后一个记录上,但此时函数EOF()的值为.F.。,39,2019/8/3,4.10 数据表记录的指针定位,当指针移到第一条记录之前(注:不是第一条记录)时,则BOF()的值为T.,否则BOF()为.F.。当指针移到最后一条记录之后(注:不是最后一条记录)时,EOF()为.T.,否则为.F.。当且仅当表为空时,BOF()和EOF()才同时为.T.。另外,系统还提供了一个用于测试当前记录记录号的函数RECNO(),该函数返回值为当前记录指针所指向记录的记录号。,问题4:go top ?re
22、cno()?bof(),40,2019/8/3, 指针的相对移动所谓指针的相对移动,就是相对于当前记录指针的位置,向前或向后移动n条记录。 【格式】SKIP+|- 【功能】记录指针以当前记录为基准,向前或向后移动条记录。 【说明】若的值是一个正数(此时“+”号可以省去),表示指针从当前位置向后(表尾部)移动个记录。若的值是一个负数,表示指针从当前位置向前(表头部)移动个记录若只有SKIP命令而没有指定,则默认的值为+1。,41,2019/8/3,4.10 数据表记录的指针定位,USE 学生情况表 &假设表中10条记录 ?RECNO(),BOF() &结果为1,.F. SKIP 1 ? RECN
23、O(),BOF() &结果为1,.T. GO 4 ? RECNO() GO BOTTOM ? RECNO(),EOF() &结果为10,.F. SKIP ? RECNO(),BOF() &结果为11,.T.,42,2019/8/3,条件定位 【格式】LOCATEFOR|WHILE 【功能】在当前表中将指针定位在指定范围内满足给定条件的第一个记录上。LOCATE命令在表中顺序查找满足条件的记录,即从第1条记录开始按记录号的顺序依次进行查找。 缺省时,默认为ALL。找到符合条件的记录,则将记录指针指向该记录,此时EOF()为.F.,FOUND()为.T.;若未找到符合条件的记录,则记录指针指向最后
24、一条记录的后面,此时EOF()为.T.,FOUND()为.F.。程序中常常测试FOUND()和EOF()的值来判断是否找到某一个记录。LOCATE命令只能将记录指针定位到第一个符合条件的记录上,若要继续查找满足条件的其他记录,可以执行继续查找命令CONTINUE。,43,2019/8/3,条件定位 【格式】CONTINUE 【功能】继续执行LOCATE命令 CONTINUE必须在LOCATE命令之后使用,用来继续查找满足条件的记录。 CONTINUE可多次使用,直到记录指针移到表尾或超出范围。,44,2019/8/3,4.10数据表记录的指针定位,USE 学生情况表 LOCATE ALL FO
25、R 性别=“男” ?FONND() DISP CONTINUE,45,2019/8/3,4.11 数据表记录的修改,菜单方式 浏览窗口(或编辑窗口)中修改 “浏览”窗口中显示,执行系统菜单“表”下的“替换字段”命令,则弹出“替换字段”对话框 。 命令方式 【格式】 REPLACE WITH ,WITH , FOR 【功能】对当前表中指定范围内满足条件的记录分别用表达式的值自动取代相应字段的原来值。,46,2019/8/3,4.11数据表记录的修改, 如果不选用和FOR短语,则只对当前记录进行字段更改。 如果只选定了短语,则对指定范围内的所有记录进行字段更改。如果只选了FOR短语,则默认范围AL
26、L。 可以同时更改几个不同字段的值。其中,是需要更新的字段名,而WITH后面的的值用来替换对应字段的值。值的数据类型必须和字段的类型相同。,47,2019/8/3,4.11 数据表记录的修改,利用EDIT 命令修改数据【格式】 EDIT|CHANGE FIELDSFOR,48,2019/8/3,4.12 数据表记录的删除和恢复,删除表中记录的操作有2种方式,一是逻辑删除,二是物理删除。 逻辑删除逻辑删除记录只对记录作删除标记,并未从表中真正删除这些记录,这些记录仍然保存在表中,并可在必要时恢复成正常的记录。 浏览窗口中逻辑删除记录逻辑删除最简单的方法是在浏览窗口单击每个要删除记录左边的小方框,
27、标记要删除的记录(小方框变黑)。 用“表”菜单操作打开“浏览”窗口后,执行“表”菜单下的“删除记录”命令,可在弹出的“删除”对话框中设定要删除记录的范围和条件,49,2019/8/3,4.12 数据表记录的删除和恢复, 命令删除 【格式】DELETE FOR 【功能】逻辑删除指定的记录。 【说明】和FOR均不选时,仅逻辑删除当前记录。 【例】USE 学生情况表DELE ALL FOR 性别=”女” &删除性别为“女”全部记录,50,2019/8/3,4.12 数据表记录的删除和恢复,注意:若没有使用SET DELETE ON 命令,即SET DELETE状态为OFF,则逻辑删除的记录和其他记录
28、一样参与操作,否则,被逻辑删除的记录将被隐藏起来,不参与有关的计算。默认情况下是OFF状态。用LIST或DISPLAY命令显示数据记录时,则作了逻辑删除的记录第一个字段前会显示一个“*”号。,51,2019/8/3,4.12 数据表记录的删除和恢复,恢复逻辑删除的记录 浏览窗口中逻辑删除记录浏览窗口中,再次单击已被逻辑删除记录的逻辑删除标记,小方块即恢复正常的颜色。表明该记录已恢复为正常记录。 利用命令恢复已逻辑删除的记录 【格式】 RECALLFOR 【 功能】将已作过逻辑删除的记录恢复为正常记录。,52,2019/8/3,物理删除 菜单操作 执行系统“表”菜单下的“彻底删除”命令,将弹出一个确认对话框,单击“确定”按钮即可 命令方式 【格式】PACK 【说明】删除后的记录不能再恢复。 删除表中的所有记录 【格式】ZAP IN| 【说明】ZAP等效于DELETE ALL和 PACK两条命令连用。由于ZAP命令删除的记录不能恢复,所以要慎用该命令。,