第3章 表的建立与基本操作(2).ppt_第1页
第3章 表的建立与基本操作(2).ppt_第2页
第3章 表的建立与基本操作(2).ppt_第3页
第3章 表的建立与基本操作(2).ppt_第4页
第3章 表的建立与基本操作(2).ppt_第5页
已阅读5页,还剩163页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 第三章 2 数据库与数据表及其操作 2 3 24设置数据库表的字段属性 表设计器的下半部分有四个区域 显示 匹配字段类型到类 设置字段有效性 字段注释等项 可以在此设置字段验证 注 如果你是创建了一个自由表 那么在打开的表设计器中就没有下半部分 这也是数据库表与自由表的区别之一 3 4 1 设置数据库表的字段属性 1 显示区域 主要用于指定输入和显示字段的格式属性 格式属性 例如 将某一字段的格式属性设置为 两个英文双引号不可缺省 则VFP会将输入该字段的小写字母全部转换为大写字母 5 输入掩码属性 指定字段中输入字符的格式 例如 有一个 电话号码 字段 设置该字段输入掩码属性为 9999 99999999 则在输入数据时 若输入053182778888 自动显示格式为 0531 12382778888 此时字段宽度应设置为15 标题属性 为字段名取一个标题 指定在浏览窗口 表单或报表中代表字段的标签 6 3 字段有效性 在创建数据表的结构时 可以通过创建字段的有效性来控制数据库表字段和记录中的数据合法性 这些规则就是有效性规则 在VFP的表设计器中 字段有效性规则包括 规则 用来指定当前字段的值必须满足的条件 信息 指定当字段的输入值不满足该字段验证的规则时 弹出的消息框中显示的提示信息 默认值 该字段的默认值 7 在Rsda dbf中设置字段 性别 设的字段有效规则如下 8 例3 4按照P39的表分别建立自由表 rsbm 和 bmqk 然后把它们添加数据库 人事管理 中去 9 3 2 7数据表中记录的添加 在用表设计器创建好表结构后 就可以为数据表输入数据记录了 输入数据记录有两种情况 第一种情况是当建立好数据表结构后 立即输入纪录 第二种情况是在建立好数据表结构后并没有输入纪录 或仅输入了部分纪录 如果需要输入纪录 可进行纪录的追加 让我们先来看第一种情况 10 在用表设计器创建好表结构后 点击 确定 按钮 出现下列对话框 11 1 备注型字段的输入是双击memo 或按Ctrl PageUp PageDown 键 2 通用型字段的输入是双击gen 或按Ctrl PageUp PageDown 键 通用型数据的输入一般使用插入对象的方法来插入数据 或者使用剪贴板剪切 粘贴的方法 输入内容后 memo 和 gen 分别变为 Memo 和 Gen 取消内容 双击 编辑 清除 在输入数据时应注意下列问题 12 所有要输入的数据记录输入完毕后 单击窗口右上角的关闭按钮 或按Ctrl W退出输入数据状态 若放弃刚刚输入数据的记录 则按Esc键或Ctrl Q 备注型字段和通用型字段的内容都被保存在一个与数据表同名 扩展名为 FPT的文件中 13 2 记录的追加 1 菜单操作若建立好一个数据表结构后 没有立即输入纪录 或已经输入了一些记录 还要在该数据表后面追加其它记录时 可按以下步骤进行操作 14 1 打开 人事管理数据库 选中数据表 rsda 2 单击右键 选 浏览 命令 3 单击 显示 菜单下的 追加方式 命令或单击 表 菜单下的 追加新记录 命令 单击了 追加方式 后 在最后一个记录的后面新增一条空白记录 等待着用户输入数据 就像前面输入记录的方法一样 15 2 命令方式格式 APPEND BLANK 功能 在打开的当前表的尾追加若干条记录或一条空记录 说明 不选任何可选项 可以追加若干条记录 选BLANK只能在尾部添加一条空白记录 这在程序中经常用到 以便用程序的方式自动添加数据 16 用前面的方法只能手工一条条追加记录 我们也可以将已存在的数据表中的记录追加到当前表中 注意 被追加的数据表中的字段至少要有一个与当前表的字段同名 同类型 否则一条记录也不能被添加 若当前表中的字段多于被追加的表则多出的字段数据空着 若被追加的表的字段多于当前表 则多出的字段被截去 3 批量追加纪录 17 格式 APPENDFROM 文件名 FIELD 字段名表 FOR 条件表达式 功能 将 文件名 指定的数据表中的记录追加到当前打开的数据表中 说明 选 打开对话框 选择相关的文件 FIELDS短语指定追加哪些字段 FOR短语用来指定满足条件的记录被追加 不选FOR 是将所有记录添加到当前数据表中 命令方式 18 例如 在数据库xsgl中利用数据表xsda通过数据表的向导创建一个新的数据表 xsda2 dbf 然后将xsda dbf中的记录追加到xsda2中 利用xsda通过数据表的向导创建xsda2 dbf利用Appendfrom命令由xsda dbf向新表xsda2 dbf中追加记录Usexsda2Appendfromxsda 19 3 2 8数据的显示和修改 1 用编辑方式显示和修改数据2 浏览方式显示和修改数据同时出现 浏览 窗口和 编辑 窗口1 打开数据表2 打开 显示 菜单 选择 浏览 窗口3 拖动窗口拆分条 两种显示模式 20 21 显示部分纪录和字段 当数据表中的字段个数非常多且记录个数也很多时 浏览窗口不可能一次都显示出来 而且您可能只想看到其中的一部分记录和某些字段 为此 VFP提供的过滤器可以筛选被显示的记录 指定被显示的字段 22 1 记录过滤器 例如 我们只想显示xsda dbf中的男学生的信息 方法如下 打开xsda dbf 处于浏览状态下 单击菜单中 表 下的 属性 命令 出现对话框 单击 数据过滤器 右面的按钮 在表达式生成器对话框 双击字段中的 性别 在表达式文本框中完成 性别 男 然后按下 确定 关闭浏览窗口 在打开时才显示所需要的信息 菜单操作 23 2 字段过滤器 若表中的字段很多 只想显示表中的部分字段 方法如下 打开Rsda dbf 处于浏览状态下 单击菜单中 表 下的 属性 命令 出现对话框 选择 字段筛选指定的字段 后 单击 字段筛选 在字段选择器对话框中分别选择姓名 性别 职称 24 单击确定 此时浏览窗口并没有按设定的要求显示 关闭后再重新打开该表 便可以看到只显示姓名 性别 职称三个字段 25 格式 BROWSE 范围 FIELDS 字段名表 FOR 条件表达式 LOCK n 功能 打开浏览窗口 可以显示 添加 删除 修改记录 3 用Browse命令显示和修改数据表中的数据 1 范围 AllNext 从当前记录开始的n个记录Record 第n个记录Rest 从当前记录开始到数据表末尾的所有记录 26 2 Fields 指要进行操作的字段列表 字段名之间用逗号分隔 3 FOR 条件表达式 指对满足条件的记录进行操作 4 LOCK n 用来锁住表中左边n个字段当左右移动时而保持不动 27 例1 命令 USERsdaBROWLOCK2若字段很多 当左右移动右边的窗口时 左边的口不动 利于参考 28 例2 用Browse命令浏览数据表Rsda中的 姓名 性别 职称 三个字段的信息 UseRsdaBrowseFields姓名 性别 职称 例3 浏览数据表Rsda中的所有女教授的记录 UseRsdaBrowseFor性别 女 And 职称 教授 29 例4 浏览数据表Rsda中所有1980年1月1日以前参加工作的员工记录 Browsefor工作时间 ctod 1980 1 1 Orbrowsefor工作时间 1980 1 1 30 4 用List Display命令浏览数据 命令操作格式 LIST DISPLAY FIELDS 字段名表 范围 FOR 条件表达式 OFF P53 功能 显示当前打开的数据表的记录 说明 FIELDS 字段名表 指定要显示的字段 字段名之间用逗号分隔 其中FIELDS可选可不选 若缺省该项 显示表中所有字段 但备注字段 通用字段不被显示 31 范围 和 条件 短语是只显示一定范围内满足条件的记录 相当于记录过滤器 选OFF时 只显示记录内容而不显示记录号 LIST和DISPLAY的区别有两点 一是若范围和条件短语均缺省 LIST显示所有记录 DISPLAY显示当前记录 二是若记录很多 一页显示不下 LIST连续显示 DISPLAY分页显示 32 例1 用List命令显示数据表Rsda中编号为 03002 的记录 UseRsdaListfor编号 03002 显示姓名中含有 文 字的记录ListFor 文 姓名 33 例2 显示1990年1月1日以前工作的记录 且只显示 姓名 工作时间 两个字段 UseRsdaListFor工作时间 1990 01 01 Field姓名 工作时间 34 3 在数据表Rsgz中 显示基本工资在300到700之间的记录 UseRsgzListfor基本工资 300 And 基本工资 700 gotopDISPLAYDISPLAYALL 35 5 用EDIT或CHANGE命令修改记录 格式 EDIT CHANGE FIELDS 字段名表 范围 FOR 条件表达式 功能 在编辑窗口显示并编辑指定的字段 说明 EDIT和CHANGE只能选择其中之一 两者等价 缺省范围和条件 从当前记录编辑到最后的记录 FIELDS短语用来指定显示和编辑的字段 例如 EDITALLFields姓名 职称 则每条记录只显示姓名 职称两个字段 不能省略 36 6 用REPLACE命令批量替换修改数据 以上介绍的修改数据的方法是手工一条记录一条记录地修改 若数据表中的记录很多 且许多记录都需要某一有规律地修改数据 比如增长工资收入 年龄每过一年都增长一岁等 若再用上述手工修改就显得很麻烦了 VFP提供了成批修改某字段有规律数据的方法 37 首先利用前面介绍的方法在 人事管理数据库 中创建人事工资信息表RSGZ DBF 其中表的结构如下表 表4 3RSGZ DBF 人事工资信息表 的结构 38 例如 我们把所有基本工资在900元以下的人员再每人基本工资增加50元的操作如下 1 打开RSGZ DBF 处于浏览状态 2 打开菜单中 表 下的 替换字段 命令 弹出 替换字段 对话框 3 单击 字段 右边的下拉列表 选择被替换的字段基本工资 利用菜单操作实现 39 4 可以直接在 替换为 右边的空白处输入 基本工资 50 5 在替换条件中的作用范围中选择ALL 表示对所有满足条件的记录操作 6 在For框中输入条件此时替换对话框表示 将RSGZ DBF中所有基本工资小于900元的人员每人再增加50元 基本工资 900 40 41 应发工资 和 实发工资 两个表中的字段的数据都为零 现按照如下规律将所有记录的数据都添上 即 应发工资 基本工资 职务补贴实发工资 应发工资 社会保险 公基金 42 下面介绍用命令方式实现成批修改记录数据的方法 格式 REPLACE 字段名1 WITH 表达式1 字段名2 WITH 表达式2 范围 FOR 条件表达式 功能 对当前数据表中指定范围内满足条件的记录分别用表达式的值自动取代相应字段的原来值 43 说明 如果不选用范围和条件短语 则只对当前记录进行字段更改 如果只选了范围短语 则对指定范围内的所有记录进行字段更改 可以同时更改几个不同字段的值 其中 字段n 是被更新值的字段的名字 WITH后面的 表达式n 的值用来替换对应字段的值 表达式的数据类型必须和字段的类型相同 44 例 前面我们用菜单操作的工作现改为命令操作 OPENDATABASERsglUSErsgz REPLACEALL应发工资WITH基本工资 职务补贴 实发工资WITH应发工资 社会保险 公基金 REPLACEALL基本工资WITH基本工资 50FOR基本工资 900 45 练习 在数据表Rsda1中 用Replace命令完成如下操作 1 将所有教授的工资再每人增加500元 2 把所有的 讲师 改为 副教授 3 将工资在3500以下的职工的工资提高10 46 1 ReplaceAll工资with工资 500For职称 教授 2 ReplaceAll职称with 副教授 For职称 讲师 3 ReplaceAll工资With工资 1 1For工资 3500 工资 工资 10 47 3 2 9数据表中记录的定位 打开一个数据表后 一个很重要的概念叫 当前记录 这既关系到字段变量的取值 也关系到大多数命令的执行 系统设有一个记录指针 该指针指向的记录就称为当前记录 打开一个数据表后 指针指向第一个记录 假设没有指定索引标记 随着命令的执行 指针不断移动 不管数据表中有多少条记录 指针只有一个 当前记录也只有一个 指针的定位可以利用菜单操作 但在程序中只能使用命令来定位 48 打开RSGL数据表 处于浏览状态 单击菜单中的 表 将鼠标指针移动到 转到记录 项上 出现级联菜单 这时可以单击 第一个 最后一个 上一个 下一个 指针就会指向数据表中相应的记录上 记录号 弹出对话框让用户输入一个记录号 指针就指向该记录号的记录 定位 是根据输入的条件使指针定位在满足条件的记录上 菜单操作 49 2 命令操作 功能 将指针定位到指定的记录上 使用命令可以使记录指针绝对定位和相对定位 1 绝对定位格式一 GO GOTOTOP功能 确定当前表中第一个记录为当前记录格式二 GO GOTOBottom功能 确定当前表中最后记录为当前记录 50 格三 GO GOTO功能 确定当前表中记录号为 数据表达式 的记录为当前记录 51 TOP是将记录指针定位在第一条记录上 假设没有指定主索引标记 此时BOF 为 F 只有再执行SKIP 1后 BOF 才为 T 但此时记录号函数RECNO 的值仍为1 BOTTOM是定位在最后一个记录上 此时EOF 为 F 再执行SKIP后 EOF 才为 T 此时RECNO 为当前表最大记录号加1 Bof 和Eof 同时为真 数据表为空 格式中的GO或GOTO为可选项 为了增强可读性 一般选GO 数值表达式的值就是记录号 说明 52 Usersgl recno bof skip 1 bof recno Gobottom recno eof skip 1 eof recno 练习记录定位 53 相对定位就是在当前记录指针位置的基础上 将指针向上或向下移动 格式一 SKIP 数值表达式 功能 以当前记录为基准 前后移动指针 说明 不选可选项 是将指针在当前记录处向下移一个记录 数值表达式的值N若是正的 正号可以忽略 表示从当前记录向下N条记录 若是负值表示从当前记录向上N个记录 2 相对定位 54 例题 USErsda RECNO BOF SKIP 1 RECNO BOF GO4 RECNO SKIPSKIP 3 RECNO 此时输出的记录号是几 GOBOTTOM RECNO EOF SKIP RECNO EOF 55 3 按条件定位 格式 LOCATE 范围 FOR 条件表达式 功能 在当前表中指针定位在满足给定条件范围内的第一条记录上 说明 LOCATE命令在表中顺序查找满足条件的记录 范围缺省时 默认为ALL 56 说明 若找到 记录指针指向该记录 4 若没有找到符合条件的记录 则记录指针指向Eof在程序代码中 常常测试Found 函数的值来判断是否找到某一记录 若要继续查找满足条件的其他记录 可以执行继续查找命令 Eof 为 F FOUND 为 T Eof 为 T FOUND 为 F Eof Found 57 格式 CONTINUE功能 继续执行LOCATE命令 说明 CONTINUE必须在LOCATE命令之后使用 用来继续查找满足条件的记录 CONTINUE可以多次使用 直到指针到了文件尾或范围末 Eof 为 T 它相当于从当前记录开始执行LOCATE命令 58 例题 USERSDALOCATEFOR职称 副教授 DISP 显示第一个满足职称为副教授的记录 王为冬 CONTINUEDISP 显示下一个满足条件的记 邵林文贺 CONTINUE 在底行显示 已到定位范围末尾 59 3 2 11删除和恢复纪录 1 逻辑删除逻辑删除记录只对记录作删除标记 并未从表中真正删除这些记录 要真正删除这些记录 还要用PACK命令 对于带有删除标记的记录 可以用RECALL命令取消删除标记 恢复成正常记录 60 1 菜单操作 打开数据表Rsda DBF 使其处于浏览状态下 并将当前记录指向某一记录 单击菜单 表 下的 删除记录 命令 弹出删除对话框 在其中确定范围和FOR或WHILE条件 若只删除当前记录 范围即为缺省状态 NEXT1 单击 删除 按钮 就会发现当前记录左端有一黑色小方块 表示该记录已作过删除标志 61 事实上 最简单的逻辑删除方法是用鼠标点击某一记录左边的小白方块 如 刘巧玲 可见也有了逻辑删除标记 若用命令LIST显示记录 可以看到被逻辑删除过的记录前有一个 号 62 2 命令方式 格式 DELETE 范围 FOR 条件表达式 功能 给指定的记录加上逻辑删除标记 说明 范围 条件均不选时 仅对当前记录起作用 可以用函数DELETE 来测试记录是 T 否 F 被逻辑删除 一般情况下 逻辑删除的记录和其他记录一样参与操作 除非使用了如下命令 SETDELETEON 此时 具有删除标记的记录被隐藏起来 不参加任何操作 默认情况下 是SETDELETEOFF状态 63 2 恢复逻辑删除记录 对于带有删除标记的记录 可以用RECALL命令取消删除标记 恢复成正常记录有 1 菜单操作打开数据表 单击菜单中 表 下的 恢复记录 命令 在弹出的对话框中选好范围 条件 单击 恢复记录 按钮即可 事实上 最简单的恢复逻辑删除记录的方法是在浏览状态下 用鼠标点击已被逻辑删除记录左边的小黑方块 64 2 命令方式格式 RECALL 范围 FOR 条件表达式 功能 恢复已作过删除标记的记录 说明 若不选范围 条件 则只恢复当前记录的删除标记 65 3 物理删除带有逻辑删除标记的记录 我们可以将已作过逻辑删除标记的记录真正从数据表中移去 且不能恢复 1 菜单操作打开数据表 单击菜单中 表 下的 彻底删除 命令 弹出一个警告框 让你确认一次 2 命令方式格式 PACK功能 真正删除带有逻辑删除标记的记录 不能再恢复 66 4 删除表中的所有纪录 格式 ZAP功能 一次删除表中所有的记录 不管记录是否作过逻辑删除标记 说明 ZAP等效于DELEALL和PACK两条命令连用 由于ZAP命令删除的记录不能恢复 所以要慎用该命令 在执行该命令前 系统给用户一次确认的机会 在Rsgl dbf中查找职称为 副教授 的人UseRsglLocatefor职称 副教授 Rsgl表如下 68 为了实现快速查找 需要按所查的字段进行排序 这里要对字段职称进行排序 索引 表一 69 按编号进行排序 索引 表二 70 3 3索引文件与应用 默认的情况下 表中的记录在 浏览 窗口中显示的顺序取决与记录的物理顺序 记录输入时的前后顺序 若希望记录在 浏览 窗口中显示的顺序按某一个字段值的大小 升序或降序 排列 则需要建立起包含该字段的索引索引实际上是一种排序 但是它不改变数据表中数据的物理顺序 索引文件 可以简单地看成这样一个文件 仅由两个字段组成 排序的关键字段原始数据表中对应的记录号010013010027020025 排序的关键字段 数据表中用来当作索引顺序的字段 称为关键字段 如编号 职称等 可以是一个表达式 72 但索引文件的实际结构比较复杂 决不是一个数据表的结构 在VFP中可建立多个不同类型的索引 并保存在索引文件中 注意 索引文件不能单独使用 它必须与相应的数据表配合使用才有意义 73 例如在Rsgl dbf数据表中 若以编号为关键字段建立索引文件 其索引文件示意图如图所示 按编号从小到大的顺序建立索引与原数据表对应关系 关键字段 75 原始数据表 排列的顺序 记录输入时的顺序 按编号排序 按编号建立索引文件 在一个索引文件中可以只有一个索引 也可以有多个索引 包含多个索引的索引文件称为复合索引文件 CDX 在复合索引中 需要为每个索引指定一个索引标识名 以区分不同的索引 索引标识名可以和字段同名 也可单独命名 复合 Compound 索引标识名 BH 在一个索引文件中可以只有一个索引 也可以有多个索引 包含多个索引的索引文件称为复合索引文件 CDX 在复合索引中需要为每个索引指定一个索引标识名 以区分不同的索引 索引标识名可以和字段同名 也可单独命名 复合 Compound 77 例 为数据表Rsgz dbf建立一个复合索引文件Rsgz cdx1 按编号建立索引 升序 用BH作为索引标记2 按基本工资和职务补贴建立索引 且为升序 JBGZZWBT作为索引标记 Str 基本工资 7 2 Str 职务补贴 6 2 为索引表达式在表设计器中创建索引文件 在修改结构窗口 索引 1 索引名 定义索引标识名 不一定与字段同名 1 在表设计器中建立索引文件 78 2 类型 主索引 作为主索引的字段称为主关键字 不能用在自由表中 主关键字 没有重复值的字段 编号 学号等 一个表只能有一个主索引候选索引 类似于主索引 其索引值也不能重复 但一个表可以有多个候选索引惟一索引 表示索引值只能取一个普通索引 没有上面各索引的限制 79 2 索引文件的使用 菜单操作 指定主控索引 每个索引文件中可能包含多个索引 而一种索引就是一种排序方式在使用索引时 必须指明哪一个是对数据表记录排序起作用的 主控索引是用来指定目前记录排列顺序的 但是 若在没有指定哪一个索引标识名为主控索引之前 数据表的访问顺序仍然是原来的物理顺序 方法 打开原始表的浏览窗口 表 属性 索引顺序 80 需要指出的是 索引文件不能单独使用 它必须与原数据表配合使用才有意义 这如同图书馆书库里无书 只有空索引卡片一样 81 从索引的组织方式来讲索引共有两类 简单 单项 idx索引 Index 索引复合 cdx索引 与表名同名的 cdx索引是一种结构复合索引 它具有如下特性 在打开表时自动打开 在添加 更改或删除记录时自动维护索引表设计器建立的索引是结构复合索引 一个索引 一个或多个索引 Compound 82 3 命令方式建立复合索引 格式 INDEXON 表达式 TAG 索引标识名 FOR 条件表达式 ASCENDING DESCENDING UNIQUE CANDIDATE ADDITIVE 功能 建立复合索引文件说明 这里的表达式 索引标识名 FOR短语分别对应表达式 索引名和筛选 其意义不再重述 ASCENDING DESCENDING 用来指定某一索引表达式的升 降序 缺省为ASCNDING 即升序 83 说明 UNIQUE 用于实现唯一索引 即如果有多个记录具有相同的关键字段值 如职务工资相同 索引时只取其中的第一个记录 不选此项 则指所有记录 CANDIDATE 选此项是创建候选结构索引标识 ADDITIVE 选此项 则以前已打开的索引文件将保持打开状态 缺省的话 则在用INDEX命令创建索引文件时 关闭所有已打开的索引文件 例如 USERSGLINDEXON编号TAGBHINDEXON性别 DTOC 出生日期 TAGXbcsrq 4 用命令方式指定主控索引标识 打开数据表后 其相应的复合索引文件 CDX自动被打开 其中有若干个索引标识 但是若没指定主控索引标识之前 数据表的访问顺序仍然按原来的物理顺序 要想按照某一索引标识的顺序访问数据表 则需指定主控索引标识名 格式一 USEORDER TAG ASCENDING DESCENDING 格式二 SETORDERTO TAG ASCENDING DESCENDING 功能 指定复合索引文件的主控索引标识名 85 说明 格式一 是在打开数据表的同时指定主控索引标识名 其中TAG可选可不选 格式二 选取可选项是在打开了数据表之后 单独指定主控索引标识名 不选可选项是取消主控索引 按原物理顺序访问数据表中的记录 ASCE DESC 可以改变原来建立索引时的升降序 重新指定关键字表达式的值升 降序排列 TAG可选可不选 例如USERSGLSetOrderToTagBh 指定bh为主控索引标 SetOrderToTagXbcsrq 下图所示 86 RSGL dbf按性别和出生日期索引后的排序 87 5 关闭索引文件 格式1 CLOSEINDEXES格式2 SETINDEXTO命令说明 关闭当前工作区的所有索引文件 格式3 USE功能 关闭当前工作区打开的数据表文件 即关闭了它所有的索引文件 88 6 使用索引快速查找记录 对于一个表按关键字段建立了索引以后 通过索引文件中记录的逻辑重排 可以提高查找速度 这是因为相同关键字数据的记录已连在一起 可以连续访问 例如已经按姓名建立了索引 若查找姓张的所有记录 只要找到第一个姓张的记录 其他姓张的记录都在其后 89 FIND命令和SEEK命令都可以在指定主控索引的情况下进行记录的查找操作 这里只介绍SEEK命令 90 用SEEK命令进行查询 格式 SEEK 表达式 功能 将记录指针定位在表中索引关键字与指定表达式值匹配的第一个记录上说明 在用Seek命令之前 一定要打开相应的表 并指定索引顺序 且只能搜索索引关键字的数据 由于SEEK后面是表达式 所以提高了使用的灵活性 即 常量 变量 函数等数据都可以查找 SEEK命令找到了要查找的记录后 FOUND 值为 EOF 值为 例如 1 查找编号为 01001 的员工 T F USERSGLORDERBHSEEK 01001 92 2 查找出生日期为 1966 05 04 的职工 Indexon出生日期tagcsrqSETORDERTOcsrq 指定按出生日期索引的顺序Seekctod 1966 5 4 注意括号里的日期格式要与设置时相同 否则会出错 FOUND 若找到 返回 t DISP 显示记录 93 4 5数据表的统计计算 1累加求和及求平均值4 5 2统计记录个数4 5 3分类汇总 94 对于数据表中数值型字段的值 经常会对其进行有关的统计计算 VFP系统提供了各类操作命令 可以方便地实施统计计算 95 4 5 1累加求和及求平均值 对于每个记录的纵向求和可以用累加求和命令实现 格式 SUM AVERAGE 表达式表 范围 FOR 条件表达式1 WHILE 条件表达式2 TO 内存变量名表 TO 数组变量名 功能 对当前数据表中指定范围内满足条件的记录进行纵向求和 选SUM时 或求平均值 选AVERAGE时 96 统计记录个数 格式 COUNT 范围 FOR 条件表达式1 TO 内存变量名表 功能 统计当前表中指定范围内符合条件的记录个数 说明 缺省范围和条件短语 默认对所有记录进行统计 其他同SUM 97 例题 USErsdaCOUNTTOnanFOR性别 男 COUNTTOnanjsFOR性别 男 AND职称 教授 男职工数为 nan 男职工且职称是教授的人数为 nanjs 显示结果为 男职工数为 7男职工且职称是教授的人数为 2 98 4 5 3分类汇总 对已经建立了索引并且指定了主控索引的数据表 可以按关键字进行分类汇总 增强了数据的处理能力 为管理者提供了查询有用信息的依据 格式 TOTALON 关键字表达式 TO 新表名 FIELDS 字段名表 范围 FOR 条件表达式1 功能 对当前数据表中具有相同关键字表达式值的所有连续记录求和 将所求的和作为一条新记录送入新表中 99 说明 当前数据表必须是按 关键字表达式 中的字段索引过且打开索引文件或指定该索引为主控索引 以保证具有相同关键字值的记录能连续访问 FIELDS短语给出了需分类求和的字段名 这些字段只能是数值型或货币型的 如果缺省 则对当前表中的所有数值型或货币型字段分类求和 不管选不选FIELDS短语 新表与当前表的结构是一样的 100 对当前数据表中的若干个关键字表达式相同的记录 生成新表中的一条记录 这条记录的非数值型或非货币型字段取自关键字相同的一组记录中首记录的相应字段 参加求和的字段值取自求和结果 例题 某商场某天家电销售情况表为xs dbf 其中售货员 商品名是字符型 台数是数值型 单价 总价是货币型 101 USExsLISTINDEXON售货员tagshyINDEXON商品名tagspm 建立两个索引标记的复合索引文件xs cdxSETORDERTOshy 指定按售货员索引的顺序访问表LISTTOTALON售货员TOshyhz1 按售货员汇总USEshyhz1 汇总生成的新表要打开才能显示LIST 102 USExsORDERshyTOTALON售货员TOshyhz2FIELDS台数 总价USEshyhz2LISTUSExsORDERspmLISTTOTALON商品名TOspmhzFIELDS台数 总价USEspmhzLIST 103 3 4多数据表操作 3 4 1工作区的基本概念3 4 2工作区的选择和使用3 4 3数据表的关联 104 对于许多应用程序而言 都会有用到多个表中数据的情况 Rsda dbf 职工的编号 部门名 姓名 性别 出生日期 婚否 职称Rsgz dbf 职工的编号 基本工资 职务补贴 实发工资 应发工资等操作 将职称为副教授职工的职务补贴增加100元 UseRsgzReplaceall职务补贴with职务补贴 100for职称 副教授 回车后出现 105 VFP提供了强有力的多数据表操作能力 引入了工作区和表的别名这两个概念 用户可以在不同的工作区中同时打开多个表 也可以在不同的工作区打开同一个表 106 3 4 1工作区的基本概念 工作区 内存中的一个缓冲区 VFP在内存中最多可以开辟32767个工作区 在每一个工作区中可以打开一个数据表 因此 VFP最多可以同时打开32767个数据表 每一个打开的数据表都有一个独立的记录指针 指向本工作区数据表中的当前记录 107 1 工作区的编号和工作区的别名 为了标识各工作区 VFP系统给每一个工作区一个编号在给数据表命名时 不要与上述工作区的别名冲突 否则容易引起混乱 1 2 3 4 10 11 12 32767 A B C D J W11 W12 W32767 别名 108 2 当前工作区 当前被选择的工作区称为当前工作区 在某一时刻 当前工作区只有一个 在当前工作区打开的数据表称为当前表 VFP启动后 自动指定1号工作区为当前工作区 select Select工作区号 UseRsda select BrowseSelect2UseRsgz select Browse 109 3 数据表的别名 在打开数据表的同时 可以为数据表起一个别名 以便于操作 格式为 USE 数据表名 ALIAS 别名 IN 若不选可选项 原数据表名就是它的别名 若选可选项 别名由ALIAS短语指定 例如 当执行了如下命令 USErsdaALIASda后 表rsda的别名就是daUseRsgzAliasGzin3 110 1 若不指定工作区 则默认为在当前工作区上打开指定的数据表2 Alias为可选项 不指定别名时 原数据表名就是它的别名3 该命令只是在指定的工作区上打开数据表 并不能改变工作区4 一旦在一个工作区上打开了一个数据表 数据表就和该工作区建立起对应关系 所以打开数据表后可以用数据表的别名来代替工作区别名 111 UseRsgzaliasgzin3UseRsdaListSelectgz 3或C List 112 3 4 2工作区的选择和使用 1 选择工作区 1 利用 数据工作区 窗口选择工作区打开项目管理器或打开数据库后 单击菜单 窗口 中的 数据工作期 命令或单击常用工具栏中的相应图标 打开 数据工作期 窗口 在该窗口中可进行的操作有 选择工作区 打开数据表 关闭数据表 浏览数据表 建立表之间的临时关系等 113 2 利用SELECT命令选择工作区 格式 SELECT 工作区编号 工作区别名 数据表别名 功能 选择当前工作区 格式中的三项只能选择其中之一 114 例题 USErsda2 默认在1号区打开SELEdUSErsdaUSErsgzALIASgz 4区中将rsda关闭SELE1LIST SELEgz 或SELE4 SELEd 但不能SELErsgzLIST 显示rsgz的记录 115 SELErsda2 是否可以 为什么 LIST SELECT 给出当前工作区号函数 返回当前工作区号USErsdaIN10 SELECT USE 关闭当前工作区上的数据表 116 2 在不同工作区打开同一个数据表 VFP系统允许用户在不同的工作区打开同一个数据表文件 方法是在打开数据表的USE命令后加上关键字 AGAIN 例题 SELE1USErsdaUSErsdaALIASdaIN3AGAINSELE2USErsdaAGAIN 117 3 使用非当前工作区中表的数据 由于当前工作区只有一个 而应用程序中常常又需要同时使用多个表中的数据 所以在VFP中 用户可以访问其他工作区中打开的表的数据 方法是在非当前工作区的表的字段名前加注工作区别名或表的别名 格式为 别名 字段名 或 别名 字段名 注意 这里的符号 是 和 两个 均为英文状态下的 符号复合而成 118 例题 一区打开Rsgl 二区打开Rsgz 选择二区为当前工作区closeallusersgl select usersgzin2select2locatefor姓名 A 姓名 found 119 disp姓名 A 姓名 A 职称 基本工资List姓名 A 姓名 A 职称 基本工资 120 思考 若将上面的DISP改为LIST结果会是什么样呢 为什么 说明 多表之间若未建立任何联系 当前表中的指针移动 其它区打开的数据表中的指针是不会跟着移动的 121 3 4 3数据表的关联 要实现当前表中的指针移动 其它区打开的数据表中的指针也跟着移动 这就需要在两个表之间建立一种关联 两种关联方法 临时关系 一旦退出操作 所建立的关联自动取消 永久关系 只要打开数据库 表之间的关系便自动建立 永久关系只能存在于数据库表之间 122 一般来说 建立关联的两个数据表要有相同的字段 或者能建立起相同的字段表达式 并要求子表按关联字段或关键字表达式建立索引且指定为主控索引 123 1 设置表间的临时关系 1 利用 数据工作区 窗口建立表的临时关系单击菜单 窗口 中的 数据工作期 命令或单击常用工具栏中的相应图标 打开 数据工作期 窗口 在该窗口中用 打开 按钮将准备建立临时关系的表打开 例如Rsgl和Rsgz 即可建立两个表之间的临时关系 例如建立一对一关系 关联字段为编号 124 2 利用命令建立表间的临时关系 格式 SETRELATIONTO 关键字表达式1 INTO 工作区别名1 ADDITIVE 功能 建立当前工作表 父表 与另外工作区打开的表 子表 的关联 说明 不选任何可选项是取消关联 父表可以与多个子表建立关联 125 选ADDITIVE项使父表与子表建立关联时 原先已存在的关联仍然保留 如果不选用该项 则建立新关联时将取消原有关联 子表必须按关键字表达式建立索引 且被指定为主控索引 通常情况下 用两个表都具有的相同字段作为建立临时关系的关键字表达式 126 父表Rsgl dbf 子表Rsgz dbf 关联关键字 编号 要求 按编号索引 指定其为主控索引indexon编号tagbhsetordertotagbh建立父表Rsgl与Rsgz的关联SETRELATIONTO编号INTORsgz 工作区1工作区2 例题 SELE1USErsglSELE2USErsgzINDEXON编号tagbhSETORDERTObh 此语句可以省略 因刚建立的索引默认为主索引SELE1SETRELATIONTO编号INTOrsgzLIST编号 姓名 职称 B 姓名 B 基本工资 B 职务补贴 128 2 设置表间的永久关系 表间的永久关系 是指存储在数据库中的数据表间的关系 这种关系一旦创建 便会一直存在于数据库文件中 129 由于通过SETRELATION命令创建的临时关系可以控制关联表内记录指针间的移动 而永久关系不能实现该功能 所以用户在应用程序开发中可能同时需要使用永久关系和临时关系 130 一般而言 表之间的关联性连接关系主要分为 一对一 一对多和多对多三种 所谓一对一的关联性连接关系是指在表1中的任何一个记录 在表2中有且只有一个记录与之对应 学生档案 学生成绩 一对一 主关键字 学号 主关键字 学号 131 一对多的表的连接关系是最常见的关联性 它是指表1中的任何一个数据记录可以和表2中的多个数据记录相对应 而表2中的任何一个数据记录却只能与表1的惟一一个数据记录相对应 学生档案 学生选课 一对多 主关键字 学号 132 所谓多对多的关联性连接关系 是指表1中的任何一个数据记录可以与表2中的多个数据记录相对应 而表2中的任何一个数据记录也可以与表1中的多个数据记录相对应 对于学生与课程之间的关系 应该是一种多对对的关系 每个学生可选多门课 每门课又可由多名学生选修 133 学生档案 排课情况表 多对多 134 1 建立表间的永久连接 在VFP中 表之间的永久关系是通过表中的索引来建立的 而临时关系是在字段上建立的 建立表间的永久连接主要是在数据库设计器中进行 每个要建立关联的数据表必须指定一索引关键字 若是一对一的关系 则两个表都必须根据相同字段建立一个主关键字索引 135 若是一对多的关系 则 一 方必须根据共同字段建立一个主关键字索引 多 方的表必须根据相同字段建立一个普通索引 然后在数据库设计器中 利用索引关键字将相关的数据表关联起来 136 下面举一个例子 有一个人事部门信息表Rsbm 部门编号 部门 部门负责人 办公室电话 数据表Rsbm和数据表Rsgl的关系 137 首先按以前介绍的方法 将该表建立在 人事管理 数据库rsgl dbc中 然后建立rsbm与rsgl的关联 由于在rsbm中一个部门可以在rsgl中找到多条记录 所以两个数据表之间的关系为一对多的关系 两个表已根据共同字段 部门编号 建立了索引 并且 一 方 rsbm 建立了以 部门编号 为索引标识的主索引 多 方建立了以 部门编号 为索引标识的普通索引 138 139 打开 人事管理数据库 在随即出现的数据库设计器窗口可以看到其中的数据表 并且可以看到各表中所有的索引字段 其中主索引关键字前面有一个钥匙状的图标 选择想要建立关系的索引关键字 必须是主索引 这里我们选rsbm中的部门名 然后按住鼠标左键将其拖到相关表的索引上 这里我们拖到rsgl中的部门名上 释放鼠标 此时 可以看到它们之间出现一条连线 表示已经建立了关联 建立好关联后 即可关闭数据库设计器 建立关联的步骤如下 140 2 编辑数据表之间的关联 对于建立好的数据表间的关联 若感到不满意 如想使用其他索引建立两个表间的关联 或删除已建立的两表之间的关联 都是可以的 其方法是 打开数据库设计器 鼠标右键单击关联线 连线变粗 出现 关系编辑 快捷菜单 141 选择 删除关系 即可删除已建立的关联 若选择 编辑关系 出现 编辑关系 对话框 在关联对话框中使用其他索引建立关联后 单击 确定 即可 当然也可以用鼠标拖动的方法重新建立关系 数据表间的关联主要用于查询 视图 表单以及报表等文件中 这些将在后续章节中介绍 142 3 4 4参照完整性 参照完整性是用于确保数据库中表间关系不被破坏的一组规则 在用户修改 增加或删除相关联表中的记录时 参照完整性起保护作用 怎样才算破坏了连接关系呢 现举例说明 前面我们已经建立了rsbm和rsgl两表的一对多关联 在此关联下 如果进行了如下操作 便破坏了两者之间的关联性关系 即破坏了 参照完整性 143 将rsbm 父表 中的一个父记录删除 而没删除rsgl 子表 中所对应的一个或多个记录 造成这些子记录没有对应的父记录 2 修改了rsbm 父表 中某个记录的部门编号 而没有修改子表rsgl的相对应的记录 从而造成rsgl 子表 中一个或多个记录没有对应的父记录 144 3 在rsgl 子表 中增加了一个没有父记录与其对应的子记录 一般解决这种不完整性的方法是用户自己通过编写触发器和存储过程代码来实现 但这种方法较为复杂 VFP提供了参照完整性生成器以帮助用户建立参照完整性 VisualFoxPro编程工具1 项目管理器2 设计器 3 向导4 生成器 145 1 建立参照完整性 以Rsbm和Rsgl两表为例 建立两者的参照完整性 其步骤如下 1 在数据库设计器中打开包含两表的人事管理数据库 出现 数据库设计器 窗口 146 2 用鼠标右键单击关联线 出现 关系编辑 快捷菜单 单击 编辑参照完整性 命令 出现 参照完整性生成器 还可以单击菜单中 数据库 下的 编辑参照完整性 命令 或在数据库设计器窗口的空白处单击右键 在弹出的快捷菜单中选择 编辑参照完整性 命令 都可以打开 参照完整性生成器 窗口 147 148 该窗口列出了此数据库中有哪些表是彼此相关联的 并列出了父表 子表名以及建立关联的主索引关键字 表上有三个选项页 可以分别单击三个选项页 对其下的单选项进行选择 以便决定采取何种方法来维护参照完整性 其中 149 级联 若选择该项 当更新某一父数据记录的关联字段时 VFP将自动更新与此数据记录对应的子表数据记录的关联字段的值 这样 原来父记录与子记录间的对应关系仍存在 而当删除某一父记录时 系统将会自动删除所有与该父记录对应的子记录 150 限制 若选此项 当对父表数据进行操作时 系统将先检查子表中是否有记录与之相关联 如果有则不允许更新该父数据表记录的关联字段 同样也不允许删除该父数据记录 也不允许插入没有父表中的记录与之对应的子表中的记录 忽略 选此项 系统将不进行任何参照完整性的检查工作 这是默认设置 151 例如 对于rsbm和rsgl之间的关系 对参照完整性有如下要求 当更新Rsbm中某一部门编号时 原来与之关联的rsgl表中的部门编号也同时作出更新 所以 要在 更新规则 下选择 级联 一旦删除

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论