程序设计教程(9).ppt_第1页
程序设计教程(9).ppt_第2页
程序设计教程(9).ppt_第3页
程序设计教程(9).ppt_第4页
程序设计教程(9).ppt_第5页
已阅读5页,还剩132页未读 继续免费阅读

下载本文档

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

文档简介

1、20.7.27,1,Visual FoxPro 程序设计教程,20.7.27,2,目 录,第一章 数据库基础知识 第二章 VFP系统概述 第三章 VFP基础知识 第四章 数据库、表的基本操作 第五章 数据查询与视图 第六章 结构化查询语言 SQL 第七章 程序设计基础,20.7.27,3,第八章 面向对象的程序设计 第九章 菜单设计 第十章 报表和标签设计 第十一章 应用系统开发简介 参考教材 : 二级教程Visual FoxPro 程序设计 教育部考试中心 编 Visual FoxPro 程序设计 谢 川 主编 其它有关 Visual FoxPro 的教材、书籍。,20.7.27,4,第 六

2、 章 关系数据库结构化查询语言SQL,20.7.27,5,6.1 SQL语言概述 6.2 SQL数据查询功能 6.3 SQL数据操纵功能 6.4 SQL数据定义功能,目 录,20.7.27,6,SQL是Structured Query Language(结构化查询语言)的缩写,是一种用于关系数据库操作的标准语言。 SQL语言包括了对关系数据库的查询、操纵、定义、控制和管理等功能,它是一个综合的、通用的、功能极强的关系数据库语言。,6.1 SQL语言概述,20.7.27,7,SQL语言特点, SQL是一种一体化的语言。它包括了数据定义、数据查询、数据操纵和数据控制等方面的功能. SQL是一种高度

3、非过程化的语言 SQL语言非常简洁 ,只有为数不多的几条命令(P137 表6-1 SQL语言命令分类 ) SQL是关系数据库的通用语言 SQL语句有交互式和嵌入式两种使用方式,20.7.27,8,Select语句的语法结构如下: Select All | Distinct Top Nexpr Percent Alias. Select_Item As Column_Name , Alias. Select_Item As Column_Name . From DatabaseName! Table As Local_Alias Inner | Left Outer | Right Outer

4、| Full Outer Join DatabaseName!Table As Local_Alias On JoinCondition Where Joincondition And Joincondition . And | Or Filtercondition And | Or Filtercondition . Group By Groupcolumn , Groupcolumn . Having Filtercondition Order By Order_Item Asc | Desc , Order_Item Asc | Desc . Into Destination | To

5、File Filename Additive | To Printer Prompt | To Screen Union All Selectcommand,6.2 SQL数据查询功能,20.7.27,9,关于Select语句的说明, Select子句说明要查询的数据项(Select_Item) From子句说明查询数据的来源,是必须与Select子句联合使用的子句。 Where子句通过设置条件来选择用户所需要的记录行 Group By子句对查询结果进行分组 Having子句完成对分组的选择 Order By子句设置查询结果中记录的排列顺序 Into子句是Visual Foxpro的SQL-S

6、elect语句特有的选项,用来确定查询结果的输出去向 Union子句功能是将两个Select语句的执行结果进行并运算,20.7.27,10,6.2.1 基本查询,最简单的查询语句只包含Select、From子句,或者还有Where子句,且数据只来自一个表,这类查询称为基本查询。 例6.1 查询人事管理数据库bm表的所有数据 Select * From bm 例6.2查询zgqk表中zgbh、xm、zc、jbgz字段的值。 Select zgbh, xm, zc, jbgz , 元 RMB; From zgqk,20.7.27,11,例6.3 查询zgqk表中zc字段为“教授”或“副教授”的职工

7、的zgbh、xm、zc、jbgz字段的值。 Select zgbh, xm, zc, jbgz ; From zgqk ; Where 教授 $ zc SQL语句书写说明: 语句涉及两个以上表的数据时,共有字段名前面必须冠以用“.”分隔的表名作为前缀,例如zgqk.zgbh。 语句需要分成几行时,除最末行外,其它行末尾加分号。,20.7.27,12,6.2.2 连接查询,连接查询是一种基于多个关系的查询,也就是说查询的数据和条件涉及到两个或两个以上的表。 1简单的连接查询 例6.4 在人事管理数据库中查询基本工资(jbgz)多于2000元的职工的xm、zc、jbgz和jcgz。 方法1: Se

8、lect xm, zc, jbgz, jcgz ; From zgqk, gz ; Where zgqk.zgbh=gz.zgbh And jbgz=2000,20.7.27,13,方法2: Select xm, zc, jbgz, jcgz ; From zgqk ; Join gz On zgqk.zgbh=gz.zgbh ; Where jbgz=2000 例6.5 查询所有科研成果的作者、职称、成果名称。 Select xm, zc, cgmc ; From kyqk, zgqk; Where kyqk.zgbh=zgqk.zgbh,20.7.27,14,2多个表的连接查询 如果查询的

9、数据涉及2个以上的表,就要用到多个表之间的连接查询,这种查询仍然可以使用Join短语和Where子句来表示连接条件。 例6.6 查询所有科研成果的作者姓名、所在部门、职称、成果名称。在这个查询中,数据涉及zgqk、bm、kyqk三个表,可以下面两种方式实现: 方法1:Select xm, zc, bmmc, cgmc ; From zgqk; Join bm On zgqk.bmbh=bm.bmbh ; Join kyqk On zgqk.zgbh=kyqk.zgbh,20.7.27,15,方法2:Select xm, zc, bmmc, cgmc ; From zgqk, bm, kyqk;

10、 Where zgqk.bmbh=bm.bmbh; And zgqk.zgbh=kyqk.zgbh,20.7.27,16,3超连接查询 左连接 在进行连接运算时,首先将满足连接条件的所有元组放在结果关系中,同时将第一个表(或称Join左边的表)中不满足连接条件的元组也放入结果关系中,这些元组对应第二个表(或称Join右边的表)的属性值为空值。 右连接 在进行连接运算时,首先将满足连接条件的所有元组放在结果关系中,同时将第二个表(或称Join右边的表)中不满足连接条件的元组也放入结果关系中,这些元组对应第一个表(或称Join左边的表)的属性值为空值。,20.7.27,17, 全连接 在进行连接运

11、算时,首先将满足连接条件的所有元组放在结果关系中,同时将两个表中不满足连接条件的元组也放入结果关系中,这些元组对应另一个表的属性值为空值。 连接查询的SQL Select语句的格式如下: Select From Table Inner | Left | Right | Full Outer Join Table On Where 其中,Left、Right、Full分别代表左连接、右连接和全连接,保留字Outer只能与Left、Right、Full连用,使用与否功能相同,Left、Right、Full三种连接方式也称为外连接。,20.7.27,18,例6.7 查询所有人的科研成果。 Selec

12、t xm, zc, cgmc From zgqk Left Join kyqk On zgqk.zgbh=kyqk.zgbh 4自连接查询与别名 SQL不仅可以对多个关系进行连接操作,也可以将一个关系与其自身进行连接,这种连接称为自连接。在进行自连接查询时,一般要为表定义别名,所谓别名就是在From子句中,为表定义一个另外的名字,格式如下: ,20.7.27,19,例6.8 查询与姓名为“张力方”的职工同一部门的人。 Select a.xm From zgqk a, zgqk b ; Where b.xm=张力方 And a.bmbh=b.bmbh 在这个例子中,表zgqk通过定义别名形成了两

13、个逻辑关系a和b,两个关系的连接实现了查询要求。 有时为了简化SQL语句的书写,也通过定义别名的方法,使较长的表名可以用简短的别名来替代。,20.7.27,20,6.2.3 子查询,子查询是嵌入到另外一个SQL Select语句中的查询语句。在很多情况下,一个查询的Where条件子句中,需要用到另一个查询的结果,后一个查询就是子查询,或称为嵌套查询。 当查询语句中包含子查询时,先执行子查询,然后根据子查询返回的条件再执行主查询。子查询的结果用于处理主查询的Where子句中的表达式。,20.7.27,21,1子查询中的运算符 子查询的结果一般是一个关系,在Where子句中,常常对子查询结果进行集

14、合运算,如In、Any(Some)、All、Union、Exists。这些运算符的功能: In测试是否在集合中。 Any和Some与In功能近似,检测是否是集合中的某一个值。在Visual Foxpro中,Any、Some及All一般仅用于子查询得到的集合。 All子查询结果关系中的所有行都使运算为真时,结果才为真。 Union将两个查询的结果关系进行集合并运算。 Exists判断子查询有无结果返回。,20.7.27,22,子查询可以理解为嵌套查询.子查询是一个SELECT语句.1. 表达式的值与子查询返回的单一值做比较语法: 表达式 comparisionANY|ALL|SOME(子查询)说

15、明:ANY和SOME谓词是同义词,必须与比较运算符( =, , , =)一起使用.返回一个布尔值True或False。ANY的意思是,表达式与子查询返回的一系列的值逐一比较,只要其中的一次比较产生True结果,ANY测试的返回 True值(既WHERE子句的结果),对应于该表达式的当前记录将进入主查询的结果中。ALL测试则要求表达式与子查询返回的一系列的值的比较都产生True结果,才返回True值。例:主查询返回单价比任何一个折扣大于等于25%的产品的单价要高的所有产品。SELECT * FROM ProductsWHERE UnitPriceANY(SELECT UnitPrice FROM

16、 OrderDetails WHERE Discount0.25),20.7.27,23,2. 检查表达式的值是否匹配子查询返回的一组值的某个值。 语法:NOT IN (子查询)例:返回库存价值大于等于1000的产品.SELECT ProductName FROM ProductsWHERE ProductID IN(SELECT PrdoctID FROM OrderDetailsWHERE UnitPrice*Quantity= 1000),20.7.27,24,例6.9 将例题6.3用集合运算实现 Select zgbh, xm, zc, jbgz ; From zgqk; Where

17、zc In (“教授”, “副教授”) 例 6.10 查询有基本工资大于2000的职工的部门名称。 Select bmmc 部门名称; From bm ; Where bmbh=Any (Select bmbh From zgqk ; Where jbgz=2000),20.7.27,25,Select Sname, Sse; from student; wher Sdept in (IS, MA, CS) 查询其他系中比信息系某一学生年龄小的学生的姓名和年龄。 Sele Sname, Sage from stu wher Sageang; (sele Sage from stu wher S

18、dept =IS); AND SdeptIS,20.7.27,26,2子查询必须遵循的规则: 子查询必须用括号括起来。 子查询一般在Select子句中只能有一个列。 返回多行的子查询可以和多值操作符一起使用,例如In操作符。 Between操作符不能和子查询一起使用,却可以用于子查询中。 在Visual Foxpro中,子查询嵌套层数不能超过2层。,20.7.27,27,例6.11 查询没有职称为“教授”的职工的部门名称。 Select bmmc ; From bm ; Where bmbh !=All (Select bmbh From zgqk Where zc=教授) 它等价于: Sel

19、ect bmmc ; From bm ; Where bmbh Not In (Select bmbh From zgqk Where ZC=教授),20.7.27,28,3检测子查询是否返回任何记录语法:NOT EXISTS (子查询)例:用EXISTS检索英国的客户SELECT CompanyName, ContactNameFROM OrdersWHERE EXISTS(SELECT *FROMCustomersWHERECountry = UK ANDCustomers.CustomerID= Orders.CustomerID),20.7.27,29,例6.13 查询有科研成果的职工

20、姓名(有多项成果时,仅列出一次)。 Select xm From zgqk ; Where Exists (Select zgbh From kyqk ; Where zgbh=zgqk.zgbh ),20.7.27,30,联合查询UNION运算可以把多个查询的结果合并到一个结果集里显示.UNION运算的一般语法:表查询1 UNION ALL查询2 UNION 例:返回巴西所有供给商和客户的名字和城市SELECT CompanyName, CityFROMSuppliersWHERE Country = BrazilUNIONSELECT CompanyName, CityFROMCustom

21、ersWHERE Country = Brazil,20.7.27,31,注:缺省的情况下,UNION子句不返回重复的记录.如果想显示所有记录,可以加ALL选项UNION运算要求查询具有相同数目的字段.但是,字段数据类型不必相同.每一个查询参数中可以使用GROUP BY 子句 或 HAVING 子句进行分组.要想以指定的顺序来显示返回的数据,可以在最后一个查询的尾部使用OREER BY子句.,20.7.27,32,例6.12 查询职称为“教授”或者有科研成果的职工的姓名。 在这个查询中,我们可以使用集合并运算,首先查询职称为“教授”的职工姓名,再查询有科研成果的职工姓名,将两者进行并运算。 S

22、elect xm From zgqk ; Where zc=“教授” ; Union ; Select xm From zgqk ; Where zgbh In (Select zgbh From kyqk),20.7.27,33,6.2.4 SQL语句中的运算符,运算符是保留字或字符,主要用于SQL语句的Where子句中,用来执行比较和数学运算等操作,以便确定条件和建立多个条件之间的连接,SQL中使用的主要运算符包括: 1比较运算符:,!,=, 2逻辑运算符:And,Or,Not 3数学运算符:,*,/ 4集合运算符:In,Any(Some),All,Union、Exists 5其他运算符:

23、Between And ,Like,Is Null,Is Not Null,20.7.27,34,第5类运算符的使用方法: Is Not Null:测试字段值是否为Null(空),Null可以与任何类型的数据匹配。 Between And :判断字段值是否在指定的区间内。 Like:判断字段值是否与某个模式匹配。可以使用通配符“%”和“_”(下划线),“%”代表多个字符,“_”代表一个字符。,20.7.27,35,例6.14 查询学历字段为空值的职工姓名 Select xm From zgqk Where xl Is Null 例6.15 查询出生日期在70年代的职工姓名 Select xm

24、From zgqk ; Where csrq Between 1970/01/01 ; And 1979/12/31 例6.14 查询学历为大学或大专的职工姓名 Select xm From zgqk; where xl Like “大%”,20.7.27,36,查询缺少成绩的学生的学号和相应课程号。 Sele Sno, Cno from sc wher Grade IS NULL Sele Sname , Sdept, Sage; from student; wher Sage between 20 and 30 Sele Sname, Sno, Ssex from student wher

25、 Sname LIKE 刘% 或_ _阳% 若LIKE后面的匹配串中不包含通配符,则可以用“=”取代LIKE谓词,用“!=”或“”取代NOT LIKE。,20.7.27,37,6.2.5 查询统计数据,SQL不仅有一般的检索功能,还可以进行计算方式的检索。SQL提供了多种统计函数,用来累加、合计和显示数据极限值 1简单的计算查询 统计函数用于在SQL语句中实现计算累加、总和和平均值等统计信息,完成这些功能的函数包括Count()、Sum()、Max()、Min()、Avg()。,20.7.27,38, Count函数 格式:Count(*| Distinct) 功能:统计行数或指定字段不为Nu

26、ll的数量。在查询中使用Count函数将返回一个数值。 说明: 当Count函数使用Distinct 选项时,只有那些指定字段不重复的行才被计算在内。如果没有Distinct,重复的行也被计算在内。 Count函数中使用星号(*)选项时,表示统计表中记录的总行数。 Distinct不能用于Count(*),而只能用于Count()。,20.7.27,39,例6.15 查询计算机系的职工数。 Select Count(*) From zgqk; Where bmbh= (Select bmbh From bm; Where bmmc=计算机) 例6.16 查询有科研成果的职工数, 有多项成果的只

27、统计一次。 Select Count(Distinct zgbh) ; From kyqk,20.7.27,40, Sum函数 格式:Sum(Distinct) 功能:返回一组数据行中指定字段的值的总和。 说明: Sum函数可以使用Distinct选项,这时只有指定字段数据不重复的行才被计算在总和内,由于一些数据行被忽略,总和可能不正确。 使用Sum函数时,指定字段的值必须是数值类型。Sum函数不能用于数值类型以外的数据类型,比如字符类型或日期类型。 例6.17 查询计算机系的职工的基本工资总和。 Select Sum(jbgz) From zgqk; Where bmbh=(Select b

28、mbh From bm ; Where bmmc=计算机),20.7.27,41, Avg函数 格式:Avg(Distinct) 功能:Avg函数用于返回一组数据行中指定字段的平均值。 说明: Avg函数使用Distinct选项时,只有指定字段数据不重复的行才被计算在平均值内。 使用Avg函数时,指定字段必须是数值类型。,20.7.27,42, Min和Max函数 格式:Min() Max() 功能: Min函数用于返回一组数据行中指定字段的最小值, 而Max函数用于返回一组数据行中指定字段的最大值 说明:使用Min和Max函数时,系统会忽略那些Null值。,20.7.27,43,例6.18

29、查询全部职工中的基本工资最大、最小值。 Select Min(jbgz) 最低工资,; Max(jbgz) 最高工资; From zgqk 例6.19 查询全部职工中的基本工资最大、最小值及其姓名、职称 Select xm, zc, jbgz From zgqk ; Where jbgz=(Select Max(jbgz) From zgqk) ; Or jbgz=(Select Min(jbgz) From zgqk),20.7.27,44,2分组与计算查询 除对整个表进行统计计算外,我们还常常用到分组统计,比如,按部门统计人数、平均工资,或按职称的不同统计科研成果数量等。分组查询可以通过带

30、有Group By子句的Select语句实现。 格式:Group By , Having 其中、是依据分组的字段名。多个字段名可以形成多级分组,即在大组下面再分小组。Having子句的作用是对分组进行筛选,只对符合条件的分组进行统计查询。 说明:Having子句只能与Group By子句连用,不能单独使用, 且只能放在Group By子句之后。,20.7.27,45,例6.20 查询每个部门中职工基本工资的最大、最小值,并显示部门编号。分组字段为bmbh(部门编号)。 Select bmbh 部门编号, Min(jbgz) 最低工资,; Max(jbgz) 最高工资 ; From zgqk G

31、roup By bmbh 例6.21查询每个部门中职工的人数,并显示部门名称。分组字段为zgqk表中的bmbh字段,由于涉及到bm表中的部门名称,还需要与bm表进行连接。 Select bmmc 部门, Count(zgqk.zgbh) 人数; From zgqk, bm ; Group By zgqk.bmbh ; Where bm.bmbh=zgqk.bmbh,20.7.27,46,例6.22 查询职工的人数超过4人的部门,并显示部门名称。 Select bmmc 部门, Count(zgqk.zgbh) 人数; From zgqk, bm ; Where bm.bmbh=zgqk.bmb

32、h ; Group By zgqk.bmbh; Having Count(zgqk.zgbh)=4,20.7.27,47,6.2.6 对查询结果排序,在SQL Select语句中,能够使用排序子句Order By将查询结果按照某种顺序输出。 格式:Order By Asc | Desc ,Asc | Desc 说明:在Order By子句中选择Asc或省略时,按指定字段的升序排序,选Desc时按降序排序,是排序的主关键字,是第二关键字(主关键字值相同时,按第二关键字排序),之后是第三关键字、第四。,20.7.27,48,例6.23 按照基本工资升序显示zgqk表中的姓名、职称、基本工资。 Se

33、lect xm, zc, jbgz ; From zgqk ; Order By jbgz 例6.24 先按部门升序,再按基本工资降序显示zgqk表中的姓名、部门编号、职称、基本工资。 Select xm, bmbh, zc, jbgz ; From zgqk ; Order By bmbh, jbgz Desc,20.7.27,49,Order By子句使用说明: Order By是对最终的查询结果进行排序,不能在子查询中使用该子句。 排序是查询结果输出前的最后一步,因此Order By子句一般放在Select语句的末尾。 Visual Foxpro允许在使用Order By子句时,使用To

34、p nExpr子句,用来显示查询结果的前面几项。,20.7.27,50,6.2.7 查询结果的输出去向, Into Array Into Cursor Into Table To File To Printer prompt 省略查询结果去向说明时,查询结果显示在一个浏览窗口 例6.25 查询工资表的数据,分别存放到数组和临时表中。 Select * From gz Into Array x Select * From gz Into Cursor lsb,20.7.27,51,6.3 SQL数据操纵功能,数据操纵语句(DML)是SQL的一部分,它允许数据库用户在关系型数据库中改变数据。通过使

35、用DML,用户可以为表添加新的数据、修改已存在的数据和从表中删除数据。在DML命令中也能执行简单的数据库查询。 三种基本的DML命令: Insert Update Delete,20.7.27,52,6.3.1 插入数据,Visual Foxpro支持两种SQL插入命令的格式,第一种格式是标准格式,第二种格式是Visual Foxpro的特有格式。 格式1:Insert Into (, ) Values(, ) 格式2:Insert Into From Array ,20.7.27,53,例6.26 向bm表插入一条新记录,为所有字段赋值。 Insert Into bm ; Values(10

36、9, 法律) 例6.27 向zgqk表插入一条新记录,只为字段zgbh, xm, xb, zc赋值 Insert Into zgqk ; (zgbh, xm, xb, zc, csrq) ; Values(“199009”, “和悦”,; 女, 助教, 1982-01-08),20.7.27,54,例6.28 创建一个新表,结构与zgqk相同,其中包括职称为教授的职工记录。 Select * From zgqk Where zc=教授 Into Table zg 将职称不是教授的职工记录存放到数组aa中。 Select * From zgqk Where zc!= 教授 Into Array

37、aa 将数组中的数据插入到表zg中。 Insert Into zg From Array aa,20.7.27,55,6.3.2 更新数据,格式: Update Set=, ; =, ; Where 这里,指定了要更新的表,、 指出了要更新的字段,而Where子句选择出要更新的记录行。 注意:当使用Update语句时,如果没有Where子句设定条件的话,将更新表中所有的数据行。,20.7.27,56,例6.28 计算gz表中每个职工的应发工资和扣款。 Update gz ; Set yfgz = jcgz + zwgz + zjgz + fljj,; kk = sdf + mqf 例6.29

38、将zgqk表中职称为“教授”和“副教授”职工的基本工资增加10% Update zgqk Set jbgz=jbgz*1.1 ; Where zc Like %教授,20.7.27,57,6.3.3删除数据,Delete命令用于从表中删除整行的数据,Delete命令在FoxPro 中是一种逻辑删除, 要物理删除还要使用命令Pack。 要从表中删除一条单独的记录或是选定的多条记录,Delete语句的格式为: Delete From Where 例6.30 删除bm表中部门名称为Null的记录。 Delete From bm Where bmmc Is Null,20.7.27,58,6.4 SQ

39、L数据定义功能,SQL数据定义功能包括创建数据库、创建表、修改表、删除表,用于数据定义的命令包括: Create Drop Alter。,20.7.27,59,6.4.1 数据库和表的定义,1数据库定义 格式:Create Database 功能:创建一个数据库。 2表的定义 SQL语言提供的定义表的命令是Create Table。在使用这个命令之前,首先要设计好表结构的各种细节,包括: 表名; 各列(字段)的名称、数据类型、宽度; 哪(几)列将组成表的主键; 表中的哪些列必须提供数据;,20.7.27,60,创建表的语句格式如下: Create Table | Dbf Tablename1

40、Name LongTableName Free (Fieldname1 FieldType (nFieldWidth , nPrecision) Null | Not Null Check lExpression1 Error cMessageText1 Default eExpression1 Primary Key | Unique References TableName2 Tag TagName1 , FieldName2 . , Primary Key eExpression2 Tag TagName2 |, Unique eExpression3 Tag TagName3 , Fo

41、reign Key eExpression4 Tag TagName4 Nodup References TableName3 Tag TagName5 , Check lExpression2 Error cMessageText2 ) | From Array ArrayName,20.7.27,61,关于Create Table命令说明如下: 当前有打开的数据库时,表建立在此数据库中。 命令关键字Create Table 与Create DBF功能相同。 Name LongTableName:为所创建的表定义长表名,只有当前有打开的数据库时,才能使用此选项。 Free:创建为自由表。 F

42、REE isnt required if a database isnt open FieldName1 FieldType (nFieldWidth , nPrecision):4个选项依次分别定义字段名、字段类型,数值型和字符型字段的宽度,数值型字段的小数位宽度。 Null | Not Null:定义本字段是否可以为空。,20.7.27,62, Check lExpression1 Error cMessageText1: 定义本字段的有效性规则和出错时的提示信息字符串。 Default eExpression1:定义字段的默认值。 Primary Key:将本字段创建为主索引字段。 Un

43、ique:将本字段创建为侯选索引字段。 References TableName2 Tag TagName1:说明本表与之建立永久联系的父表及父表的索引名。 Foreign Key:创建一个外部索引(非主索引),并与一个父表建立关联。 From Array ArrayName:由一个数组创建表,数组中存放了有关表的每个字段的名称、类型、宽度、小数宽度等信息。,20.7.27,63,例6.31 表结构为:student(sno, sname, sex, birthday, dno),用Create Table命令创建此表。 Create Table student; (sno N (6), sn

44、ame C (6), ; sex C(2), birthday D, dno C(3) 如果我们要在创建表时同时定义主索引、有效性规则等,语句可以写成下面的形式: Create Table student; (sno N(6) Primary Key Not Null, ; sname C(6), ; sex C(2) Check In (“男”,“女”) Error “错误”,; birthday D, dno C(3),20.7.27,64,* Create a customer table and relate it to the salesman table. CREATE TABLE

45、 customer ; (SalesID c(6), ; CustId i PRIMARY KEY, ; CustName c(20) UNIQUE, ; SalesBranch c(3), ; FOREIGN KEY SalesId TAG SalesId REFERENCES salesman),20.7.27,65,CREATE TABLE orders ; (OrderId i PRIMARY KEY, ; CustId i REFERENCES customer TAG CustId, ; OrderAmt y(4), ; OrderQty i ; DEFAULT 10 ; CHEC

46、K (OrderQty 9) ; ERROR Order Quantity must be at least 10, ; DiscPercent n(6,2) NULL ; DEFAULT .NULL., ; CHECK (OrderAmt 0) ERROR Order Amount Must be 0 ),20.7.27,66,6.4.2 表的修改,Alter Table命令用于修改表,可以增添字段、删除字段、改变字段的定义、增添或删除约束。 Alter Table命令有3种格式。 格式1:Alter Table TableName1 Add | Alter Column FieldName

47、1 FieldType (nFieldWidth , nPrecision) Null | Not Null Check lExpression1 Error cMessagetext1 Default eExpression1 Primary Key | Unique References TableName2 Tag TagName1 功能:这种格式用来添加字段或修改字段的参数 。可以修改字段的类型、宽度、有效性规则等,但不能修改字段名,不能删除字段及已定义的字段有效性规则。不管是否修改字段类型,必须将字段名和类型一同在命令中列出。,20.7.27,67,例6.35 在例6.31创建的表S

48、tudent中加入一个新字段grade n(3)。 Alter Table student ; Add grade n(3) Check grade=0 And grade=100 例6.36 将例6.31创建的表Student中的字段sname宽度改为10。 Alter Table student Alter sname c(10),20.7.27,68,格式2:Alter Table TableName1 Alter Column FieldName2 Null | Not Null Set Default eExpression2 Set Check lExpression2 Error

49、 cMessageText2 Drop Default Drop Check 这种格式主要用于定义、修改和删除字段的有效性规则和默认值定义。,20.7.27,69,例6.37 将表Student中的字段sex 宽度改为1,并修改其有效性规则。 Alter Table student Alter sex c(1) Set Check sex=F or sex=M 例6.38 删除表Student中的字段sex的有效性规则。 Alter Table student Alter sex Drop check,20.7.27,70,格式3:Alter Table TableName1 Drop Col

50、umn FieldName3 Set Check lExpression3 Error cMessagetext3 Drop Check Add Primary Key eExpression3 Tag TagName2 For lExpression4 Drop Primary Key Add Unique eExpression4 Tag TagName3 For lExpression5 Drop Unique Tag TagName4 Add Foreign Key eExpression5 Tag TagName4 For lExpression6 References TableN

51、ame2 Tag TagName5 Drop Foreign Key Tag TagName6 Save Rename Column FieldName4 To FieldName5,20.7.27,71,这种格式可以删除字段(Drop Column),可以为字段改名(Rename Column FieldName4 To FieldName5),还可以增加或删除表一级的有效性规则、主索引等。 例6.39 删除表Student中的字段grade。 Alter Table student Drop grade 例6.40 将表Student中的字段dno改名为dn。 Alter Table st

52、udent Rename Column dno to dn,20.7.27,72,6.4.3 表的删除,删除表的命令格式为: Drop Table table_name 例6.41 将表Student删除 Drop Table Student 说明:Drop Table命令直接从磁盘删除表。如果要删除的表是数据库表,应当在数据库打开的情况下删除该表,否则,只删除了表的磁盘文件,但记录在数据库 .dbc文件中的信息没有删除,下一次使用数据库文件时会出错。,20.7.27,73,第七章 程序设计基础,20.7.27,74,目 录,7.1 结构化程序设计概述 7.2 程序文件的建立、编辑与执行 7.

53、3 程序设计辅助命令 7.4 程序的基本控制结构 7.5 子程序、过程文件与自定义函数 7.6 程序调试 7.7 结构化程序设计举例,20.7.27,75,7.1 结构化程序设计概述,Visual Foxpro系统的3种操作方式 菜单方式 命令方式 程序方式,20.7.27,76,7.1.1 程序的概念,程序就是计算机能够分析执行的命令集合。 程序设计就是根据问题的要求,按一定的逻辑关系,将一系列的命令组合在一起,形成一个命令序列的过程。 执行程序就是依次执行其中的每一条命令,直至全部命令执行完毕。 程序通常以文件形式存放在磁盘上,在Visual FoxPro中,程序文件也称为命令文件,其扩展

54、名为 .prg。 程序文件一旦建立,可以多次重复执行,20.7.27,77,7.1.2 程序设计和算法,1算法的概念 算法是解决问题的方法和步骤 2算法的表示 算法可以有多种表示方法,常用的有自然语言法和流程图法。,图7-1 流程图常用图形符号,20.7.27,78,7.2 程序文件的建立、编辑与执行,7.2.1 程序文件的建立与编辑 程序文件是扩展名为 .prg的纯文本文件。建立和编辑程序文件可以使用外部编辑器或者内部编辑器 。 外部编辑器是指任何可以编辑纯文本文件的字处理软件(如记事本、写字板、Word等),内部编辑器是指Visual FoxPro本身提供的文本编辑器。,20.7.27,7

55、9,采用内部编辑器建立程序文件的方法如下: 1菜单方式 单击“文件”下拉菜单中的“新建”命令,或者单击常用工具栏上的“新建”按钮;在“新建”对话框中选择文件类型为“程序”,然后单击“新建文件”按钮,打开编辑窗口。 单击“文件”下拉菜单中的“打开”命令,在“打开”对话框中选择已经建立的程序文件,可将其打开并进行编辑。,20.7.27,80,2命令方式 格式1:Modify Command 格式2:Modify File 功能:建立或编辑程序文件。 说明: 程序文件名必须以字母开头,由字母、数字、下划线组成,其默认的扩展名为.prg,使用Modify Command命令,可以省略扩展名,使用Mod

56、ify File命令不能省略扩展名。 执行Modify 命令时,文件名前可以加路径,系统首先在指定路径或当前路径下查找命令中指定的文件,如果未找到,则建立新文件,进入编辑窗口;如果找到了命令中指定的文件,系统自动将该文件调入内存并显示在编辑窗口中。,20.7.27,81, 程序的书写规则包括: 一行只能写一条命令,写完要输入回车,表示命令结束。 一条命令的长度不得超过2048个字符。为便于阅读,可以将长的命令分成若干行书写,但要在行尾加上分号,表示下一行是本行的继续。 绝大部分命令或函数都可缩写成前四个字符。,20.7.27,82,例7.3 简单程序举例:编写程序求半径为3的圆面积。设程序文件

57、名为circle.prg,保存在D盘的vfp-userrsgl文件夹中。在命令窗口输入命令: Modify Command d:vfp-userrsglcircle 在打开的程序编辑窗口中,输入下列程序行: r=3 s3.14159*r*r ? 圆面积:,s Return,20.7.27,83,7.2.2 程序文件的调用执行,1菜单方式 单击“程序”菜单中的“运行”命令 2命令方式 格式:Do With 功能:将磁盘上指定的程序文件调入内存并运行。 说明: 程序执行过程中,若发生错误,系统将显示出错信息,用户可返回编辑状态进行修改。 可选项With 用于执行带参数的程序。参数的作用是向运行的程

58、序传递数据。,20.7.27,84,7.3 程序设计辅助命令,1数据输入命令 Input 命令 格式:Input 提示信息 T0 内存变量 功能:用于接收从键盘输入的表达式,并将其运算结果存入指定的内存变量中。 说明: Input命令执行时,先在屏幕上显示,然后暂停程序的运行,等待从键盘输入数据。用户输入数据后,按下回车键,系统将输入的数据保存到指定的内存变量中,程序继续执行。,20.7.27,85, 可选项是字符表达式,系统显示其值作为提示信息。 Input命令能够接收任意类型的Visual FoxPro表达式,计算出结果后,再赋值给内存变量。如果输入的表达式中有字符串、日期型、逻辑型常量,

59、则必须使用定界符。 如果内存变量未定义,执行此命令时建立内存变量,类型取决于输入的数据类型。 Input语句每次只能为一个变量输入值。,20.7.27,86,例7.4 编写程序,由键盘输入半径,求圆面积(在程序运行时输入半径,可以实现求任意半径的圆面积,提高程序的通用性)。程序circle1.prg的内容如下: Input 半径= To r s3.14159*r*r ? 圆面积=, s Return 运行程序circle1时输入半径值1,显示结果为: 半径1&显示提示信息,输入半径值1 圆面积3.14159&输出圆面积,20.7.27,87, Accept命令 格式:Accept To 功能:将从键盘上接收的字符串存入指定的内存变量中。 说明: 执行此命令时,先在屏幕上显示,然后暂停程序运行,等待用户从键盘输入数据,并以回车键结束。系统将输入的数据存入指定的内存变量中,程序继续执行。 可选项的含义与Input语句相同。 Accept语句只能接收字符型数据,因此所有输入的数据都被作为字符串,并且不需要加定界符。 如果内存变量未定义,将在执行此命令时建立内存变量。Accept语句所定义的内存变量为字符型。,20.7.27,

温馨提示

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

评论

0/150

提交评论