1.06k likes | 1.2k Views
第四章 Visual Foxpro 数据库及其操作. 内容. 介绍数据库、数据表的基本概念 数据库和数据表的建立 编辑表中的数据、记录修改与删除 表的索引等有关操作。. 概念. 数据库 (.dbc) 就是一个关于某一特定主题或目标的信息集合。 表 (.dbf) 基本单位,是数据库的基础 可以说表是关系数据库系统中的基本结构。 要存数据,为所需记录的信息创建一个表。 由行和列组成的,一行为一个记录,一列为一个字段。. 通常所说的表格. 一行为一个记录( Record ). 一列为一个字段 (Field). 二维表简称表 (Table) 特征:.
E N D
内容 • 介绍数据库、数据表的基本概念 • 数据库和数据表的建立 • 编辑表中的数据、记录修改与删除 • 表的索引等有关操作。
概念 • 数据库(.dbc) • 就是一个关于某一特定主题或目标的信息集合。 • 表(.dbf) • 基本单位,是数据库的基础 • 可以说表是关系数据库系统中的基本结构。 • 要存数据,为所需记录的信息创建一个表。 • 由行和列组成的,一行为一个记录,一列为一个字段。
通常所说的表格 一行为一个记录(Record) 一列为一个字段(Field)
二维表简称表(Table)特征: (1)若干记录 (2)若干个字段,每记录具有相同结构的字段 (3)不同类型的字段来存储不同类型的数据 (4)字段的顺序与存储的数据无关 (5)记录在的顺序与存储的数据无关。
表的两要素: • 表结构(列) • 相应记录(行)
表的字段 • 表是由记录组成 • 记录又由字段组成 • 字段的属性(表结构) • 字段名 • 字段类型 • 字段宽度 • 小数位数
1.字段名 • 约定: • 只能使用字母、汉字、下划线和数字 • 见名知义 • > < = + / \ | [ ] : ? 空格 • 字段名必须以字母或汉字开头,并且长度不能超过128个字符 • 如:下列那些合法 不以数字开头 × 3mn 姓名1mn3 不能含有空格; × m n ×编 号 不能含有各种运算符; × S-N S_N× AI*X
2.字段类型 • 不同类型的字段来存储不同类型的数据
zpz: 内存变量 (1)字符型(Character) • 通常用于存储键盘输入的文本数据。 • 汉字、字母、数字、空格、 • 符号及标点符号 • 字符型数据必用双引号或单引号或[]来定界 • 字符型字段的宽度最大为254 ***** • 如: • “how”‘1234’ [中国人]
zpz: 内存变量 (2)货币型(Currency) • 保存货币数值时,用货币类型而不是数值类型字段 • 最多保留4位小数位数,多则四舍五入至4位 • 内存变量用$数值来赋初值 • 如:x=$999 • ? Type(‘x’)
zpz: 内存变量N (3)数值型(Numeric) • 数值型字段用来存储数值数据。 • 它可以包含数字0~9,也可以带正、负号或小数点 • 如:1234 100.89 (4)浮点型(Float) • 浮点型字段在功能上等价于数值型字段。
zpz: 内存变量5.6 (5)日期型(Date) • 用于存储包含有年、月、日的日期数据 • 长度为8字节 (6)日期时间型(DateTime) • 用于存储包含有年、月、日、时、分、秒的日期和时间数据。 (7)双精度型(Double) • 双精度型用于存储精度要求较高、位数固定的数值,或真正的浮点数值。
(8)备注型(Memo) • 长度固定为4字节 • 用于存储不定长度的文本数据 • 当文本数据长度可能大于254,无法使用字符型存储时,使用备注类型字段 • 所有备注型字段的实际内容存储在和表名相同,扩展名为.FPT的备注文件中
(9)通用型(General) • 通用型用于存储OLE对象数据 • 字段宽度固定为4个字节,用于存储一个4个字节的指针,指向该字段的实际内容 • 其内容存储在扩展名为.FPT的文件中。 • OLE对象包括电子表格、字处理文档、图像或其他多媒体对象等 • OLE对象可以用链接方式存储在表中。 • 存储数据的大小,取决于相的OLE服务程序,和磁盘空间大小的限制。
(10)整型(Integer) • 整型用于存储整数数据 • 字段宽度固定为4个字节。 • 取值范围从-2 147 483 647 到2 147 483 646。 (11)逻辑型(Logical) • .T.或.Y. 为逻辑真 • .F.或.N. 为逻辑假 • 长度固定为1字节
(12)字符型(二进)((Character(Binary)) • 字符型(二进制)用于存储不需要系统代码页维护的字符数据 • 其他字段特性同字符型字段 • 密码(各国) (13)备注型(二进制)((Memo(Binary)) • 备注型(二进制)用于存储不需要系统代码页维护的备注字段数据。其他字段特性同备注型字段。
数据类型(结) • 数据类型(Type)13种 C-字符型 N-数值形 F-浮点型 D-日期型 I- 整 型 L-逻辑型 M-备注型 G-通用型 Y货币型
3.字段宽度 • 规定宽度 • 字符型字段 254 • 货币型字段 8 • 数值型字段 20 • 日期型字段 8 • 备注型 4 • 逻辑型 1 • 日期时间型 8 • 通用型字段 4 • 用于存储一个4个字节的指针,指向该字段的实际内容。整型字段宽度固定为4个字节。
宽度(Width) (结) (以下类型宽度固定) • 货币型、日期型、日期时间型、双精度型:8字节 • 整型、备注型、备注型(二进制)、通用型:4字节 • 逻辑型:1字节
4.小数位数 • 有小数的字段: • 数值型 • 浮点型 • 双精度型 • 字段宽度 = 整数部分宽度 + 小数点1位 +小数位宽度 • 如小数位数不为0,则小数位数至少要比整个字段宽度小2
小数位数 • 一个N形变量宽为6,小数位数为3,则这个变量最大可表示的数为多少? • _ _ . _ _ _ • 99.999
5.空值(NULL) • 空值是用来标识一个字段“没有值”的标志 • 空值表示没有任何值或没有确定值 • 空值不等同于数值0、空字符串或逻辑“假” • 函数EMPTY() 测试空值 • 如果允许字段接受NULL值,则应选中该栏所在框 • 表的关键字段不允许为NULL值
字段类型 中文名称 宽度(字节) 说明 • Character 字符型 254 字母、汉字、数字、文本、符号 • Currency 货币型 8 货币单位 • Numeric 数值型 20 整数或小数 • Float 浮点型 20 同数值型 • Date 日期型 8 年、月、日 • DateTime 日期时间型8 年、月、日、时、分、秒 • Double 双精度型 8 双精度数值 • Integer 整型 4 整数 • Logical 逻辑型 1 真或假 • Memo 备注型 4 不定长的字母、文本、数字 • General 通用型 4 OLE图像、多媒体对象
建表的步骤: 1)设计表结构 2)建表的结构 creat 表名 3)保存表文件 ctrl+w 4)输入记录 append browse
表结构的创建 1、表设计器 (1)打开“表设计器” 项目管理器/自由表/新建/新表/保存 注: A、也可从菜单或工具栏中直接新建表 B、与在“项目管理器”中新建表不同的是: 这样新建的表将不包含在项目中 (2)在“表设计器”中创建表结构 表设计器/字段/输入/确定
表结构的创建 2、用create table -SQL命令创建表结构 • create table |DBF表文件名(字段名1 字段类型[(字段宽度[,小数位数])];[,字段名2 字段类型[(字段宽度[,小数位数])]]…)----编程时用 • 例:学生表结构 • create table xs2(xh c(6),xm c(8),xb c(2),zydh c(6)) • 教师表结构 • create table js(xm c(8),xb c(2),gl n(2,0),csrq d,jbgz n(7,2),jl m)
3、使用Null值 • 表设计器/字段 • create table 中NULL,NOT NULL子句 • 例: • create table books(sh c(6) not null,sm c(40) not null,cbrq d null) • set null on
数据表的建立 • 如: • 一张名为教师档案文件zgda.dbf • 编号 姓名 性别 年龄 职称 工作时间 婚否 简历 1 张黎黎 女 26 助教 05/24/83 T memo 2 李 艳 女 30 助教 09/14/90 T memo 3 刘 强 男 38 讲师 12/24/76 T memo
职工档案表结构(zgda.dbf) • 字段名 类型 宽度 小数位数 索引 NULL • 编号 字符型 4 无 升序 否 • 姓名 字符型 6 无 无 否 • 性别 字符型 2 无 无 否 • 年龄 数值型 2 无 无 否 • 职称 字符型 8 无 无 可 • 工时 日期型 8 无 无 否 • 婚否 逻辑型 1 无 无 否 • 简历 备注型 4 无 无 可 • 照片 通用型 4 无 无 可
表的打开 VFP在使用一个表前必须把表打开 • 打开命令 • USE <文件名> VFP在结束使用一个表时,必须把表关闭 • 关闭命令 • USE • CLOSE ALL • CLOSE DATABASE/TABLE
修改表结构 1、表设计器 项目管理器/选定表/修改 2、命令 • USE books • MODIFY STRUCTURE
修改表结构 2、命令 • ALTER TABLE-SQL命令 • 添加字段:ADD [ COLUMN ] 子句 例: ALTER TABLE books ADD COLUMN 折扣 n(4,2) • 重命名字段:RENAME COLUMN 子句 例: ALTER TABLE books RENAME COLUMN 折扣 TO zk • 删除字段:DROP [ COLUMN ] 子句 例: ALTER TABLE books DROP COLUMN zk
3、菜单/按钮方式 • 法1: • “表”—“属性” • “工作区” • “工作区属性”—“修改” • 法2: • “窗口” —“数据工作期” • (“属性”— “修改”)
记录的处理 记录的追加 1、立即输入记录(浏览/编辑/追加方式) 2、浏览窗口下追加(USE/BROWSE)(表/追加新记录) 3、使用INSERT - SQL命令追加记录 insert into zgda(姓名,性别,年龄) values ('洪七公','男',900) 4、从其他表中追加记录 • 命令APPEND • APPEND FROM • APPEND [ BLANK ]
记录的浏览 1、浏览窗口 • 进入 : • BROWSE 命令 • use books/显示/浏览 • 项目管理器/选定某个表/单击“浏览”按钮 2、命令 • BROWSE • LIST / DISPLAY • BROWSE FIELDS 书号,书名,作者 for ...
如何定制浏览窗口? • 重新安排列的位置: • 拖动 • 改变列的宽度: • 拖动 • 显示或隐藏表格线: • 显示/网格线 • 分为两个窗格: • 左下角拖动
文件头 记录开始标志 第n条记录 记录结束标志 6.3.3 记录的定位 • 1、记录指针标志 • 记录号(输入顺序) • 记录的开始标志 • BOF ( ) • 记录指针标志 • ( 当前记录 ) • RECNO ( ) • 记录的结束标志 • EOF ( ) • 2、记录的定位方式 • 绝对定位 go • 相对定位 skip • 条件定位 Go top go bottom skip
几个概念 • 记录指针 • 当前记录 • 记录定位 • 记录号RECNO()
例1 假设ZGDA表有848条记录,先后执行以下命令 bof() eof() recno() use books f f 1 skip -1 t f 1 skip -1 Error f 1 go bott f f 848 skip f t 849 skip Error
例2 RECN() Use books 1 go 5 5 skip +2 7 skip -3 4 locate for …
3、记录定位的实现 • 界面方式 (“表”—“转到记录”) • 记录号:绝对定位 goto • 定位:条件定位 locate for • 作用范围:all,next,record,rest,for • 找到/未找到 • 命令方式 绝对定位:GO( GOTO ) GO( GOTO ) TOP/BOTTOM 相对定位:SKIP(与索引有关)skip=skip 1 快速移动:SEEK 及 FIND
记录的修改 1、在浏览窗口中修改 EDIT / CHANGE / BROWSE 项目管理器/浏览 例:修改books表中第5条记录 use books edit record 5
记录的修改 2、批量记录的修改 (1)界面方式 “表”—“替换字段”—字段条件 (2)命令方式 • UPDATE-SQL命令(表不必事先打开,以下同) • REPLACE 命令 USE books copy to temp use temp REPLACE 单价 WITH 5.00 FOR 单价<5
记录的删除 • 目的: • 节省时空 • 删除步骤: • 逻辑删除 • 物理删除
逻辑删除 • 给要删除的记录加标记(*号) • 标记要删除的记录(逻辑删除) • 浏览窗口: • 单击小方框 • “表” • “删除记录” • 命令DELETE FROM 表名[WHERE 过滤条件表达式] 例: • 删除教材表中库存在数量为0的记录 • delete from books where 库存数量=0
物理删除 • 彻底删除(物理删除) • “表” • “彻底删除” • 命令PACK(独占) • 删除有删除标记的记录 • 命令ZAP=delete all +pack(独占)
恢复记录的删除 • 恢复带删除标记的记录(与set dele 无关) 法1: • 小方框 黑-->白 法2:“表” • “恢复记录” 法3:RECALL [范围][FOR 条件表达式1][WHERE 条件表达式2] 例:recall recall all recall all for 库存数量=0(这里的all 可省) 说明:缺省范围(当前记录,不是全部记录)
记录的删除 • 对带删除标记记录的访问 (1)测试记录的删除标记deleted() • 有删除标记返回为真,否为假 (2)控制对带删除标记记录的访问 • set deleted on/off 说明: • 有些默认为ON,有些默认为OFF 实验: • 先删除若干记录(逻辑删除) • LIST 默认为OFF • SET DELETED ON • LIST