610 likes | 868 Views
第 5 章 VFP 数据库及其操作. 一、数据库的创建、修改、打开、关闭、删除. 创建: CREATE DATABASE [ 库文件名 ] 修改: MODIFY DATABASE [ 库文件名 ] 打开: OPEN DATABASE [ 库文件名 ] 关闭: CLOSE DATABASE [ 库文件名 ] 删除: DELETE DATABASE [ 库文件名 ]. Q :建立数据库( . DBC )的同时还建立了 几个文件? A : 2 个 —.DCT 和 .DCX
E N D
一、数据库的创建、修改、打开、关闭、删除 创建:CREATE DATABASE [库文件名] 修改:MODIFY DATABASE [库文件名] 打开:OPEN DATABASE [库文件名] 关闭:CLOSE DATABASE [库文件名] 删除:DELETE DATABASE [库文件名]
Q:建立数据库(. DBC )的同时还建立了 几个文件? A:2个—.DCT 和.DCX (数据库备注文件和数据库索引文件)
注意: 数据库与数据表不是一回事,其关系为包含关系。 若打开一个表,则该表所属于的数据库也被打开, 反之,打开一个库时,库中各表及其他文件并未打开。
二、数据表 表结构 数据表组成 记录数据
表的一些基本操作: 1、调用表设计器建立表: (1)菜单、工具操作方式:新建->表 (2)对应命令: CREATE [盘符] [路径] [表文件名] 如:CREATE E:\VFPYINGYONG\student 注: ①如不指定盘符、路径,即在当前盘当前目录 (默认路径)下建表。
②输入CREATE↙,未给文件名,则系统将提示输入表文件名。②输入CREATE↙,未给文件名,则系统将提示输入表文件名。 ③有备注或通用型字段,将建立对应的备注文件。 (表备注—.FPT)。 ④用CREATE建立表结构后,可立即进行数据输入,也可以后输入,方法:打开表后,选择显示->追加方式。
2、数据表结构的构成 4个结构参数: (1)字段名: 组成:字母、汉字、数字、下划线 开头:字母、汉字 长度:自由表≤10,数据库表≤128 (2)字段类型:同前讲的数据类型。 (3)字段宽度: 系统规定:日期(8)、逻辑(1)、 备注(4)、通用(4) (4)小数位数:针对数值型,至少比字段宽度小1。
注意: (1)字段类型: 原则上不用于计算的数值可定为字符型 (2)字段宽度:多大合适? 以可能出现的最大宽度为准,并考虑到将来 的变化 (3)表记录的输入 注意备注、通用型字段的输入方法 (4)终止数据输入并保存——关闭编辑窗口或表
数据库表设计器选项卡: • “字段”选项卡: 显示区: ①格式Format: 规定数据输出时的格式 如:^ 按科学计数法显示 !将字母转换成大写 ②输入掩码Input mask: 控制用户输入的格式 如只显示数字:9999 ③标题Caption: 指定字段显示时的标题
描述符: A ——允许输入字母 L——只允许输入逻辑型数据 N——只允许输入字母和数字 X——允许输入任意ASCII字符 Y——只允许输入Y、y 、N 、n或T 、t 、F 、f,并 转换成Y、N 9——只允许输入数字 #——允许输入数字、空格和+、-号 !——小写字母变大写字母 .——指定数值型数据的小数点位置
字段验证区: ①规则Rule: 防止非法数据输入 如:性别 sex 应限于男或女 则规则为 sex=‘男’ OR sex=‘女’ ②信息Message: 接收到违反规则的数据后,显示的 提示信息 如:“只能输入男或女” ③默认值: 设定缺省值,提高输入效率
字段注释区: 如对“学号”字段的注释: 学号由12位组成: 1-4位表示入学年份; 5-8位表示院系; 9-12位表示学生编号;
①表名Name: 为表另起名字(如中文名),作用类似于字段标题 ②记录验证区: a.规则Rule: 一条记录的若干字段取值要遵循的条件 如:学生的出生日期<=注册日期 则规则为:出生日期<=注册日期 b.信息Message: 接收到违反规则的数据后显示的提示信息 如:"出生日期应早于注册日期" • “表”选项卡:
3、调用表设计器修改表结构 (1)菜单、工具操作方式:显示->表设计器 右击表->修改 (2)对应命令: MODIFYSTRUCTURE 例:USE student MODI STRU 注:字段类型修改需慎重。 (若改变字段类型,则原字段内容可能丢失。 如:把C—>N,则丢失原有的非数字字符)。
4、显示表记录 LIST DISPLAY[<范围>] [FIELDS<字段名表>] [FOR WHILE<条件>] [OFF] [TO PRINT] [TO 文件名] 如:USE SB LIST
只列某几个字段或符合条件的记录: USE SB LIST 编号,名称,价格,备注 LIST FOR 名称=‘车床’ AND 价格>30000 LIST 编号,价格,备注 FOR 名称=‘车床’; AND 价格>30000
二者区别: (1) LIST —— 连续显示信息,中间不停 DISPLAY ——分屏显示(如DOS中DIR /P) (2)不选择范围项,隐含范围: LIST——ALL; DISPLAY——当前记录 即 LIST <=> DISP ALL
5、显示表结构: 格式:LIST DISPLAY STRUCTURE 例:USE STUDENT LIST STRU
显示结构结果: 注意:TOTAL=字段总宽+1 (删除标记)
问题:每一条记录的最大长度是多少? 64K字节(VFP6.0)
6、表的打开、关闭 在对数据表做任何操作之前,必须先将表文件打开。
(1)打开 USE [文件名] [INDEX 索引文件名表] [ALIAS 别名] [EXCLUSIVE SHARED] [NOUPDATE] 功能:在当前工作区打开指定的表文件。
说明: ①[INDEX索引文件名表]——表文件打开的同时, 将索引文件名表中所列索引文件打开。 ② [ALIAS别名]——指定表的别名。 ③ [EXCLUSIVE/SHARED]——指定表文件是以 独占方式还是以共享方式打开。
④[NOUPDATE]——打开的表不能被修改。 ⑤表中有备注型或通用型字段,则打开表的同时打开备注型文件 . FPT 。
(2)关闭表文件 USE——关闭当前工作区的表文件; CLOSE DATABASE ——关闭当前数据库及其中 的表文件; CLOSE TABLES ——关闭当前数据库中所有的 表,但不关闭数据库; CLOSE ALL ——关闭所有打开的文件 (表、库文件);
7、复制表结构 格式:COPYSTRUCTURE TO文件名 [FIELDS<字段名表>] 说明: ① 此命令只复制结构,不复制记录数据; ②[FIELDS<字段名表>] 无:所有字段照原样复制; 有:新表字段及字段顺序由字段名表决定。
例: USE student COPY STRU TO J1 COPY STRU TO J2 FIELDS sno,sname USE J1 LIST LIST STRU USE J2 LIST LIST STRU
显示结果: J1:结构与student相同,但无记录数据。 J2:只有2个字段,无记录数据。
8、复制表(结构、记录) COPY TO文件名 [<范围>] [FIELDS<字段名表>] [FOR WHILE<条件>] 思考: 如何将我们教科院的学生档案拷贝过来? USE STU COPY TO STU1 FOR SUBS(学号,6,3)=‘040’
9、复制任何文件 COPY FILE <文件名1> TO <文件名2> 例见 p55
10、记录的插入与追加 (1)插入 INSERT BLANK —— 在当前记录后插入一条空记录; INSERT BLANKBEFORE —— 在当前记录前插入一 条空记录; 例如: GO 2 INSERT BLANK
(2)追加 ①INSERT-SQL命令 INSERT INTO 表名[(字段名1[,字段名2,…])] VALUES (表达式1[,表达式2,…]) 例1: INSERT INTO sb(编号,名称,启用日期,价格,主要设备,备注); VALUES('110-1','打印机',{^1997-08-15},5000.00,.f.,'调拨') 例2: 学生表student有4个字段:学号,姓名,性别,年龄, 现添加一条记录,学号2009001,姓名王青,性别男, 年龄18 INSERT INTO student VALUES(“2009001”,”王青”,”男”,18)
②APPEND APPEND BLANK APPEND FROM源文件[FIELDS<字段名表>] [FOR WHILE<条件>] 三个APPEND命令的相同与区别: 相同:在表文件末追加记录,不管原表文件是否 已有记录。
区别: ①APPEND 可在表尾追加若干条记录(记录连续编号) ②APPEND BLANK 在表尾追加一条空记录,不提示用户输入。 (这一空记录的内容其后可用EDIT或REPLACE 命令进行替换。)
③APPEND FROM 源文件[FIELDS<字段名表>] [FOR WHILE<条件>] 从其他表文件成批追加记录。 优点:减少输入数据时间及出错机会。 说明: a.能用于不完全相同的表文件间的记录添加; b.字段名、类型相同的才添加; c.字段长度不一致:以目标字段长为准 多 — 截去 少 — 补空格 必要时,修改目标文件中字段长度。
例如:有RSDA与GZ两张表,其结构大致如下: 职工号 姓名 年龄 性别 …… , 职工号 姓名 基本工资 …… 要从RSDA中拷贝职工号和姓名到GZ表中,命令如下: USE GZ APPEND FORM RSDA [FIELDS 职工号 ,姓名]
11、记录的定位、删除、更新 (1)记录指针 ① 当前记录——记录指针指向的记录; ② 表文件刚打开时,指针总是指向第一条记录 (即首记录为当前记录); ③ 指针可以上下移动到任一记录位置上; 相关的检测指针位置的函数有: RECNO()——求当前记录号 BOF()——检测指针是否指向表头; EOF()——检测指针是否指向表尾; ④ 有些命令会同时移动指针 如:LIST 及有范围选项的命令。
(2)记录定位(移动记录指针) ① GO命令——绝对定位(移动) GO n GO TOP GO BOTTOM ② SKIP命令——相对定位(移动) SKIP 记录指针向后移动一条记录 SKIP + n 记录指针向后(+)或向前(-) 移动n条记录 ③ LOCATE FOR……CONTINUE ——条件定位
1 例:假设顾客表GK共有7条记录 USE GK ?RECNO() ?BOF() SKIP –1 ?BOF() ?RECNO() LIST ?RECNO() ? EOF() .F. .T. 1 8 .T.
3 SKIP 2 SKIP –3 ?RECNO() GO BOTT ? RECNO() ? EOF() SKIP ? EOF() 2 7 .F. .T.
逻辑删除 (3)删除 物理删除 ① 逻辑删除——打删除标记* 加上删除标记: DELETE [<范围>] [FOR WHILE<条件>] 取消删除标记: RECALL [<范围>] [FOR WHILE<条件>]
例: DELETE RECO 6 GO 6 DELETE <=> Q: DELETE命令单独使用时删除的是什么记录?
—— 删除已打标记的记录 ② 物理删除 PACK 请问:若要物理删除第6条记录,命令该如何写? a. PACK RECO 6 (错误) (正确) b. DELETE RECO 6 PACK
注意: a、物理删除前要先进行逻辑删除; b、被物理删除的记录无法再恢复,使用 PACK命令需慎重;
③ 删除表中所有记录 ZAP DELE ALL PACK <=> ZAP只删除记录,不改变表结构。
SQL中的记录删除命令: DELETE-SQL 一般格式为: DELETE FROM <表名> [WHERE <条件>] 注意:该命令同样为逻辑删除,要物理删除需继续 使用PACK