3.2224四舍五入约等于200万等于多少

Visual FoxPro 6.0 数据库与程序设计教程_甜梦文库
Visual FoxPro 6.0 数据库与程序设计教程
Visual FoxPro 6.0数据库与程序设计 目录课程简介 第1章 数据库系统 第2章 VFP语言基础 第3章 VFP数据库及其操作 第4章 查询和视图 第5章 结构化查询语言SQL 第6章 结构化程序设计 第7章 面向对象程序设计 第8章 表单设计与应用 第9章 报表设计与应用 第10章 菜单设计与应用 第11章 应用系统的开发 计算机应用基础Ⅱ(VF)课程简介 课程目标◆ 学习程序设计技术◆ 掌握科学研究工具◆ 培养逻辑思维能力 ◆ 提高现代文化素质 ◆ 培养良好工作风格 ◆ 提高创新创造精神 课程性质◆ 计算机应用基础Ⅰ____核心公共课◆ 计算机应用基础Ⅱ____必修公共课◇ 文科____Visual FoxPro ◇ 理科____Visual Basic 课程Ⅱ教材◆ 《Visual FoxPro 6.0数据库与程序设计》 ◆ 卢湘鸿 主编 ◆ 电子工业出版社第1章 数据库系统 第2章 VFP语言基础 第3章 VFP数据库及其操 作 第4章 查询和视图 第5章 结构化查询语言 SQL 第6章 结构化程序设计 第7章 面向对象程序设计 第8章 表单设计与应用 第9章 报表设计与应用 第10章 菜单设计与应用 第11章 应用程序的开发 课程Ⅱ内容第1章 数据库系统第2章 VF语言基础第7章 面向对象程序设计第3章 VF数据库及其操作第8章 表单设计与应用第4章 查询和视图第9章 报表设计与应用第5章 结构化查询语言SQL第10章 菜单设计与应用第6章 结构化程序设计第11章 应用程序的开发 课程Ⅱ进度章次 1 2 3 4 内 数据库系统 VF语言基础 VF数据库及其操作 查询和视图 容 周数 0.5 0.5 2 156 7 8 9 10结构化查询语言SQL结构化程序设计 面向对象程序设计 表单设计与应用 报表设计与应用 菜单设计与应用23 1 2 1 2机动1 教学方法◆ 程序设计为主◆ 实际应用为重 ◆ 典型案例引路 ◆ 基本概念梳理 学习方法◆ 抓住重点,突出应用◆ ◆ ◆ ◆ ◆实验自学,相辅相成 认真练习,注意观察 举一反三,触类旁通 掌握规律,融会贯通 归纳整理,善于总结 测验方法◆ 理论、操作综合测验 ◆ 实验、实验报告、考勤均计成绩 ◇ 平时上机 ◇ 上机考试 20% 30%◇ 期末理论考试50% 第 章1.1 1.2 1.3 1.4 1.51 数据库系统数据库基础知识 Visual FoxPro 6.0的特点、安装和运行 Visual FoxPro 6.0的集成开发环境 Visual FoxPro 6.0系统的配置 Visual FoxPro 6.0的文件类型 1.1数据库基础知识随着计算机技术的发展,计算机的主要应用已从科学计算转变为事务 数据处理。在事务处理过程中,并不需要进行复杂的科学计算,而是要进 行大量数据的存储、查找、统计等工作,如教学管理、人事管理、财务管 理等,就需要对大量数据进行管理,而数据库技术就是目前最先进的数据 管理技术 Microsoft公司推出的Visual FoxPro 6.0是一个可运行于Windows 95/98/NT平台的32位数据库开发系统,也是目前微机上最优秀的数据库管 理系统之一 1.1.1基本概念____1.信息与数据⑴ 信息 信息泛指通过各种方式传播的、可被感受的声音、文字、图像、符号 等所表征的某一特定事物的消息、情报或知识 ⑵ 数据 数据是指表达信息的某种物理符号。在计算机中,数据是指能被计算 机存储和处理的、反映客观事物的物理符号序列 数据反映信息,而信息依靠数据来表达 表达信息的符号可以是数字、字母、文字和其它特殊字符组成的文本 形式的数据,还可以是图形、图像、动画、影像、声音等多媒体数据 在计算机中,主要使用磁盘、光盘等外部存储器来存储数据,通过计 算机软件和应用程序来管理及处理数据 1.1.1基本概念____2.数据处理数据处理是对各种类型的数据进行收集、整理、存储、分类、加工、 检索、维护、统计和传播等一系列活动的总称 数据处理的目的是从大量的、原始的数据中抽取对人们有价值的信息, 并以此作为行为和决策的依据 数据处理的核心问题是数据管理 数据库技术主要研究在计算机环境下如何合理组织数据、有效管理数 据和高效处理数据 1.1.1基本概念____2.数据处理应用程序1 应用程序2 数据集1 数据集2数据管理技术经历了三个阶段: ◇ 人工管理 ◇ 文件系统 ◇ 数据库管理 主要解决的问题是: ① 数据冗余度 应用程序1 ② 数据独立性 应用程序2 ③ 数据一致性应用程序n…应用程序n…数据集n 文件1文件 系统文件2文件n应用程序1应用程序2数据库 管理系 统DBMS数据库 DataBase应用程序n… 1.1.1基本概念____3.数据库系统数据库系统包括以下几个部分: ⑴ 数据库(DB) 指以一定的组织方式存储在计算机存储设备上、能为 多个用户所共享的、与应用程序彼此独立的相关数据的集合。它不仅包括 描述事物的数据本身,而且包括相关事物之间的联系 ⑵ 数据库管理系统(DBMS) 是为数据库的建立、使用和维护而配置的 软件,是数据库系统的核心组成部分 ⑶ 数据库系统(DBS) 指引进数据库技术后的计算机系统 ⑷ 数据库应用系统 指系统开发人员利用数据库系统资源开发出来的, 面向某一类信息处理问题而建立的软件系统应用程序1应用程序2应用程序n …数据库 管理系 统DBMS数据库 DataBase 1.1.2数据模型数据模型是用来描述现实世界中的事物及其联系的,它将数据库中的 数据按照一定的结构组织起来,以能反映事物本身及事物之间的各种联系 1.层次模型 用树型结构表示实体及其之间的联系 2.网络模型 用网状结构表示实体及其之间的联系 3.关系模型 用二维表结构来表示实体及其之间的联系 关系数据模型以关系数学理论为基础,一个二维表就是一个关系,不 仅能描述实体本身,而且还能反映实体之间的联系,模型简单、使用方便, 应用也最广泛 1.1.2数据模型学生 学号 姓名 性别 出生日期 学籍 工作单位 入学时间 毕业时间 专业 班级 课程名 成绩 个人鉴定 籍贯层次模型社会关系 称呼 姓名 学校 个人简历政治面貌学生学号 称呼 学校 姓名 姓名 性别 出生日期 籍贯 专业 社会关系 工作单位 个人简历 入学时间 毕业时间 政治面貌课程学籍 班级网状模型学分课程号 课程名 学时成绩 个人鉴定 课程号 成绩 1.1.2数据模型姓名 学校 称呼 出生日期 入学时间 籍贯学生 学号 个人简历 学号 社会关系 学号关系模型毕业时间 政治面貌 个人鉴定姓名 工作单位学籍 学号专业班级学时 学分 成绩课程 课程号 课程名 成绩 学号 课程号 1.1.3关系数据库及其特点____1.关系数据库由关系模型组成的数据库就是关系数据库 关系数据库由包含数据记录的多个数据表组成,用户可在有相关数据 的多个表之间建立相互联系 在关系数据库中,数据被分散到不同的数据表中,以便使每一个表中 的数据只记录一次,从而避免数据的重复输入,减少冗余 1.1.3关系数据库及其特点____2.关系术语⑴ 表:存放一组同类实体的集合 ⑵ 记录:记载某个实体属性的一组信息(表中的一行) ⑶ 字段:记载某个实体的一个属性的数据项(表中的一列) ⑷ 关系:指各数据表之间的连接方法,用二维表表示 ⑸ 关系模式:关系名(属性1,属性2,…,属性n) 例如,学生(学号,姓名,性别,出生日期,籍贯) ⑹ 主关键字:用来惟一标识关系中记录的字段或字段组合 ⑺ 外部关键字:用于连接 课程号 课程名 学时 另一个关系,并且在另一个关 101 英语 200 系中为主关键字的字段 102 高等数学 120103 104 105 大学语文 商务学 软件工程 80 42 72学分 653 2 3106材料力学422 1.1.3 ⑴ ⑵ ⑶ ⑷关系数据库及其特点____3.主要特点关系中每个属性必须是不可分割的数据单元 关系中每一列元素必须是类型相同的数据 同一个关系中不能有相同的字段和记录 关系的行、列次序可以任意交换,不影响其信息内容 课程号 101 102 课程名 英语 高等数学 学时 200 120 学分 6 5103104 105 106大学语文商务学 软件工程 材料力学8042 72 4232 3 2 1.3.1VFP的工作方式____1.人机交互方式工具按钮菜单命令命令窗口 交互方式下,输入或选择一条命令后可立即执行,并显示结果,操作 便捷、直观,但不适于解决复杂的信息管理问题 1.3.1VFP的工作方式____2.程序执行方式将多条命令有序地编写成一个程序存放在磁盘上(.PRG),通过运行该 程序,系统可连续地自动执行一系列操作,完成程序所规定的任务 在程序执行方式下,一个程序可以被反复执行,且在执行过程中一般 不需要人为干预 1.3.2 ⑴ ⑵ ⑶ ⑷VFP的窗口、菜单和工具栏____1.窗口主窗口:显示命令执行的结果 命令窗口:输入交互命令 数据浏览和编辑窗口:浏览或修改数据表中的记录 代码窗口:显示或编辑程序代码命令窗口数据浏览和 编辑窗口主窗口代码窗口 1.3.2VFP的窗口、菜单和工具栏____2.菜单VFP的菜单系统以交互方式提供了数据库操作的各种命令,启动系统后 主窗口的菜单栏中一般包含8个菜单项。随着当前执行的任务不同,菜单栏 中的各个选项也随之动态变化 1.3.2VFP的窗口、菜单和工具栏____3.工具栏工具栏中显示了一些常用的功能。默认情况下,?常用?工具栏随系统 启动时一起打开,其它工具栏则随着某一种类型的文件打开后自动打开。 选择?显示/工具栏?菜单命令,打开?工具栏?对话框,可以选择需 要的工具栏;取消选中则可关闭该工具栏 1.3.3VFP的向导、设计器和生成器____1.向导向导是一个交互式程序,能帮助用户快速完成一般性的任务。通过 在向导的一系列屏幕显示中回答问题或选择选项,向导会自动建立一个 文件,或者根据用户的 响应完成一项任务 1.3.3VFP的向导、设计器和生成器____2.设计器设计器是一种可视化的设计工具,用户无需涉及命令即可快速、方便 地创建并定制应用程序的组件设计器名称 数据库设计器 功 能建立数据库,在不同的表之间创建关联表设计器查询设计器 视图设计器 表单设计器创建自由表或数据库表,设置表中的索引创建基于本地表的查询 创建基于远程数据源的可更新的查询 创建表单和表单集,哑语查看或编辑表中的数据报表/标签设计器 创建报表或标签 ,用于显示和打印数据 菜单设计器 连接设计器 数据环境设计器 创建菜单栏或快捷菜单 可为远程视图创建连接 帮助用户创建和修改表单、表单集以及报表的数据环境 1.3.3VFP的向导、设计器和生成器____3.生成器生成器是一种带有选项卡的对话框,用于简化对表单、复杂控件和参 照完整性代码的创建和修改过程生成器名称 表达式生成器 组合框生成器 列表框生成器 命令按钮生成器 文本框生成器 编辑框生成器 表单生成器 表格生成器 选项按钮组生成器 参照完整性生成器 自动格式生成器 应用程序生成器 创建或编辑表达式 构造组合框 构造列表框 构造命令按钮组 构造文本框,用于显示和编辑表中的字符型、数值型和日期型字段 构造文本编辑框,用于显示或编辑长字段和Memo型字段 构造表单 构造表格 构造选项按钮组,用于选择若干互斥选项中的一个 帮助设置触发器,以控制如何在相关表中插入、更新或删除记录 格式化一组控件 创建应用程序或应用程序框架 功 能 1.3.4VFP的项目管理器____1.启动项目管理器项目是文件、数据、文档以及VFP对象的集合,项目可作为文件(.PJX) 保存在磁盘中 项目管理器是创建和管理项目的一个极为便利的工作平台,开发一个应 用系统时,通常都是先从创建项目文件开始,利用?项目管理器?来组织和 管理项目中的各类数据和对象 1. 启动项目管理器 通过新建项目文件或打 开已有的项目文件可启动项 目管理器 1.3.4VFP的项目管理器____2.项目管理器的组成以分层结构视图显示当前项目中的各类数据 单击数据项前面的?+?可展开此项的列表,单击数据项前面的?-?可 折叠展开的列表选项卡项目名称 1.3.4 ⑴ ⑵ ⑶ ⑷VFP的项目管理器____3.定制项目管理器移动和缩放项目管理器 展开或折叠项目管理器 拆分项目管理器 停放项目管理器 1.3.4VFP的项目管理器____4.项目管理器的操作⑴ 移去或删除文件 按?移去?按钮,将选定的对象从项目中移去 按?删除?按钮,将选定的对象从硬盘上删除,并且不可恢复 ⑵ 创建和修改文件 按?新建?按钮,将创建制定类型的文件 按?修改?按钮,将对选定的文件进行修改 ⑶ 为文件添加说明 选择?项目/编辑说明?菜单命 令,或文件快捷菜单的?编辑说明? 命令 1.4VFP系统的配置VFP安装和启动之后,系统自动用一些默认值来设置环境。也可以重新 设置参数以满足不同工作方式或工作环境的需要 1. 使用?选项?对话框配置系统 选择?工具/选项?菜单命令,打开?选项?对话框,其中有12个选项 卡,用于不同类别环境的设置 2.保存设置 ⑴ 将设置保存为仅在当前工作 期有效:?确定? ⑵ 将设置保存为永久性设置: ?设置为默认值? 也可以在命令窗口或程序中使 用SET命令配置环境,设置结果仅在 当前工作期有效 1.5扩展名 .DBF .FPT .DBC .MEM .DLL .ERR .ESL文件类型文件类型 扩展名 .HLP 文件类型 图形方式帮助文件表文件 表备注文件 数据库文件 内存变量文件 Windows动态链接库文件 编译错误文件 VFP支持的库文件.CDX、.IDX 符合索引文件、单索引文件.PJX、.PJT 项目、项目备注文件 .FRX、.FRT 报表文件、报表备注文件 .LBX、.LBT 标签文件、标签备注文件 .MNX、.MNT 菜单文件、菜单备注文件 .MPR、.MPX 菜单程序文件、编译后的菜单程序文件 .OCX OLE控件文件 .QPR、.QPX 查询程序文件、编译后的查询程序文件 .SCX、.SCT 表单文件、表单备注文件.DCT、.DCX 数据库备注文件/索引文件.FLL .PRG.FXP .APP .EXEFoxPro动态链接库文件 解释执行的程序文件编译后的程序文件 生成的应用程序文件 可执行程序文件.SPR、.SPX 表单程序文件、编译后的表单程序文件 .TXT.VUE .H文本文件FoxPro 2.X视图文件 头文件(VFP或C/C++程序需要包含的).VCX、.VCT 可视类库文件、可视类库备注文件 第 章2.1 2.2 2.3 2.4 2.52 VFP语言基础数据类型 数据存储 运算符和表达式 函数 命令 2.1数据类型说 明 长度(字节) 用各种文字字符表示的数据。由字母、数字、 1~254 汉字、符号和空格等组成 可以进行算术运算的数据。由数字0~9、小 数点和正负号构成 采用表示货币量的数据来代替用数值型数据 表示货币 8 8 1数据类型 字符型 数值型 货币型 逻辑型 Characte r Numeric Cuyency Logic用来进行各种逻辑判断的数据。只有两个值: 真或假用来表示日期的数据。存储格式为 ?YYYYMMDD” 描述日期和时间的数据,存储格式为 ?YYYYMMDDHHMMSS”日期型日期时间型DateDateTime88 2.1数据类型 整型 浮点型数据类型说 明 长度(字节) 4 8Integer 是指不包含小数点部分的数值,以二进制形式存储 Float 是数值型数据的一种,与数值型数据完全等价,但在 存储形式上采取浮点格式,由尾数、阶数及字母E组成双精度备注型Double 是具有更高精度的数值型数据用于存储字符型数据块,用来存储指向实际数据存放 Memo 位置的地址指针,实际数据存放在与数据表文件同名 的.FPT文件中,其长度仅受磁盘空间的限制 General 用于存储OLE对象,可以是文档、图片、电子表格等。 用来存储指向.FPT文件位置的地址指针84通用型 字符型4 1~254 4二进制 用于存储任意不经过代码页修改而维护的字符型数据备注型数据 二进制 用于存储任意不经过代码页修改而维护的备注型数据 2.2.1常量常量是指在数据处理过程中其值始终保持不变的量 1. 数值型常量:数学中的十进制整数或小数 如:10.25,-123.567 2. 浮点型常量:数值型常量的浮点格式 如:1.234E+15,1.234E-15 3. 字符型常量:用单撇号、双撇号、方括号括起来的字符串 如: ?ABCD”、’1234’、[中国北京] 4. 逻辑型常量:用下圆点作为定界符,只有真和假两个值 如: .T.、.t.、.Y.、.y. (真);.F.、.f.、.N.、.n. (假) 5. 日期型常量/日期时间型常量: 表示一个确切的日期和时间,用花括号作为定界符 如:{^}、{^ 12:30:15} 也可以用CTOD函数进行转换,如 CTOD(”03/03/2003”) 2.2.2变量变量是指在数据处理过程中其值可以改变的量 变量用标识符标识,标识符是以字母(汉字)或下划线开头,由字母、 汉字、数字和下划线组成的字符串,长度不能超过128个字符 VFP中的变量分为字段变量和内存变量两种 1. 字段变量 存在于数据表中。当定义好一个数据表的结构,该表中的各个字段名 就形成了各个字段变量 ? 字段变量必须先定义然后才能使用 2. 内存变量 是一种临时信息存储单元,独立于数据表,可以根据需要随时建立。 其类型取决于变量值的类型,可以把不同类型的数据赋给同一个变量 当内存变量名与数据表中的字段变量名相同时,要访问该内存变量, 必须在变量名前加上前缀M.或M-&,否则系统将优先访问同名的字段变量 2.2.2变量⑴ 建立内存变量 格式1:&内存变量名&=&表达式& 格式2:STORE &表达式& TO &内存变量名表& 功能:在定义内存变量的同时确定内存变量的值和类型 例如,X=5 && 定义变量X,并把数值5赋给X STORE X+10 TO Y && 定义变量Y,并将表达式X+10的值赋给Y STORE ”北京? TO A,B,C && 定义变量A,B,C,并赋于相同的字符数据 X=.F. && 重新定义变量X,并赋逻辑值 2.2.2变量⑵ 输出内存变量的值 格式1:? &表达式表& 格式2:?? &表达式表& 功能:计算&表达式表&中各表达式的值并在屏幕上显示出来 ⑶ 显示或打印内存变量 格式:LIST|DISPLAY MEMORY [LIKE &通配符&] [TO PRINTE|TO FILE &文件名&] 功能:显示或打印内存变量的当前信息 例如,在命令窗口中输入命令: LIST MEMORY LIKE X* 将在主窗口中显示所有以X打头的内存变量 2.2.2变量⑷ 清除内存变量 格式1:CLEAR MEMORY 格式2:RELEASE &内存变量名表& 格式3:RELEASE ALL [LIKE &通配符&|EXCEPT &通配符&] 功能:释放所有内存变量或指定的内存变量。 例如,RELEASE X1 && 释放内存变量X1 RELEASE ALL LIKE X* && 释放所有第1个字母为X的内存变量 RELEASE ALL && 释放所有内存变量 3. 系统变量 以字符?_?开头的、由VFP系统自动定义生成的变量,其名称也是系 统事先定义好的 例如,_PAGENO,_ALIGNMENT 2.2.2变量4.数组 内存中连续的一片存储区域,由一组称为数组元素的变量组成。通过 赋值语句可以为各个元素分别赋值,且所赋值的数据类型可以不同 定义:DIMENSION &数组名1&(&索引值1&[,&索引值2&]) [,&数组名2&(&索引值3&[,&索引值4&])]… ? 数组必须先定义后使用,且使用时下标不能超界 每个数组元素通过数组名和相应的索引编号被引用 内 第1个元素 存 第2个元素 例如:定义一个一维数组AA和一个二维数组BB: 中 DIMENSI0N AA(5),BB(2,3) 的 第3个元素 数 … 将数值0赋给数组AA中的所有元素:STORE 0 TO AA 组 … 元 将字符串xyz赋给数组元素BB(1,1):BB(1,1)=”XYZ” 素 第n个元素 将数值125赋给数组元素BB(2,1): BB(2,1)=125 将逻辑真值T赋给数组元素BB(2,3):BB(2,3)=.T. 2.2.3其它数据存储容器____1.数据表数据表是一系列相关数据的集合 字段是数据表中存储、处理数据的基本元素,一个具体的字段只能存储 同一种类型的数据 记录是数据表中一组字段的集合,同一个数据表中所有记录都具有相同 的字段名,且同名字段在每个记录中的数据类型、数据长度都是相同的 字段和记录构成了一个数据表的全部内容 字段 结构 记录编号 012 … 100121 姓名 张爱芳 李广林 … 张兴强 性别 女 男 … 男 基本工资 345.67 445.90 … 1025.98 工龄工资 145.45 185.60 … 365.53 应扣工资 30.00 45.00 … 100.00 实发工资 451.12 586.50 … 1291.51 2.2.3其它数据存储容器____2.对象对象(Object)是一个具有属性和行为特征的实体,它可以是任何具 体事物。例如现实生活中的计算机、电话机、电视机等 在面向对象的程序设计中,对象是编程的基本元素,它将某一数据和 使用该数据的一组基本操作或过程封装在一起,构成一个统一体 VFP中的对象可以是表单、标签或各种控件等 每个对象都有自己的属性和行为特征 2.3运算符和表达式运算符是对相同类型数据进行运算操作的符号 用运算符将常量、变量和函数等数据连接起来的式子称为表达式 表达式的类型由运算符的类型决定,每个表达式按照规定的运算规则 都产生一个惟一的值 ◇ 数值表达式 ◇ 字符表达式 ◇ 日期表达式 ◇ 关系表达式 ◇ 逻辑表达式 2.3运算符和表达式____1.数值表达式数值表达式:用算术运算符将数值型数据连接起来的式子,其结果 仍是数值型数据运算符**或^ * / % + -名乘 除称乘方取模(或求余) 加 减 2.3运算符和表达式____2.字符表达式字符表达式:用字符串运算符将字符型数据连接起来的式子,其结果仍 是字符型数据 ⑴ “+”运算符:两个字符串首尾相连形成一个新的字符串 ⑵ ?-?运算符:两个字符串相连,并将前字符串尾部的空格移到合并 后的新字符串的尾部 例如,? ?ABCD ”+”EFG”+”1234” && 结果为:ABCD EFG1234 ? ”ABCD ”-”EFG ”+”1234” && 结果为:ABCDEFG 1234 2.3运算符和表达式____3.日期表达式日期表达式:用算术运算符将日期型和数值型数据连接起来的式子,其 结果为日期型数据或数值型数据 例如,? {^}+5 && 结果为日期:
? {^}-5 && 结果为日期:
? {^}-{^} && 结果为天数: 84 2.3运算符和表达式____4.关系表达式关系表达式:用关系运算符将运算元素连接起来的式子,其结果为逻 辑真值(.T.)或逻辑假值(.F.)运算符 & &= & &= = &&、#、!= 名 称小于 小于等于 大于 大于等于 等于 不等于==$字符串精确等于字符串包含比较例如: S1=”读者? S2=”读者文摘? SET EXACT ON ? S1=S2, S2=S1, S2==S1 && 结果是 .F. .F. SET EXACT OFF ? S1=S2, S2=S1, S2==S1 && 结果是 .F. .T..F..F. 2.3运算符和表达式____5.逻辑表达式逻辑表达式:用逻辑运算符将逻辑型运算元素连接起来的式子,其 结果仍是逻辑型数据 ⑴ AND (与):两个表达式的值均为真,结果才为真;否则为假 ⑵ OR (或):两个表达式的值均为假,结果才为假 ⑶ NOT、! (取反):真值变为假值,假值变为真值 例如 ? 10&5 .AND. 5&2 ,10&5 .OR. 5&2 && 结果为 .F. .T. 2.3运算符和表达式____6.优先级◇ 括号→函数→算术运算→字符运算→关系运算→逻辑运算 ◇ 同级运算从左至右顺序进行 例如,x1=3,y1=-2,x2=8,y2=-6 则 x1+y1&x2+y2 .AND. .NOT.(y1&y2) 的结果为 .F. 2.4函数◇ 函数 函数是一种能够完成某种特定操作或功能的数据形式。一个函数可以 接受一个或多个参数,并通过特定的运算返回一个值 格 式:函数名([参数1][,参数2]…) 函数值:函数的运算结果 说 明:任何可以使用表达式的地方都可以使用函数 ◇ 函数类型 系统函数:由VFP提供的内部函数,有14类380多个函数,常用的函数 有数值函数、字符函数、日期函数、类型转换函数、数据库函数和测试函 数等6类 自定义函数:由用户自己定义的函数 2.4函数____1.数值函数数值函数:返回值是数值的函数函数格式 ABS(exp) EXP(exp) INT(exp)函数功能 求表达式的绝对值 e指数函数 取整数,负数靠0示例 ABS(-3)返回值为3 EXP(3)返回值为20.09 INT(6.9)返回值为6 INT(-6.9)返回值为-6 Round(1.45,1)返回值为1.5 MOD(17,3)返回值为2 SQRT(4)返回值为2Round(exp1,exp2) 四舍五入函数 MOD(exp1,exp2) SQRT(exp) Pi() 求余数函数 平方根函数 求圆周率函数 2.4函数____2.字符函数字符函数:用于对字符或字符串操作的函数,返回值可以是字符型、 数值型或逻辑型 示例中,假设 c=”This is a book!”函数格式LEN(exp) ASC(exp) LEFT(exp,n) RIGHT(exp,n)函数功能求字符串的长度 求字符串中第一个字符的ASCII值 从字符串左部取长度为n的子串 从字符串右部取长度为n的子串示例LEN(c)返回值为15 ASC(“BOOK”)返回值为66 LEFT(c,4)返回串?This” RIGHT(c,5)返回 ?book!” SUBS(c,11,4)返回?book” ALLT(“ ?a” a”)返回串为SUBSTR(exp,m,n) 从字符串中取中间子串 ALLTRIM(exp) LOWER(exp) UPPER(exp) SPACE(n) 删除字符串的前导和尾部空格 字符串大写转换为小写 字符串小写转换为大写 返回n个空格字符组成的字符串LOWE(“THE”)返回串?the” UPPER(“the)返回串?THE” 2.4函数____3.日期函数日期函数:用于对日期或日期时间型数据进行操作的函数 示例中,假设 d={^ 13:23:36}函数格式 DATE() TIME() 函数功能 返回系统当前日期 返回系统当前时间 示例DATETIME()DOW(exp) YEAR(exp) MONTH(exp) DAY(exp) HOUR(exp)返回系统当前日期和时间取日期表达式的星期号(1为星期天) DOW(d)返回4(星期三) 取日期表达式的年份值 取日期表达式的月份值 取日期表达式的日数值 取时间表达式中的小时数 YEAR(d)返回值为2003 MONTH(d)返回值为9 DAY(d)返回值为3 13 MINUTE(d)返回值为23MINUTE(exp) 取时间表达式中的分钟数SEC(exp)取时间表达式中的秒数SEC(d)返回值为36 2.4函数____4.类型转换函数类型转换函数:用于不同类型数据之间的转换函数 示例中,假设d={^ 13:23:36} c=”05/08/:50”函数格式 函数功能 示例 CHR(65)返回字符?A” CTOD(c)返回c对应日期CHR(ASCII码) 返回与ASCII码相应的字符 CTOD(exp) CTOT(exp) DTOC(exp) 转换表达式为对应的日期转换表达式为对应的日期时间值 CTOT(c)返回c对应日期时间 转换日期表达式为字符串 DTOC(d)返回d对应的字符串 STR(3.14)返回串?3.14? TTOC(d)返回d对应的字符串 VAL(“3.14”)返回值为3.14STR(exp,n,m) 数值转换为字符串 TTOC(exp) VAL(exp) 转换日期时间表达式为字符串 返回数字字符串对应的数字 2.4函数____5.数据库函数函数功能 返回当前表或指定表中的记录个数 返回当前表或指定表的 当前记录号 如果当前记录指针在表头则返回真,否则返回假 如果当前记录指针在表尾则返回真,否则返回假数据库函数:对数据库操作的函数函数格式 RECOUNT() RECNO() BOF() EOF() 2.4函数____6.测试函数测试函数:测试表达式类型及文件的函数函数格式 TYPE(exp) 函数功能 返回表达式的数据类型,表达式 以字符串的形式表示 测试文件是否存在,如果存在返 示例 TYPE(“65”)返回N FILE(“xjk.dbf”),如果次文FILE()回真,否则返回假件存在返回真,否则返回假 2.5命令1. 命令动词: 所有命令都以命令动词开头,表示要执行的命令功能 2. 命令子句: 用来修饰或限制命令 ⑴ 范围子句: 指明在哪些记录范围内执行命令,有四种: RECORD &N& 表示指定第N个记录 NEXT &N& 表示从当前记录开始的N个记录 ALL 表示数据库的所有记录 REST 表示从当前记录开始到最后一个记录 ⑵ FIELDS子句: 指明对数据表中的哪些字段执行命令 ⑶ FOR/WHILE子句: 后面跟一个逻辑表达式,表示仅对符合条件(即 表达式的结果为.T.)的记录执行命令操作 例如,显示学生表中所有女生的学号、姓名、出生日期等信息,可使 用以下命令: LIST ALL FIELDS 学号,姓名,出生日期 FOR 性别=?女? 2.5命令3. 命令书写规则 ⑴ 必须以命令动词开头,命令中可以含有一个或多个子句,子句的 顺序任意 ⑵ 命令动词和各子句之间用空格分开(空格数任意) ⑶ 命令动词可以缩写为前4个字符,且不区分大小写 ⑷ 命令行的最大长度为254个字符,一行写不下时,要在行尾加续行 符(西文分号?;?)分行,并在下行继续书写 第3.1 3.2 3.3 3.43 章 VFP数据库及其操作3.5 3.6 3.7 3.8 数据表的维护 数据表排序与索引 建立数据字典 多数据表操作创建项目 创建数据库 创建数据表 数据表的基本操作 FVP项目组织简图项目(.PJX)文档类数据代码其他查询(.QPR)数据库(.DBC)自由表(.DBF)备注(.FTP)库表(.DBF)索引(.IDX) 3.1创建项目项目是文件、数据、文档和VFP对象的集合。利用?项目管理器?可以 很方便地组织和管理项目中的各类数据和对象 用户在开发一个应用系统时,通常都是先从创建项目开始的项目(.PJX)文档类数据代码其他 3.1创建项目1. 建立工作目录: 组织和管理磁盘中的各类文 件 2.建立项目文件 ⑴ 菜单:选择?文件/新建?菜单命令,或按工 具栏?新建?按钮,在?新建?对话框中选择?项目? 项 ⑵ 命令:CREATE PROJECT [&项目文件名&] 3.打开项目文件 ⑴ 菜单:选择?文件/打开?菜单命令,或按工 具栏的?打开?按钮,在?打开?对话框中选择项目 文件(*.PJX) ⑵ 命令: MODIFY PROJECT [&项目文件名&] 3.2创建数据库数据库是表的集合,即在一个数据库中可以包含若干个通过关键字段 相互关联的表。一个数据库文件(.DBC)中存储了所包含的表与表之间的 联系,以及依赖于表的视图、联接和存储过程等信息 把表放入数据库中可以减少数据的冗余,保护数据的完整性 数据库使得对数据的管理更加方便和有效数据库(.DBC)备注(.FTP)库表(.DBF)索引(.IDX) 3.2.1数据库的设计思想设计步骤 设计过程 明确设计目的 确定需要的数据表 确定表中需要的字段 确定表间关系分析数据需求 确定需要的数据表 确定所需字段 确定关系改进设计优化设计 3.2.2数据库的创建1. 建立数据库 ⑴ 项目管理器:?新建:数据库? ⑵ 菜单:选择?文件/新建:数据库?菜单命令 ⑶ 命令:CREATE DATABASE &数据库名& 2.在项目中添加数据库 在项目管理器中选定?数据库?项,按?添加?按钮,在?打开?对 话框中选择需要添加的数据库文件 3.2.3 1. ⑴ ⑵ ⑶数据库的基本操作打开数据库 项目管理器:选定要打开的数据库,按?打开?按钮 菜单:选择?文件/打开?菜单命令 命令 ① 打开数据库文件:OPEN DATABASE [&数据库文件名&] ② 数据库设计器:MODIFY DATABASE [&数据库文件名&] 2.关闭数据库 ⑴ 项目管理器:选定要关闭的数据库,按?关闭?按钮 ⑵ 命令:CLOSE DATABASES 3. 删除数据库 ⑴ 项目管理器:选定数据库后,按?移去?按钮,将从项目中移去 选定的库文件;按?删除?按钮,则将选定的库 文件从磁盘上删除 ⑵ 命令: DELETE DATABABE &数据库文件名& 3.3创建数据表1. 数据表和数据库 表(Table)是处理数据和建立关系型数据库及应 用程序的基本元素。数据库(DATABASE)是表的集合 2. 数据表的类型 ⑴ 自由表:不属于任何数据库而独立存在的表 ⑵ 数据库表:属于某一数据库的表 3. 数据表的结构 数据表形式上是一组相关联的数据 字段 按行和列排列的二维表格,用来描述一 个实体记录 3.3创建数据表LIST STRU MODI STRU COPY STRU显示结构编辑结构复制结构数据表结构CREATE新建表 排序 数据表记录SQRT INDEXUSE 打开/关闭索引增加记录INSERT APPEND APPEND FROM修改记录BROWSE EDIT CHANGE REPLACE删除记录DELETE RECALL PACK ZAP显示记录LIST DISPLAY BROWSE检索记录LOCATE CONTINUE FIND SEEK统计数据COUNT SUM AVERAGE TOTAL复制表COPY 3.3.1基本概念定义字段:为每个字段指定名称、数据类型和宽度,它们决定了表中的 数据是如何被标识和保存的 ⑴ 字段名:以字母或汉字开头,由字母、汉字、数字或下划线组成, 不能包含空格。数据库表字段名最长为128个字符,自由表字段名最长为10 个字符 ⑵ 字段类型:决定了存储在字段中的值的数据类型 ⑶ 字段宽度:指能够容纳存储数据的长度 ⑷ 小数位:若字段的类型是数值型(N)和浮点型(F)时,还需给出小数 位数。小数位数不能大于9,双精度型 数据的小数位数不能大于18 ⑸ 使用空值:在建立数据表时, 可以指定字段是否接受空值(NULL) 3.3.1基本概念建立?教学管理?数据库,其中有?学生?、?课程?和?成 绩?三个表 3.3.2自由表的建立____1.定义表结构表结构的定义在?表设计器?中完成。打开表设计器的方法有: ⑴ 菜单:选择?文件/新建?菜单命令 ⑵ 命令:CREATE &表文件名& ⑶ 项目管理器:选择?自由表?,按“新建?按钮 定义表结构就是设置表的字段属性,包括字段名、数据类型、字段宽 度和小数位数等 ◇ 定义字段 ◇ 修改字段 ◇ 插入字段 ◇ 调整字段 ◇ 删除字段 3.3.2自由表的建立____2.输入记录输入记录数据可以选择?显示/浏览?或?编辑?菜单命令,在 ?浏览?或?编辑?窗口中进行 ⑴ 一般数据的输入 字符型、数值型、逻辑型、日期型等字段类型数据可以直接在浏览 窗口或编辑窗口中输入 3.3.2自由表的建立____2.输入记录⑵ 备注型字段数据的输入 双击名为?memo”的备注字段标志,进入备注窗口,输入文本内容 ⑶ 通用型字段数据的输入 双击名为?gen”的通用字段标志,进入通用型字段输入编辑窗口。选择 ?编辑/插入对象?菜单命令,在?插入对象?对话框中选择插入OLE对象 要删除备注字段或通用字段的内容,可双击字段名,打开编辑窗口,选 择?编辑/清除?菜单命令 ? 如果在数据表中定义了备注型或通用型字段,系统会自动生成与表 文件名相同的备注文件(.FPT)。备注文件是表文件的辅助文件,它随着表文 件的打开而打开,随着表文件的关闭而关闭 ? 无论一个表中定义了多少个备注型 或通用型字段,系统只生成一个备注文件 3.3.3数据库表的建立____1.在数据库中建立新表在项目管理器中,选择?数据库:表?项,按?新建?按钮 ? 使用项目管理器创建的表自动包含在项目文件中 ? 当数据库处于打开状态时,用建立自由表的方法创建的新表将包 含在该数据库中 3.3.3数据库表的建立____2.将自由表添加到数据库⑴ 项目管理器 选择?数据库:表?项,按?添加?按钮 ⑵ 命令:ADD TABLE &数据表文件名& ? 数据库中的表只能属于一个数据库文件,如果向当前数据库中添 加的表已属于其它数据库,则需要先从其它数据库中移去该数据表,然后 才能将它添加到当前数据库中 3.3.3数据库表的建立____3.从数据库中移去数据表⑴ 项目管理器 选定要移去的表,按?移去?按钮,在提示对话框中按?移去?按钮; 若 按?删除?按钮,则不仅从数据库中移去该表,同时也从磁盘上删除 了该表 ⑵ 命令:REMOVE TABLE &数据表文件名& 3.4.1数据表的浏览____1.打开数据表文件◇ 打开数据表 ⑴ 菜单:选择?文件/打开?菜单命令⑵ 命令:USE &表文件名& ◇ 关闭数据表 ⑴ 菜单:选择?窗口/数据工作期? 菜单命令,在?数据工作期?对话框中选 择表的别名后,按?关闭?按钮 ⑵ 命令:USE 例如,USE 学生 USE 课程 USE 3.4.1数据表的浏览____2.浏览与显示表结构⑴ 浏览表结构 ① 项目管理器:选定要浏览的 表,按?修改?按钮,打开表设计器 ② 菜单:选择?显示/表设计器? 菜单命令,打开表设计器 ⑵ 显示表结构(主窗口) 命令:LIST|DISPLAY STRUCTURE 3.4.1数据表的浏览____3.浏览与显示记录⑴ 在浏览窗口中浏览记录 ① 项目管理器:选定要浏览的表,按?浏览?按钮 ? 对于备注型字段或通用型字段内容,可以在浏览窗口中双击相应的 字段标志(?Memo”或?Gen”),打开编辑窗口浏览 ② 菜单:选择?显示/浏览?,或?显示/编辑?菜单命令,打开浏览 窗口 ③ 命令:BROWSE 3.4.1数据表的浏览____3.浏览与显示记录⑵ 在浏览窗口中有选择地浏览记录 ① 菜单:打开浏览窗口,选择?表/属性?菜单命令,在?工作区属 性?对话框的?数据过滤器?框中输入筛选条件,可以只显示满足筛选条 件的记录。删除筛选表达式,可恢复显示所有记录 在?工作区属性?对话框中,选择?字段筛选指定的字段?选项,按 ?字段筛选?按钮,在“字段选择器?对话框中选择要显示内容的字段; 选择?工作区中的所有字段?选项,可取消对字 段访问的限制,恢复显示所有字段 ② 命令 设置数据过滤器: SET FILTER TO [&条件表达式&] 设置字段过滤器: SET FIELDS TO ALL|&字段名表& 3.4.1数据表的浏览____3.浏览与显示记录【例3.10】用命令方式浏览?学生?表中所有女生的记录 SET FILTER TO 性别=‘女’ BROWSE 【例3.11】取消【例3.10】中的记录筛选,浏览所有学生的记录 SET FILTER TO BROWSE 【例3.12】用命令方式浏览?学生?表中的学号、姓名、系别和贷款 否 SET FIELDS TO 学号,姓名,系别,贷款否 BROWSE 【例3.13】取消【例3.12】对字段的限制,浏览?学生?表中所有字 段 SET FIELDS TO ALL BROWSE USE 3.4.1数据表的浏览____3.浏览与显示记录⑶ 显示记录(主窗口) 命令:LIST|DISPLAY [&范围&] [FIELDS &字段名表&][WHILE &条件&][FOR&条件&] ? ?FIELDS &字段名表&?可以用&表达式表&代替 【例3.14】显示?学生?表中所有女生的学号、姓名和所在系的信 息: USE E:\VFP6\DATA\学生.DBF && 打开学生表 LIST FIELDS 学号,姓名,系别 FOR 性别=?女?语 句 无WHILE 无FOR NEXT 1 有FOR 有WHILEDISPLAY DELETE RECALL REPLACEALLREST 3.4.1数据表的浏览____应用示例1. 显示所有男生的姓名与在2007年的年龄 LIST 姓名,2007-YEAR(出生日期) FOR 性别=‘男’ 2. 显示所有姓?张?同学的学号、姓名和系别 LIST 学号,姓名,系别 FOR 姓名=[张] $$ LEFT(姓名,2)=[张] 3. 显示所有姓名中含有?林?字同学的学号、姓名和系别 LIST LIST 学号,姓名,系别 FOR AT(?林?,姓名)#0 4. 显示所有在本月过生日同学的姓名和出生日期 $$ ?林?$姓名LIST FIELDS 姓名,出生日期 FOR MONTH(出生日期)=MONTH(DATE()) 5. 分页显示所有同学的信息DISPLAY ALL 6. 显示当前记录信息DISPALY 7. 显示学号的第4位为3,并且在10月份出生的学生的信息 3.4.2记录的定位____1.记录指针记录指针存放的是记录号。被记录 指针指向的记录称为?当前记录? ? 向表中录入数据时,系统会按 照录入次序为记录加上记录号 ? 数据表刚打开时,记录指针总 是指向首记录 ? 通过移动记录指针可以指定当 前要操作的记录文件起始标识(BOF) 首记录(TOP) 第2条记录 ……… 记录指针→ 第i条记录 ……… 第n-1条记录 尾记录(Bottom) 文件结束标识(EOF) 3.4.2记录的定位____2.移动记录指针⑴ 菜单:打开浏览窗口,选择?表/转到记录?菜单命令 ⑵ 命令 ① 绝对移动:[GO[TO]] &记录号&|TOP|BOTTOM 功能:将记录指针定位在指定记录号的记录上 ? TOP表示第一条记录,BOTTOM表示最后一条记录 ② 相对移动:SKIP [+|-][&算术表达式&] 功能:将记录指针从当前位置向前或向后 移动若干条记录位置 ③ 条件定位: LOCATE [&范围&] FOR &条件& 功能:查找满足条件的第一条记录 ? ?FOR&条件&?是必须的;使用CONTINUE 命令可继续查找下一条满足条件的记录 3.4.2记录的定位【例3.15】用命令方式定位并显示?学生?表的指定记录 USE E:\VFP6\DATA\学生 GO TOP DISPLAY GO 6 DISPLAY GO BOTTOM DISPLAY 【例3.16】使用SKIP命令移动?学生?表的记录指针 GO 2 SKIP 5 DISPLAY SKIP C3 DISPLAY 3.4.2记录的定位【练习】用命令方式显示?学生?表倒数第5条记录信息 GOTO BOTTOM SKIP -4 DISPLAY 【例3.17】将记录指针定位在学生表中第一条性别为?男?的记录 上 LOCATE FOR 性别=?男? ? FOUND() DISPLAY CONTINUE DISPLAY 3.5.1修改表结构在表设计器中可以修改表结构 1. 项目管理器:选定要修改的表,按?修改?按钮 2. 菜单:选择?文件/打开?菜单命令,或?显示/表设计器?菜单 命令 3. 命令:MODIFY STRUCTURE ? 修改字段属性后,VFP将按新的属性改写整个.DBF文件,可能造成 数据丢失 3.5.2添加记录____1.在浏览窗口中追加记录⑴ 菜单:打开浏览窗口,选择?显示/追加方式?菜单命令,可以在 原有记录的后面追加多条新记录 选择?表/追加新记录?菜单命令,每次只能添加一条新记录 ⑵ 命令:APPEND [BLANK]? BLANK表示空记录 3.5.2添加记录____2.插入记录命令:INSERT [BLANK][BEFORE] 功能:在数据表的当前记录之前或之后插入一条记录? BEFORE表示?之前? 3.5.2添加记录____3.从其它文件中追加记录⑴ 菜单:打开浏览窗口,选择?表/追加记录?菜单命令 ⑵ 命令:APPEND FROM &源表文件名& [FIELDS &字段名表&][FOR &条件&] 功能:将满足条件的记录按指定的字段从源表文件中追加到当前数 据表的末尾例如,将?课程?表中的相应数据追加到?课程安排?表中: USE E:\VFP6\DATA\课程安排 APPEND FROM E:\VFP6\DATA\课程.DBF FIELDS 课程号,课程 3.5.3编辑记录命令:EDIT|CHANGE [&范围&][FIELDS &字段名表&][FOR &条件&] 功能:修改当前表给定范围内,满足条件记录的制定字段值 3.5.3编辑记录____1.在浏览窗口中编辑记录⑴ 项目管理器:选定表,按?浏览?按钮,打开浏览窗口,直接修 改字段值。关闭浏览窗口,所做的修改将自动保存在表文件中? 备注型字段或通用型字段内容,可以双击相应的字段标志(?Memo”或?Gen”),打开编辑窗口进行编辑或修改 ⑵ 命令:BROWSE [FIELDS &字段名表&][FREEZE &字段名&] [NOAPPEND][NOMODIFY][FOR &条件&]? FREEZE表示冻结在指定字段 ? NOAPPEND表示禁止追加 ? NOMODIFY表示禁止修改 3.5.3编辑记录____2.批量修改记录对一批记录中的若干字段值进行有规律 的修改 ⑴ 菜单:打开数据表,选择?表/替换字 段?菜单命令,在“替换字段?对话框中设置 ⑵ 命令: REPLACE [&字段1& WITH &表达式1& [ADDITIVE] [,&字段2& WITH &表达式2& [ADDITIVE]… [&范围&][FOR &条件&][WHILE &条件&] 功能:对表中指定范围内的满足条件的记录进行批量修改 【例3.21】给?学生?表管理系的每个学生减去15.5元助学金 USE E:\VFP6\DATA\学生 REPLACE ALL 助学金 WITH 助学金-15.5 FOR 系别=?管理? 3.5.4删除记录1. 逻辑删除: 给记录加删除标记 ⑴ 鼠标操作:在浏览窗口中,单击左侧白色 方框使之变黑 ⑵ 菜单:选择?表/删除记录?菜单命令 ⑶ 命令:DELETE [&范围&][FOR &条件&] 记 录 2. 恢复逻辑删除: 取消删除标记 ⑴ 鼠标操作:单击逻辑删除标记,取消黑色方框 RECALL DELETE ⑵ 菜单:选择?表/恢复记录?菜单命令 逻辑删除 ZAP ⑶ 命令:RECALL [&范围&][FOR &条件&] 3. 物理删除:从磁盘上删除记录,不可恢复 PACK ⑴ 菜单:选择?表/彻底删除?菜单命令 物理删除 ⑵ 命令:PACK(删除带有删除标记的记录) ZAP (一步、全部清除表中记录,仅保留表结构) 3.5记录删除____应用示例【例3.23】逻辑删除?学生?表1983年以前出生的学生,再将其恢 复DELETE FOR YEAR(出生日期)&1983 LIST 姓名,性别,出生日期,系别 RECALL ALL 【例3.22、24】逻辑删除?学生?表最后一条记录,再将其物理删除 GO BOTTOM DELETE PACK LIST 姓名,性别,系别 【例3.25】删除?课程安排?表中的所有记录 ? RECCOUNT() ZAP ? RECCOUNT() 3.5记录编辑____应用练习1. 在第三个记录之后插入一条新记录 2. 对从当前记录开始一直到最后一条记录的籍贯和高等数学成绩进行修改3. 4. 5. 6. 7. 将所有学生的奖学金上调5%,再加10元 逻辑删除第一个记录 恢复第7个记录之前的3条记录中被逻辑删除了的记录 物理删除所有被逻辑删除的记录 逻辑删除最后5条记录中姓?王?的同学PACK DELETE 奖学金 REPLACERECORD 1WITH 奖学金*1.05+10 EDIT GO 3 REST FTELDS 籍贯,高等数学 BOTTOM 7 SKIP -3 INSERT -4 DELETE REST FOR 姓名=‘王’ RECALL NEXT 3 3.5.5复制数据表____1.数据表文件的复制1. 数据表文件的复制 ⑴ 菜单:打开表文件,选择?文件/导出?菜单命令,显示?导出?对 话框 ⑵ 命令:COPY TO &新表文件& [&范围&][FIELDS &字段名表&] [FOR &条件&][WHILE &条件&]2. 数据表结构的复制 命令:COPY STRUCTURE TO &新表文件& [FIELDS &字段名表&] 3.5.5复制数据表____3.数据表文件的更名在项目管理器中选择要重命名表的?快捷菜单/重命名?命令,在 ?重命名文件?对话框中输入新的文件名 3.5.6数据表与数组之间的数据交换1.将表的当前记录复制到数组 命令:SCATTER [FIELDS &字段名表&][MEMO] TO &数组名&|MEMVAR 功能:将数据表的当前记录按字段顺序复制到数组或内存变量 ? MEMO表示包括备注型字段的内容;MEMVAR传递到一组内存变量中 例如,USE E:\VFP6\DATA\学生 * 将第1条记录的姓名、性别和系别3个字段复制到数组AA中 SCATTER FIELDS 姓名,性别,系别 TO AA GO 5 * 将第5条记录复制到数组BB中,包括备注型字段的内容 SCATTER TO BB MEMO 3.5.6数据表与数组之间的数据交换2.将数组复制到表的当前记录 命令:GATHER FROM &数组名&|MEMVAR [FIELDS &字段名表&][MEMO] 功能:将数组元素或同名内存变量的值顺序复制到当前记录的指定 字段中 例如:USE E:\VFP6\DATA\学生 * 在表的末尾增加一条空记录 APPEND BLANK * 将数组 AA 中的数据复制到当前的空记录中 GATHER FROM AA FIELDS 姓名,性别,系别 3.6.1数据表排序排序是把数据表中的记录按照某个字段值的大小重新排列,作为排序 依据的字段称为?关键字? 按照关键字的值从小到大的排序称为升序,从大到小的排序称为降序 排序后生成一个新的数据表文件,其结构和数据可以与源文件完全相 同,也可以取自源文件的一部分字段 命令: SORT TO &文件名& [&范围&][FIELDS &字段名表&][FOR &条件&] ON &字段名1&[/A][/D][/C][,&字段名2&[/A][/D][/C]…] [ASCENDING|DESCENDING] ? /A表示升序,/D表示降序,/C表示字母不分大小写。默认为升序 排序 排序结果 数据表 (有序)原数据表 (无序) 3.6.1数据表排序【例3.30】对?学生?表中所有贷款的学生按?系别?的升序排序, 排序后的新表文件名为?贷款学生?: USE E:\VFP6\DATA\学生 SORT TO 贷款学生 ON 系别 FOR 贷款否 【例3.31】将?学生?表按?系别?升序进行排序,系别相同者, 按?学号?降序进行排序,排序后的新表文件名为?各系学生?: USE E:\VFP6\DATA\学生 SORT TO 各系学生 ON 系别,学号/D 【练习】分别显示所有学生中总分为最高和最低同学的姓名和各门 课程的成绩 SORT TO PX ON 总分/D USE PX DISPLAY 姓名,高等数学 GO BOTTOM DISPLAY 姓名,高等数学 3.6.2数据表索引____1.基本概念⑴ 索引是由指向表记录的指针构成的文件,这些指针逻辑上按照索引 关键字的值进行排序 索引文件和表文件分别存储,并且不改变表中记录的物理顺序 原数据表 (无序) 索引 索引文件 (有序).DBF # … 语文 … # .IDX 语文排 结果文件 排列依据 排列顺序 排序范围序索引12 3 4…… … …7763 92 43…… … …12 3 49287 77 66表文件 多个字段 各字段分别 指定范围索引文件 一个表达式 统一顺序 指定条件56……8766……566343 3.6.2数据表索引____1.基本概念描 .IDX 述 关键字数目 限制⑵ 索引的类型(从组织方式分类) 索引类型 独立索引 结构复合索引 非结构复合索引文件名由用户确定, 单关键字表达 100个字 必须明确打开 式 符以内文件名与表文件名相 同,随表自动打开 多关键字表达 240个字 .CDX 文件名由用户确定, 式,称为标识 符以内 随表自动打开 3.6.2数据表索引____1.基本概念⑶ 索引关键字 索引关键字是指建立索引用的字段或字段表达式,可以是表中的单个字 段,也可以是几个字段组成的表达式 ? 索引表达式通常用字符串运算符?+?将几个字段连接起来。若组成 表达式的字段具有不同类型时,则必须使用函数对字段进行类型转换,使其 具有相同的数据类型。一般多字段排列,都将相应的字段转换成C型表达式 例如,STR()函数可将N型数据转换为C型数据,DTOC()函数可以把D型数 据转换为C型数据 3.6.2数据表索引____1.基本概念说 明 创建修改命令 索引个数 仅1个⑷ 索引关键字的类型(按功能分类)索引类型 关键字重复值 主索引仅适用数据库表,可用于在 CREATE TABLE 永久关系中建立参照完整性 ALTER TABLE不允许候选索引 允许,但输出INDEX 可用作主关键字,可用于在 CREATE TABLE 永久关系中建立参照完整性 ALTER TABLE为与以前版本兼容而设置 可作为一对多永久关系中的 ?多方? INDEX 允许多个惟一索引无重复值 允许普通索引 3.6.2数据表索引____2.建立索引◆ 建立独立索引 ⑴ 利用表设计器:选择?索引?选项卡 ⑵ 命令: INDEX ON &索引关键字表达式& TO &索引文件名& [UNIQUE|CANDIDATE][ASCENDING|DESCENDING][FOR &条件&] ? UNIQUE表示惟一索引;CANDIDATE表示候选索引;?无?表示普通索 引 ? ASCENDING表示升序(默认),DESCENDING表示降序例如,为?学生?表按姓名和出生日期建立独立索引文件SY1 USE E:\VFP6\DATA\学生 INDEX ON 姓名+DTOC(出生日期) TO SY1 3.6.2 ⑶ ◇ ◇ ⑷ ◇ ◇数据表索引____2.建立索引独立索引文件的打开 与表文件同时打开:USE &表文件名& INDEX &索引文件名& 打开表文件后再打开:SET INDEX TO &索引文件名& 独立索引文件的关闭 与表文件同时关闭:USE 单独先关闭:SET INDEX TO.DBF # … 语文 … # .IDX 语文12 3 4…… … …7763 92 43…… … …12 3 49287 77 6656……8766……566343 3.6.2数据表索引____2.建立索引◆ 建立复合索引 ⑴ 利用表设计器:选择?索引?选项卡 ⑵ 命令: INDEX ON &索引关键字表达式& TAG &索引标识名& [UNIQUE|CANDIDATE][ASCENDING|DESCENDING][FOR &条件&] ? UNIQUE表示惟一索引;CANDIDATE表示候选索引;?无?表示普通索 引 ? ASCENDING表示升序(默认),DESCENDING表示降序 3.6.2数据表索引____2.建立索引【例3.32】为?学生?表建立结构复合索引,包含学号(候选索引)、 性别(普通索引)、系别与性别(普通索引)、系别与出生日期(普通索引)4 个索引项 USE E:\VFP6\DATA\学生 INDEX ON 学号 TAG 学号 CANDIDATE INDEX ON 性别 TAG 性别 INDEX ON 系别+性别 TAG 系别_性别 INDEX ON 系别+DTOC(出生日期) TAG 系别_生日 USE 3.6.2数据表索引____3.按索引顺序浏览记录一个复合索引文件中可以建立多个索引项,每一项代表了处理记录的 一种逻辑顺序。使用索引之前,应先指定将要使用的索引项 ⑴ 菜单:打开浏览窗口,选择?表/属性?菜单命令,在?工作区属 性?对话框的?索引顺序?框中选择一个索引项,浏览窗口中的记录就会 按照该索引顺序排列 ⑵ 命令:SET ORDER TO [TAG &索引标识名&] 3.6.2数据表索引____3.按索引顺序浏览记录【例3.33】用命令方式分别将?性 别?和?系别_性别?索引项设置为当前 索引,并显示?学生?表的记录,最后 取消索引 CLEAR USE E:\VFP6\DATA\学生 SET ORDER TO TAG 性别 DISPLAY ALL SET ORDER TO TAG 系别_性别 DISPLAY ALL SET ORDER TO TAG DISPLAY ALL 3.6.2数据表索引____应用示例1. 按总分和高等数学成绩建立索引文件SY1.IDX 2. 对XJK.DBF文件按姓名进行索引(索引文件名为XJK.IDX),并分别 用SEEK和FIND命令检索显示第一个姓?李?的同学的信息 3. 对XJK.DBF文件建立以高等数学成绩降序排列的结构复合索引文件 SY2.CDX 4. 对XJK.DBF文件,其记录以高等数学成绩升序排列,高等数学成绩 相同时则按学号升序排列,建立结构复合索引文件SY3.CDX 5. 建立一数据库文件XJK2.DBF,其结构中包含有学号、系别、专业三 个字段,并输入一些记录值,然后将XJK.DBF和XJK2.DBF连接成一个数据库 ZH.DBF文件 6. 将上题的XJK2文件按学号建立索引(索引标记为SNO),以学号为 关联表达式,将XJK和XJK2建立关联并显示 3.6.3数据表查询数据表建立索引后,就可以使用FIND、SEEK等查询命令,快速定位记 录,提高数据库应用系统的运行效率 1.FIND 命令: FIND &字符串&|&数值& 2.SEEK 命令: SEEK &表达式& ? 只有对已建立过索引的数据表才能使用这两条命令 ? 索引文件的关键字必须是要查找的字段 ? 命令执行后将使记录指针指向所匹配的第一条记录,可以使用测试 函数FOUND()判断检索成功。检索成功时,FOUND()返回.T.,EOF()返回.F., RECNO()返回对应记录号;否则,FOUND()返回.F.,EOF()返回.T.,RECNO() 返回末记录号+1 ? 若要继续查找所匹配的下一条记录,可以使用SKIP命令 3.6.3数据表查询【例3.34】对?学生?表按?学号?进行索引检索 USE E:\VFP6\DATA\学生 SET ORDER TO TAG 学号 && 将?学号?索引项设置为当前索 引 FIND
&& 或 SEEK “” 【例3.35】对?学生?表按?性别?及?系别_性别?进行索引检索 USE E:\VFP6\DATA\学生 SET ORDER TO 性别 FIND 女 && 或 SEEK “女” DISPLAY SET ORDER TO TAG 系别_性别 CZ=“计算机 ?+?男? SEEK CZ && 或 FIND &CZ SKIP && 继续查找下一个匹配的记录 3.6.4数据表统计与汇总____1.数据表的统计⑴ 计数(COUNT) COUNT [&范围&][FOR &条件&][WHILE &条件&][TO &内存变量名&] 【例3.36】统计?学生?表中总人数及没有贷款学生的人数 USE E:\VFP6\DATA\学生 COUNT TO ZRS ? “学生总人数为:?,ZRS COUNT FOR !贷款否 TO WDKS ? “没有贷款的学生人数为:?+STR(WDKS,3) 【练习】统计?学生?表中没有贷款学生在总人数中的百分比 ? “没有贷款学生在总人数中的百分比为:?,WDKS/ZRS*100,“%” 3.6.4数据表统计与汇总____1.数据表的统计⑵ 求和(SUM) SUM &算术表达式表& [&范围&][FOR &条件&][WHILE &条件&] [TO &内存变量名表&|ARRAY &数组名&] 【例3.37】统计?成绩?表中学号为??各门课程的总成绩 USE E:\VFP6\DATA\成绩 SUM 成绩 FOR 学号=?? 3.6.4数据表统计与汇总____1.数据表的统计⑶ 求平均值(AVERAGE) AVERAGE &算术表达式表& [&范围&][FOR &条件&][WHILE &条件&] [TO &内存变量名表&|ARRAY &数组名&] 【例3.37】统计?成绩?表中学号为??各门课程的总成绩 USE E:\VFP6\DATA\成绩 AVERAGE 成绩 FOR 学号=?? 【练习】统计成绩大于总平均成绩的成绩数USE E:\VFP6\DATA\成绩 AVERAGE 成绩 TO ZF COUNT FOR 成绩&ZF 3.6.4数据表统计与汇总____2.数据表的分类汇总对数据表中的数值型字段,按照排序或索引关键字值的不同分类, 然后各组分别求和 命令:TOTAL ON &汇总关键字& TO &表文件名& ? 数据表必须事先按?汇总关键字?排序或索引 【例3.39】求每个学生各门课程的总成绩 USE E:\VFP6\DATA\成绩 INDEX ON 学号 TAG 学号 TOTAL ON 学号 TO E:\VFP6\DATA\成绩汇总 USE E:\VFP6\DATA\成绩汇总 LIST USE 3.7建立数据字典数据库文件可以作为一个数据字典来存储和管理有关记录和字段的规 则、缺省值、触发器、表间关系等 数据库表是数据库的一部分,具有自由表所没有的一些属性,在?表 设计器?下部可以设置这 些属性数据库表所 特有的属性 3.7.1设置表的字段属性1. 输入掩码:输入掩码是指定义字段中的值必须遵守的标点、空格 和其他格式要求,以限制或控制用户输入的数据格式,屏蔽非法输入, 从而减少人为的数据输入错误,保证输入的字段数据具有统一的风格, 提高输入的效率 2. 格式:格式实质上就是一种掩码,它决定了字段在浏览窗口、表 单、报表中的显示样式掩码 ! # 含 义 掩码 D L 含 使用系统日期格式 在数值前显示填充的前导零 义 小写字母转换为大写 输入数字、空格和正负号,. 9 A分隔小数点左边的数字串规定小数点的位置 允许数字和正负号 使用系统日期NT X Y只允许输入字母和数字禁止输入字段的前导空格和结尾空格字符 允许输入任何字符 只允许输入逻辑字符 3.7.1设置表的字段属性3. 标题:字段标题将作为该字段在浏览窗口中的列标题,以及表单 表格中的默认标题名称 3.7.1设置表的字段属性4. 字段注释:为字段添加注释,使表更容易被理解 此外,还可以在?表设计器?的?表?选项卡中?表注释?框为整 个数据表添加注释 3.7.2设置表的有效性规则1. 字段级规则 将用户输入的数据与所定义的规则表达式进行比较,如果输入的值不 满足规则要求,系统即拒绝该值,从而控制输入到字段中的数据类型 2. 默认值 在浏览窗口、表单或以编程方式输入数据时,VFP将自动为某个字段 填入默认值,直到输入新值 默认值可以是任何有效的表 达式,但表达式的返回值必须和 该字段的数据类型一致 3.7.2设置表的有效性规则3. 记录级规则 可以控制用户输入到记录中的信息类型,检验输入的整条记录是否符 合要求。字段级有效性规则只对应一个字段,记录级有效性规则通常用来 比较同一辑录中的两个以上字段值,以确保它们遵守在数据库中建立的有 效性规则。记录的有效性规则通常在输入或修改记录时被激活,在删除记 录时一般不起作用 设置是在?表设计器?的?表? 选项卡的?记录有效性?框中完成 3.7.3设置触发器触发器是指对记录进行输入、删除、更新等操作时,系统自动启动的一 个程序,用来完成指定的任务 ⑴ 插入触发器 是在表中插入记录时所触发的检测程序,该程序可以是表达式或自定义 函数。检测结果为真时,接受插入的记录 ⑵ 更新触发器 是在表中修改记录后按回车键时所触发的检测程序。检测结果为真时, 保存修改后的记录;否则,不保存修改的结果,同时还原修改之前的记录值 ⑶ 删除触发器 是在表中删除记录时所激发的检测程序。检测结果为真时,该记录可以 被删除;否则,禁止删除该记录 3.7.4创建永久关系永久关系是数据库表之间的关系,存储在数据库文件中 建立关系的两个表通常具有公共字段或 语义相关的字段,其中包含主关键字段的表 称为父表,包含外部关键字段的表称为子表 1. 建立关系:对主关键字段和外部关 键字段使用相同的索引表达式分别建立索 引;然后打开?数据库设计器?,将父表的 索引拖到子表相匹配的索引上(两表之间显 示一条关系线) 2.编辑关系:选择关系线快捷菜单的 ?编辑关系?命令 3. 删除关系:选择关系线快捷菜单的 ?删除关系?命令 3.7.5设置参照完整性参照完整性是指建立一组规则,当用户插入、更新或删除一个数据表 中的记录时,通过参照引用另一个与之有关系的数据表中的记录,来检查 对当前表的数据操作是否正确 建立了关系的两个数据库表,通过实施参照完整性规则,可以确保: 当父表中没有关联记录时,记录不得添加到子表中;当因改变主表的值而 导致子表中出现孤立记录时,主表的值不能被改变;当主表记录在子表中 有匹配记录时,该主表记录不能被删除 设置方法:打开数据库设计器, 选择?数据库/清理数据库?菜单命 令,再选择?数据库/编辑参照完整 性?菜单命令,在显示的?参照完整 性生成器?对话框中分别定义更新 规则、删除规则和插入规则 3.8.1工作区的选择____1.工作区VFP允许在32767个工作区中打开和操作数据表。要同时使用多个数据 表,必须在不同工作区中分别打开 每个工作区都有一个编号(工作区号),用1、2、3等数字表示,对1~ 10号工作区,还可以用A~J字母表示 ? 用户在某一时刻只能在一个工作区上(即当前工作区)操作 ? 工作区中的记录指针彼此独立,分别指向本工作区数据表的当前 记录。通常,在一个工作区中移动记录指针时不会影响其他工作区的记录 指针 3.8.1工作区的选择____2.选择工作区SELECT &工作区号|别名|0& 功能:选择需要使用的工作区 ? 执行SELECT命令后,最后选择的工作区为当前工作区 ? 0表示自动选择区号最小的空闲区 ? 没有指定工作区时,系统默认使用工作区1 ? &别名&是指代表数据表文件的一个更便于阅读、操作或记忆的名 称。别名可以在数据表打开时指定: USE &表文件名& ALIAS &别名&对当前工作区中的数据表可以直接进行读写等任何操作;而对于其它 工作区中的数据表只能读取该区记录指针指向的当前记录,并且要用&别 名&.&字段名&或&别名&-&&字段名&的格式来指定其它工作区的字段 3.8.1工作区的选择____2.选择工作区【例3.40】在不同工作区打开?学生?表和?成绩?表,并显示记录的 信息SELECT 1 USE E:\VFP6\DATA\学生 ALIAS XS ? RECNO() SELECT 2 USE E:\VFP6\DATA\成绩 ALIAS CJ ? RECNO() SELECT XS DISPLAY 学号,姓名,系别,B-&学号,B-&课程号,B-&成绩 GOTO 5 SELECT B ? RECNO() SELECT A DISPLAY 学号,姓名,系别,B.学号,B.课程号,B.成绩 CLOSE ALL 3.8.2数据表的联接____1.数据表的关联关联也称为逻辑连接,可以使两个数据表的记录指针同步移动。关 联操作仅在两个表之间建立一种逻辑关系,不产生新的数据表 命令:SET RELATION TO &关键字表达式& INTO &工作区&|&别名& ? &关键字表达式&的值必须是相关联的两个数据表共同具有的字段, 并且&别名&表文件必须已经按关键字表达式建立了索引并处于打开状态 ? 两个数据表建立关联后,当前表(父表)的记录指针移动时,被 关联的表(子表)的记录指针也自动指向关键字值相同的记录 ? 当子表具有多个关键字值相同的记录时,指针只指向其中第1条 记录。需要找到关键字值相同的其他记录,可使用命令: SET SKIP TO &别名1&[,&别名2&…] ? 如果要切断父表与子表之间的关联,可使用命令: SET RELATION OFF INTO &工作区&|&别名& ? 命令:SET RELATION TO表示删除当前工作区所有的关联 3.8.2数据表的联接____1.数据表的关联【例3.41】在?学生?表和?成绩?表之间建立关联 SELECT 2 USE E:\VFP6\DATA\成绩 INDEX ON 学号 TAG 学号 SELECT 1 USE E:\VFP6\DATA\学生 SET RELATION TO 学号 INTO B DISPLAY ALL SET SKIP TO B DISPLAY ALL 学号,姓名,系别,B-&学号,B-&课程号,B-&成绩 GO 5 DISPLAY ALL 学号,姓名,系别,B-&学号,B-&课程号,B-&成绩 3.8.2数据表的联接____2.数据表的物理联接物理联接是将两个表文件联接生成一个新的表文件 命令:JOIN WITH &工作区号&|&别名& TO &新表文件名& [FIELDS &字段名表&] FOR &联接条件& ? 执行命令后,当前表文件从第1条记录开始,与被联接表的全部记 录逐个比较,若满足&联接条件&,就把这两条记录联接起来,作为一条记 录存放在新表文件中,否则进行下一条记录的比较。然后,当前表的记录 指针指向下一条记录,重复上述过程,直至全部处理完毕。如果两个表的 记录数分别为M和N,在新表的记录数最多为M×N条 3.8.2数据表的联接____2.数据表的物理联接【例3.42】将?学生?表和?成绩?表联接起来,生成新的数据表 ?学生_成绩?,包含学号、姓名、系别、课程号、成绩等字段 SELECT B USE E:\VFP6\DATA\成绩 SELECT A USE E:\VFP6\DATA\学生 JOIN WITH B TO 学生_成绩 ; FIELDS 学号,姓名,系别,B.课程号,B.成绩 FOR 学号=B.学号 SELECT C USE 学生_成绩 LIST CLOSE ALL 第4 章 查询和视图4.1 查询 4.2 视图 4.1查询查询是数据库管理系统中最常用,也是最重要的功能,它为用户快速、 方便地使用数据库中的数据提供了一种有效的方法 查询和视图是检索和操作数据库的两个基本手段 两者都可以从一个或多个相关联的数据表中提取有用的信息 ◇ 查询可以根据表或视图定义,它不依赖于数据库而独立存在,可 以显示但不能更新由查询检索到的数据(查询结果是只读的) ◇ 视图兼有表和查询的特点,它可以更改数据源中的数据,但不能 独立存在,必须依赖于某一个数据库 4.1.1查询的概念通过查询可以对几个相关联的表或视图中的数据,按指定的条件和内 容进行检索,得到需要的信息并能对原始数据进行某些统计计算 利用查询设计器可以在交互环境下建立查询文件(.QPR),运行该文 件即可获取检索信息。方法是: ⑴ 选择查询的数据源(包括自由表、数据库表和视图) ⑵ 选择要检索的字段 ⑶ 设置查询条件来查找满足用户要求的记录 ⑷ 设置排序或分组来组织查询结果 ⑸ 选择查询去向 ⑹ 运行查询,获得查询结果 4.1.2创建查询____1.启动查询设计器⑴ 项目管理器:选择?查询?数据项,按?新建?按钮,在?新建查 询?对话框中选择?新建查询?命令,打开?查询设计器?及?添加表或 视图?对话框 ⑵ 菜单:选择?文件/新建?菜单命令,在?新建?对话框中选择 ?查询?文件类型,然后按?新建文件?按钮 ⑶ 命令:CREATE QUERY &查询文件名& 4.1.2创建查询____1.启动查询设计器在?添加表或视图?对话框中选定要添加的表或视图后,按?添加? 按钮,可将选定表或视图添加到?查询设计器?中 在?查询设计器?的数据源中显示了所有添加的表和查询,并且显示 了它们之间的永久关系。若没有建立永久关系,会显示?联接条件?对话 框,要求建立表之间的联接 4.1.2创建查询____2.查询设计器的使用?查询设计器?窗口分上下两部分:上部是数据源,下部有字段、联 接、筛选、排序依据、分组依据和杂项6个选项卡,只要根据实际需求对 不同的选项卡进行相应的设置,即可完成查询的设计 用鼠标双击表之间的关系线,将激活?联接条件?对话框,可以编辑 已有的表间关系 4.1.2创建查询____2.查询设计器的使用⑴ 选择输出字段 在?查询设计器?的?字段?选项卡中可以指定查询要输出的字段、 函数或表达式 对?选定字段?列表框中,可以用鼠标拖动的方法来调整字段的输出 顺序,也可以按?移去?按钮,将所选项从?选定字段?列表框中移去 若查询输出的是一个表达式时, 可以在?函数和表达式?框中输入或 在?表达式生成器?中生成一个相应 的表达式 4.1.2创建查询____2.查询设计器的使用⑵ 建立数据表间的联接 当查询是基于多个表时,这些表之间必须是有联系的,系统就是根据 它们之间的联接条件来提取表中相关联的数据信息 数据表间的联接条件可以在?联接?选项卡中指定 4.1.2 ① 类型创建查询____2.查询设计器的使用含 义 只返回两个表中完全(同时)满足联接条件的记录 返回右侧表中所有记录以及左侧表中相匹配的记录 返回左侧表中所有记录以及右侧表中相匹配的记录 返回两个表中的所有记录用于指定联接条件的类型联接类型 内部联接 右联接 左联接 完全联接② 字段名 用于指定一个作为联接条件的父关联字段 ③ 条件 用于指定一个条件运算符,比较联接条件左边与右边的值运算符 Like 含 义 左边值包含于 右边值 运算符 In Between 含 义 左边值必须与右边几个 值中的一个相匹配 左边值包含在右边的两 个值之间IS NULL 左边值是空值④ 值 用于指定一个作为作为联接条件的子关联字段 ⑤ 逻辑 用于指定各联接条件之间的?AND(与)?和?OR(或)?的 关系 4.1.2创建查询____2.查询设计器的使用⑷ 指定查询条件 查询通常都是按某个或某几个条件来进行的,可以在?筛选?选项卡 中建立筛选表达式,以选择满足查询条件的记录 ① 字段名 指定用于筛选条件的字段名 ② 条件 指定比较操作的运算符 ③ 实例 指定查询条件的值 ④ 大小写 指定比较时是否 区分大小写 ⑤ 逻辑 当有多个查询条件 时,用于指定各查询条件之间的 ?AND(与)?和?OR(或)?的关系 4.1.2创建查询____2.查询设计器的使用⑸ 组织查询结果:按某个字段顺序排列查询结果或分组排列 ① 设置数据排序 在?排序依据?选项卡中指定排序的依据 ② 设置分组排序 分组排序对即将查询输出的结果按某字段中相同的 数据来分组,该功能与SUM、COUNT、AVG等统计操作一起使用效果较好 分组排序在?分组依据?选项卡中指定分组的依据 4.1.2创建查询____2.查询设计器的使用⑹ 杂项选择 可以在?杂项?选项卡中选择要输出的记录范围,默认将查询得到的 结果全部输出 4.1.2创建查询____3.选择查询去向默认情况下,查询的结果将现实在浏览窗口中,也可以根据需要选择 其他输出形式。选择时,打开查询设计器,选择?查询/查询去向?菜单命 令,在?查询去向?对话框中选择输出去向 ⑴ 浏览:查询结果输出到浏览窗口(默认) ⑵ 临时表:查询结果存入一个临时的只读数据表中,关闭此数据表时, 查询结果将丢失 ⑶ 表:查询结果存入表文件,可以作为一个自由表使用 ⑷ 图形:查询结果以图形方式输出 ⑸ 屏幕:查询结果输出到主窗口 ⑹ 报表:查询结果输出到一个 报表文件中 ⑺ 标签:查询结果输出到一个 标签文件中 4.1.2创建查询____4.、5.、6.4.保存查询文件 选择?文件/另存为?命令 5.运行查询 查询文件保存了建立查询时的各种设置信息,通过运行查询文件,可 以按指定的查询去向输出查询结果 ⑴ 项目管理器:选定要运行的查询,然后单击?运行?按钮 ⑵ 菜单:选择?查询/运行查询?命令,或按工具栏?!(运行)?按 钮 ⑶ 命令:DO &查询文件名.QPR& 6.修改查询 ⑴ 项目管理器:选中要修改的查询 文件,按?修改?按钮 ⑵ 命令: MODIFY QUERY &查询文件名& 4.1.2创建查询____7.举例【例4.1】对?教学管理?数据库,建立?计算机系成绩.QPR”查询, 输出计算机系学生各门课程的考试成绩,要求包括姓名、课程名、成绩等 信息,并按课程排序,同一门课按成绩降序显示在浏览窗口中 ① 在?项目管理器?中,新建?查询?,选择?学生?、?课程?和 ?成绩?表 ② 在?字段?选项卡中选择输出字段:学生.姓名、课程.课程名、成 绩.成绩 ③ 在?联接?选项卡中设置联接:学生.学号=成绩.学号(内部联接) 和课程.课程名=成绩.课程名(内部联接) ④ 在?筛选?选项卡中设置筛选条件: 学生.系别=?计算机? ⑤ 在?排序依据?选项卡中设置排序条件: 课程.课程名(升序)和成绩.成绩(降序) ⑥ 查询另存为:计算机系成绩.QPR ⑦ 运行 4.1.2创建查询____7.举例【例4.2】建立?平均成绩.QPR”查询,输出所有男生各门课程的平均 成绩,要求包括姓名、平均成绩等信息,并按系别排序,显示在浏览窗口 中 ① 在?项目管理器?中,新建?查询?,选择?学生?和?成绩?表 ② 在?字段?选项卡中选择输出字段:学生.姓名、学生.系别,在 ?函数和表达式:框中输入:?AVG(成绩.成绩) AS 平均成绩?,并添加 到?选定字段?列表框中 ③ 在?联接?选项卡中设置联接:学生.学号=成绩.学号(内部联接) ④ 在?筛选?选项卡中设置筛选条件:学生.性别=?男? ⑤ 在?排序依据?选项卡中设置排序条件: 学生.系别(升序) ⑥ 在?分组依据?选项卡中设置分组字段: 学生.学号 ⑦ 查询另存为:平均成绩.QPR ⑧ 运行 4.1.3查看查询文件利用查询设计器得到的查询文件是一个文本文件,用户可以查看其内 容打开查询设计器,选择?查询/查看SQL”菜单命令,打开一个只读窗口, 在其中显示了一条SQL语句,它包含了用户创建这个查询的所有信息 4.2.1视图的概念视图是VFP提供的一种定制且可更改的数据集合。它兼有?表?和 ?查询?的特点,与查询类似的是,它可以从一个或多个相关联的表中提 取有用信息;与表类似的是,它可以更新其中的信息,并将更新结果永久 保存 利用视图可以将数据暂时从数据库中分离出来成为自由数据,以便在 主系统之外收集和修改数据 通过视图不仅可以从多个表中提取数据,还可以在改变视图数据后, 把更新结果送回到数据源表中。但视图不能以自由表文件的形式单独存在, 它必须依赖于某个数据库,并且只有在打开相关的数据库之后,才能创建 和使用视图。视图是数据库中的一个特有功能 如果要保存检索结果,应当使用查询;如果要提取可更新的数据,应 当使用视图 依据数据来源可以将视图分为两类: ⑴ 本地视图:使用本地表或视图 ⑵ 远程视图:使用ODBC远程数据源 4.2.2创建视图____1.启动视图设计器可以利用视图设计器在交互环境下创建视图 1. 启动视图设计器 ⑴ 项目管理器:选择数据库中的?本地视图?项,按?新建?按钮,在 ?新建本地视图?对话框中选择?新建视图?命令,打开视图设计器窗口 ⑵ 命令:CREATE VIEW ? 执行该命令之前,必须先打开要建立视图的数据库 4.2.2创建视图____2.视图设计器的使用与查询设计器相比,视图设计器中只多了一个?更新条件?选项卡, 其它都相同,两者的使用方式几乎完全一样。不同的是,当需要用视图中 的数据更新源表时,必须通过?更新条件?选项卡设置更新属性 查询与视图的比较特征 查 询 视 图文件属性作为独立文件(.QPR)存储在 不是一个独立的文件,是数据库的 磁盘中,不属于数据库 一部分本地表、其他视图、远程数据源数据来源 本地表、其他视图结果的存 结果可以存储在数据表、图 只能是临时的数据库 储格式 表、报表、标签等文件中 数据引用 不能被引用 更新数据 查询的结构是只读的 可以作为表单、报表、查询或其他 视图的数据源 可以更新数据并回送到数据源表中 4.2.3用视图更新数据通过在?更新条件?选项卡中设置更新属性,可以把对视图数据的修 改回送到数据源表中 【例4.3】在?教学管理?数据库中创建一个本地视图,用于检索并更 新计算机系学生的成绩 ① 在?项目管理器?中,新建一个?本地视图? ② 选择?学生?、?课程?和?成绩?源表;在?视图设计器?的 ?字段?选项卡中选择输出字段:学生.姓名、课程.课程名、成绩.学号、 成绩.成绩;在?联接?、?筛选? 和?排序依据?三个 选项卡中的设置与 查询【例4.1】相同 4.2.3用视图更新数据③ 选择?更新条件?选项卡设置更新属性 ④ 视图另存为:可更新成绩 ⑤ 运行 4.2.3使用视图视图建立之后,就可以象数据表一样使用 视图在使用时,作为临时表在自己的工作区中打开,如果该视图基于 本地表,则系统将同时在另一个工作区中打开源表 视图的操作: ⑴ 使用 USE &视图名& 命令打开视图 ⑵ 使用 USE 命令关闭视图 ⑶ 在?浏览?窗口中显示或修改视图数据 ⑷ 使用SQL语句操作视图 ⑸ 在文本框、 表格控件、表单或 报表中使用视图作 为数据源 第5 章 结构化SQL语言概述 数据定义 数据操纵 数据查询查询语言SQL5.1 5.2 5.3 5.4 5.1SQL语言概述SQL语言是数据库的标准语言,几乎所有的关系数据库管理系统都支持 SQL标准 SQL语言的主要特点是: ⑴ 高度集成化 SQL语言集数据定义、数据操纵、数据查询和数据控制功能于一体 ⑵ 非过程化 SQL是一种非过程化的语言 ⑶ 简洁易学 SQL语言完成数据定义、数据操纵、数据控制和数据查询等核心功能只 用了9个命令动词;而且语法也接近英语自然语法 ⑷ 用法灵活 SQL语言既能够以人机交互方式来使用,也可以嵌入到程序设计语言中 以程序方式使用 5.2数据定义标准SQL的数据定义功能非常广泛,包括数据库、表、视图、存储过程、 规则及索引的定义等 数据定义语言由3个命令组成 ⑴ 定义表:CREATE TABLE ⑵ 修改表结构:ALTER TABLE ⑶ 删除表:DROP TABLE 5.2.1表的定义____格式CREATE TABLE|DBF &表名& [NAME &长表名&][FREE] (&字段名1& &类型&(&宽度&,&小数位数&) [NULL][NOT NULL] [CHECK &字段有效性规则1& [ERROR &错误信息1&]] [DEFAULT &默认值&] [PRIMARY KEY|UNIQUE] && 主索引|候选索引 [REFERENCES &表名2& TAG &标识名1&]] [NOCPTRANS] [&字段名2&…] [,PRIMARY KEY &主关键字& TAG &标识名2& |,UNIQUE &候选关键字& TAG &标识名3&] [,FORGIGN KEY &外部关键字& TAG &标识名4& REFERENCES &表名3& [TAG &标识名5&]] [,CHECK &有效性规则& [ERROR &错误信息2&]])|FROM ARRAY &数组名& 5.2.1表的定义____格式? TABLE是SQL标准的关键词,DBF是FVP的关键词 ? NAME &长表名&指定长表名,最多包括128个字符 ? FREE指定建立一个自由表 ? &字段名1& &类型&(&宽度&,&小数位数&)分别定义字段名、类型、宽度 [NULL][NOT NULL] [CHECK &字段有效性规则1& [ERROR &错误信息1&]] [DEFAULT &默认值&] [PRIMARY KEY|UNIQUE] && 主索引|候选索引 [REFERENCES &表名2& TAG &标识名1&]] [NOCPTRANS] [&字段名2&…] [,PRIMARY KEY &主关键字& TAG &标识名2& |,UNIQUE &候选关键字& TAG &标识名3&] [,FORGIGN KEY &外部关键字& TAG &标识名4& REFERENCES &表名3& [TAG &标识名5&]] 5.2.1表的定义____示例【例5.1】创建数据库?XJGL.DBC”和?学生1?、?成绩1?、?课程1? 三个表 CREAT DATA XJGL CREATE TABLE 学生1 (学号 C(8) PRIMARY KEY,姓名 C(8),性别 C(2) DEFAULT &男&,; 出生日期 D,系别 C(10),贷款否 L,简历 M,照片 G NULL) CREAT TABLE 课程1 (课程号 C(3) PRIMARY KEY,课程名 C(20),学时 N(3),学分 N(2)) CREAT TABLE 成绩1 (学号 C(8),课程号 C(3),成绩 N(5,1) CHECK ; (成绩&=0 and 成绩&=100) ERROR “成绩必须在0-100之 间?,; FOREIGN KEY 学号 TAG 学号 REFERENCES 学生1,; FOREIGN KEY 课程号 TAG 课程号 REFERENCES 课程1) 5.2.2表结构的修改____格式1添加或修改字段 ALTER TABLE &表名& ADD|ALTER &字段名& &类型&(宽度,小数位数) CHECK &字段有效性规则& ERROR &出错信息& PRIMARY KEY|UNIQUE 例如,在?成绩1?表中添加一个字段:平时成绩 N(5) ALTER TABLE 成绩1 ADD 平时成绩 N(5) 例如,将平时成绩字段修改为 N(5,1) ALTER TABLE 成绩1 ALTER 平时成绩 N(5,1) 5.2.2表结构的修改____格式2修改或删除默认值、字段有效性规则 ALTER TABLE &表名& ALTER &字段名& [SET DEFAULT &默认值&] [DROP DEFAULT] [SET CHECK &有效性规则&] [DROP CHECK] 例如,删除?成绩1?表中平时成绩字段的有效性规则: ALTER TABLE 成绩1 ALTER 平时成绩 DROP CHECK 例如,将平时成绩字段的默认值设置为80: ALTER TABLE 成绩1 ALTER 平时成绩 SET DEFAULT 80 5.2.2表结构的修改____格式3删除字段、更改字段名、设置记录有效性规则等 ALTER TABLE &表名& DROP &字段名& && 删除字段 SET CHECK &记录有效性规则& ERROR &出错信息& [DROP CHECK] && 设置或删除记录有效性规则 ADD PRIMARY KEY &复合索引表达式& TAG &索引标识& [DROP PRIMARY KEY] && 设置或删除主复合索引表达式 ADD UNIQUE &复合索引表达式& TAG &索引标识& [DROP UNIQUE TAG &索引标识&] && 设置或删除候选复合索引表达式 [ADD FOREIGN KEY [&外部关键字&] TAG &索引标识2& REFERENCES &表名2& TAG &索引标识3& [DROP FOREIGN KEY TAG &索引标识4& [SAVE]] RENAME COLUMN &原字段名& TO &新字段名& && 更改字段名 [NOVALIDATE] 5.2.2表结构的修改例如,将?学生1?表中的?学号?字段更名为?学生证编号? ALTER TABLE 学生1 RENAME COLUMN 学号 TO 学生证编号 例如,对?学生1?表中的?姓名?和?出生日期?字段建立主索引 ALTER TABLE 学生1 ADD PRIMARY KEY 姓名+DTOC(出生日期) TAG 姓名_生日 5.2.3表的删除格式: DROP TABLE &表名& 例如,删除?学生1?表 DROP TABLE 学生1 5.3数据操纵⑴ 插入记录 格式1:在表的尾部尾添加一条新记录 INSERT INTO &表名& (字段1,字段2,…)VALUES (值1,值2,…) 说明:插入所有字段值时,可省略&字段名表& 例如,向?学生1?表中添加两条记录: INSERT INTO 学生1 VALUES(“”,“张红?,&男&,; {^},?计算机?,.T.,“张红是北京人?,null) INSERT INTO 学生1(学号,姓名) VALUES(&“,&李兰&) 格式2:记录值来自数组或同名的内存变量 INSERT INTO &表文件& FROM ARRAY &数组&|FROM MEMVAR 5.3数据操纵⑵ 删除记录 格式:DELETE FROM &表名& WHERE &条件& 说明:该命令执行的是逻辑删除操作。 例如,将?学生1?表中所有男生的记录逻辑删除: DELETE FOR 学生1 WHERE 性别=&男& ⑶ 更新记录 格式:UPDATE &表名& SET &字段名& = &表达式& WHERE &条件& 例如,将?学生1?表中所有男生的?贷款否?字段改为?.T.” UPDATE 学生1 SET 贷款否=.T. WHERE 性别=&男& 5.4数据查询数据查询是SQL语言的核心,也称作SQL-SELECT命令 使用SQL-SELECT命令,可以对数据源进行各种组合,有效地筛选记 录、管理数据、并对结果排序及指定输出去向等,无论查询多么复杂, 其内容只有一条SELECT语句 SQL-SELECT 命令可以进行多个查询块的嵌套查询,以完成更复杂 的查询任务 5.4数据查询____格式SELECT [DISTINCT] [TOP&数值& [PERCENT]] [&别名1&.]&选项1& AS &列名1&, [&别名2&.]&选项2& AS &列名2&,… FROM &表1& [AS &别名1&],&表2&[AS &别名2&],…… |[[INNER|LEFT|RIGHT|FULL] JOIN &表2& [AS &别名2&] ON &联接条件&] [INTO TABLE &表文件名&]|INTO CURSOR &临时文件名& |TO SCREEN |INTO ARRAY &数组&|TO FILE &文本文件名&[ADDITIVE]|TO PRINT] [WHERE &筛选条件& [AND &联接条件&]] [GROUP BY &分组项&] [HAVING &筛选条件&] [ORDER BY &排序项1&, &排序项2&] [UNION SELECT &命令&] 5.4数据查询____1.基本查询格式:SELECT…FROM…WHERE 例如,从?学生?表中查询所有男生的学号、姓名和出生日期: SELECT 学号,姓名,出生日期 FROM 学生 WHERE 性别=&男& 5.4数据查询____2.带特殊运算符的条件查询在WHERE子句所带的筛选条件表达式中可以使用一些特殊运算符, 如 IN、BETWEEN…AND…、LIKE 例如,查询成绩良好(75~85分)的学生和课程信息: SELECT * FROM 成绩 WHERE 成绩 BETWEEN 75 AND 85 SELECT * FROM 学生 WHERE 系别 IN (&计算机&,&管理&) SELECT * FROM 学生 WHERE 姓名 LIKE &李%& 5.4数据查询____3.排序查询使用ORDER BY子句,可以对查询结果按升序(ASC)或降序(DESC) 排列例如,按课程号输出学生的各科成绩,同一门课按成绩降序排列: SELECT * FROM 成绩 ORDER BY 课程号,成绩 DESC 5.4数据查询____4.计算与分组查询使用GROUP BY子句可以实现分组查询,通常与计算查询(如计数、求和、 求平均值等)结合使用,先按指定的数据项分组,再对各组汇总计算 例如,查询各门课程的平均成绩: SELECT 课程号,AVG(成绩) AS 平均成绩 FROM 成绩 GROUP BY 课程号 例如,查询男女生人数: SELECT 性别,COUNT(性别) AS 男女生人数 FROM 学生 GROUP BY 性别 例如,查询各系人数: SELECT 系别,COUNT(系别) AS 各系人数 FROM 学生 GROUP BY 系别 注意与SELECT 系别,COUNT(系别) AS 各系人数 FROM 学生的区别 例如,查询系上人数多于或等于2人的系别: SELECT 系别,COUNT(系别) AS 各系人数 FROM 学生 GROUP BY 系别 HAVING 各系人数&=2 5.4数据查询____5.多表查询多表查询时,表和表之间必须有联接关系,在WHERE子句中可以指 定表间的联接关系。其格式为: &表名1&.&字段名1& = &表名2&.&字段名2& 或&别名1&.&字段名1& = &别名2&.&字段名2& 例如,查询各门课程的平均成绩,输出课程名和成绩信息: SELECT 课程名,AVG(成绩) AS 平均成绩 FROM 课程 KC.成绩 CJ; WHERE KC.课程号=CJ.课程号 GROUP BY CJ.课程号 例如,查询刘天海的英语成绩,输出姓名、课程名和成绩信息: SELECT 姓名,课程名,成绩; FROM 学生 XS,课程 KC,成绩 CJ; WHERE XS.学号=CJ.学号 and KC.课程号=CJ.课程号; and 姓名=&刘天海& and 课程名=&英语& 5.4数据查询____6.联接查询利用 FROM…JOIN…ON 子句建立两表之间的联接 格式:FROM &表名1& INNER | LEFT | RIGHT | FULL JION &表名2& ON &联接条件& 例如,查询各门课程的平均成绩,要求输出课程名和成绩信息: SELECT 课程名,AVG(成绩) AS 平均成绩 FROM 课程 KC ; INNER JOIN 成绩 CJ ON KC.课程号=CJ.课程号 ; GROUP BY CJ.课程号 例如,查询刘天海的英语成绩,输出姓名、课程名和成绩信息: SELECT 姓名,课程名,成绩; FROM 学生 XS INNER JOIN 课程 KC INNER JOIN 成绩 CJ; ON KC.课程号=CJ.课程号 ON XS.学号=CJ.学号; WHERE 姓名=&刘天海& AND 课程名=&英语& 5.4数据查询____7.嵌套查询在一个SELECT命令的WHERE子句中出现另一个SELECT 命令(即子查询) ? 子查询的结果必须是确定的值 例如,查询李华同学所学课程的课程名和成绩: WHERE子句中同 时包含联接条 SELECT 课程名,成绩 FROM 课程 KC,成绩 CJ; 件和筛选条件 WHERE KC.课程号=CJ.课程号; AND CJ.学号=(SELECT 学号 FROM 学生 WHERE 姓名=&李华&) 或: SELECT 课程名,成绩 FROM 课程 KC,成绩 CJ; 子查询 WHERE KC.课程号=CJ.课程号; AND CJ.学号 in (SELECT 学号 FROM 学生 WHERE 姓名=?李 华?) 或者要显示姓名: SELECT 姓名,课程名,成绩 FROM 课程 KC,成绩 CJ,学生 XS; WHERE KC.课程号=CJ.课程号 AND XS.学号=CJ.学号; AND CJ.学号=(SELECT 学号 FROM 学生 WHERE 姓名=&李华&) 5.4数据查询____8.查询输出查询结果默认显示在浏览窗口中,也可以对输出重定向 格式: INTO ARRAY &数组& | INTO CURSOR &临时表& && 保存到内存 |INTO DBF &表文件& |INTO TABLE &表文件& && 保存到表文件 |TO FILE &文本文件& ADDITIVE && 保存到文本文件 |TO PRINT |TO SCREEN && 打印 例如,查询各门课程的平均成绩,结果保存在?平均成绩?表中 SELECT 课程号,AVG(成绩) AS 平均成绩 FROM 成绩; GROUP BY 课程号 INTO TABLE 平均成绩 SELE * FROM 平均成绩 注意: 如果是临时表,在数据工作期中可以浏览,也可以SELE命令浏览 第 章6.1 6.2 6.3 6.4 6.56 结构化程序设计程序的建立和执行 程序设计常用命令 程序的基本控制结构 过程与自定义函数 程序的调试 6.1.1基本概念1.程序 能够完成特定任务的命令序列,存储在命令文件(.

我要回帖

更多关于 四舍五入等于一个亿 的文章

 

随机推荐