visualfoxpro课件8第02章.ppt
2.4 VFP 语言基础,2.4.1 数据类型和字段类型2.4.2 常量与变量2.4.3 函数2.4.4 运算符与表达式2.4.5 空值处理,程序设计基础,4.数据类型转换函数,在表达式中要求,数据的运算必须是遵从于数据类型一致这一根本原则,因而在VFP中常常需要对不同的数据类型的数据进行运算。因此,在运算前必须使用转换函数将数据转换成一致类型。转换函数包括:字母大小写:UPPER/LOWER日期字符串:CTOD、DTOC字符ASCII:ASC、CHR数值字符:STR、VAL,1)字符型转换为日期型函数格式:CTOD()功能:将按日期格式表示的转换为相应的日期。例如:?CTOD(“10/18/08”)结果:10/18/082)日期型转换为字符型的函数格式:DTOC(,1)功能:将给定的日期型数据转换为相应的字符串。输出值为字符型。例如:?DTOC(2008/03/29)结果:08/03/29例如:?“出生日期:”+DTOC(2008/03/29,1)结果:出生日期:20080329,3)数值转换成字符串函数格式:STR(,)功能:将指定按给定及转换成字符串。输出值为字符型。说明:若缺省或则函数值为四舍五入取整的数。例如:?STR(546.28,5,1)结果:546.3例如:?STR(546.28,2,1)结果:*例如:?STR(546.28,7,1)结果:凵凵546.3例如:?STR(546.58)结果:547,4)字符串转换为数值的函数格式:VAL()功能:将指定转换成数值型数据。说明:此函数的自变量必须是由数字正负号及小数点组成的字符串。字符串中可转换部分从第一个数字字符开始到非数字字符为止的数字串,可以包含负号。函数值的小数位数由 SET DECIMALS TO命令决定,系统默认为2。例如:?VAL(“546.28”)结果:546.28例如:?VAL(“AB546.28”)结果:0.00例如:?VAL(“54AB6.28”)结果:54.00,自定义对话框函数格式:MESSAGEBOX(,)功能:显示一个用户自定义对话框。输出值为数值型。参数:指定在对话框中显示的文本。为:N1+N2+N3,指定对话框中的按钮种类N1(表1)、图标样式N2(表2)和默认按钮N3(表3)。若省略,则等同于指定为0。指定对话框标题栏中的文本。若省略,则标题栏中将显示“Microsoft Visual FoxPro”,6.其他常用函数,说明:该函数返回值标明对话框中的所选按钮的整型值。参见表4。本函数的最短缩写为MESSAGEB()例如:显示一个对话框如下:“提示”:是否继续执行?“按钮”:是和否,缺省按钮为否?MESSAGEBOX(是否继续执行?,4+32+256,信息说明),表4 按钮返回值,表1 命令按钮的数目及形式,表3 默认按钮,表2 图标样式,运算符是表示数据之间运算方式的符号。Visual FoxPro包含5种运算符:数值运算符、字符运算符、日期/时间运算符、关系运算符和逻辑运算符。表达式是变量、运算符、常量、函数、字段名、控件以及属性的组合。Visual FoxPro包含6种表达式:字符表达式、日期表达式、算术表达式、逻辑表达式、名称表达式、宏替换,2.4.4 运算符与表达式,1)数值运算符 数值运算的对象是数值型数据,运算的结果仍是数值型数据。数值运算符按其运算的优先级别从高到低排列。,2)字符运算符 字符运算符将字符型常量、变量及函数连接起来,其运算结果仍为字符型数据。字符运算符两边的数据必须是字符型数据。字符运算符主要有两类:连接运算和包含运算。字符串连接运算分为完全连接和不完全连接。字符串包含运算的结果不是字符型数据,而是逻辑值。,A.完全连接运算符(+)用“+”将两个或多个字符串首尾连接合并成一个新的字符串。其格式为:+例如:中国凵+南京中国凵南京B.不完全连接运算符(-)用“-”将两个字符串连接,但连接时将第一个字符串尾部的空格移到连接形成的新字符串的尾部。注意:字符串前及中间的空格在进行不完全连接时仍保留。其格式为:-例如:凵中凵国凵-南京 凵中凵国南京凵,C.字符串包含运算符($)“$”用于表示两个字符串间包含与被包含的关系。其运算结果是逻辑真或假。例如:“东南”$“东南大学”“ABC”$“DEF”例如:“杭州”$“浙江”,3)日期和日期时间运算符:是由日期的加(+)、减(-)运算符将日期型常量、变量及函数连接起来的。日期型数据+数值(天数)&结果为日期型数据加上数值后的一个新日期日期型数据-数值(天数)&结果为日期型数据减去数值后的一个新日期日期型数据1-日期型数据2&结果为两个日期间相差的天数例如:2008-11-11+2=2008-11-132008-11-11-2=2008-11-092008-11-11-2008-11-08=3,4)关系运算符关系运算是指比较两个数据的大小或前后。关系运算符可以在数值型数据之间、字符型数据之间、日期型数据之间使用。当比较两个算术表达式时,应先计算表达式的值,然后比较其值的大小。例如:3-25-6当比较两个字符串时,则ASCII码值的大小进行比较;如果是汉字,则按汉字拼音字母ASCII的大小进行比较。两个日期型数据比较时,按年、月、日顺序比较。例如:?2008-04-282008-04-09,5)逻辑运算符逻辑运算只能对逻辑型数据进行操作,它的结果依然是逻辑型数据。逻辑运算符按其运算的优先级别从高到低排列顺序,见下表。,在混合运算的表达式中,各种运算符的优先级顺序是:数值运算符字符运算符日期运算符关系运算符逻辑运算符。例如:?(10%3)=1.and.(15%2)=0.or.“电脑”!=“计算机”,.T.,.F.,.T.,.F.,.T.,6)宏替换 格式:&.功能:取字符型内存变量的“值”代替内存变量 的“名”。在&后面的变量名前不能有空格。宏代换的作用范围是从“&”起,直到遇到第一个圆点符“.”或空白为止。例如:X=DD Y=&X.FF?Y 结果:DDFF,宏代换可以改变数据类型,将某些字符型常量转变为逻辑型、数值型。例如:X=.T.Y=123?32.AND.&X结果:.T.?2*&Y结果:246宏代换的替换是间接的。例如:A=DATE()B=A?&B,&A?A,DATE()结果:DATE()08/28/08,宏代换可以嵌套使用。例如:A=“1”&A=1?&A B=“.T.”&B=.T.?&B C=“2008/08/08”&C=2008/08/08?&C D=“东南”&D=东南?&D,结果:1结果:.T.结果:2008/08/08 结果:找不到变量“东南”,例如:设N1=“1”,N2=“2”,N3=“3”,?N&N3的结果是,?&N1+&N2*2的结果是,命令USE F&N1的作用是。,2.4.5 空值处理,VFP支持null值,降低了表达未知数据的难度,方便与其他SQL数据库产品共同工作。Null值具有以下特点:等价于没有任何值。与0、空字符串(“”)或逻辑假不同。排序优先于其他数据。在计算过程中或大多数函数中都可以用到null值。null值会影响命令、函数、逻辑表达式和参数的行为。,Null在逻辑表达式中的行为,第3章数据库与表的创建及使用,3.1 数据库概述,数据库是许多相关的数据库表的集合,是一个容器。数据库=数据库表+本地视图+远程视图+连接+存储过程教学数据库管理系统(P68图 3-1)数据库表之间有联系(关系)数据库包含表及表之间的联系,图3-1 教学管理数据库中表之间的关系,数据库的设计过程,VFP将不同主题的信息保存到不同的表中设计数据库的一般步骤确定建立数据库的目的,分析数据需求确定需要的表确定表的字段确定表之间的关系设计的优化,1.确定建立数据库的目的明确数据库中应保存哪些信息充分了解用户的需求,明确数据库的目的确定各主题2.确定需要的表技巧性最强的一步尽量避免在一个表中存储重复的数据(冗余度最小)重复信息的后果增加数据量、工作量数据的不一致性删除异常示例,3.确定表的字段每个字段直接和表的主题相关一般不必把计算结果存储在表中(年龄,出生日期)收集所需的全部信息(不要太多,=128,最好不要超过20)以最小的逻辑单位存储信息(原子)每个表都必须包含主关键字(学号、课程代号),4.确定表之间的关系1)关系的种类一对多关系(主表、子表)例:学生表与专业表多对多关系(纽带表)例:学生表与课程表一对一关系(不常用)例:职工表与工资表2)分析并确定表之间关系,图4-3 表之间的关系,图4-4 多对多关系与纽带表,关 系,1:m,N:m,n:1,1:1,3.1.2 数据库的组成1.数据库表数据库与数据库表间的双向链接数据库表(相关表):从属于某一个数据库的表数据库表与数据库之间的相关性是通过表文件与库文件之间的双向链接(前链,后链)实现的前链(数据库中)=表文件路径+表文件名信息后链(表文件中)=库文件的路径+库文件名信息,2.视图(VIEW)把分散在相关表中的数据通过联接条件把他们收集到一起。构成一个“虚表”。这个“虚表”就是视图。视图兼有表和查询的特点:与查询相类似的地方是,可以用来从一个或多个相关联的表中提取有用信息;与表相类似的地方是,可以用来更新其中的信息,并将更新结果永久保存在磁盘上。,3.连接(Connection)是保存在数据库中的一个定义,它指定了数据源(远程数据源)的名称。一个远程数据源是一个远程数据库服务器或文件,并且已为它在本地安装了ODBC驱动程序和设置了ODBC数据源名称。有两种连接远程数据源的方法:一种是直接访问在机器上注册的ODBC数据源,另一种是用“连接设计器”设计自定义连接。,4.存储过程是保存在数据库中的过程代码,它由一系列用户自定义函数或在创建表与表之间参照完整性规则时系统创建的函数组成。对数据库中的数据经常要进行一些相似或相同的处理时,可以把这些处理编写成自定义函数或过程,并保存到存储过程中。存储过程可以提高数据库的性能,因为在打开一个数据库时,他们便被加载到内存中。,3.2 数据库的创建、打开与使用,3.2.1 数据库的创建数据库文件(.DBC)关联的数据库备注文件(.DCT)关联的索引文件(.DCX)新建一个数据库,在命令窗口或资源管理器窗口中查看(三个文件),1.界面方式(1)在项目管理器中新建数据库(2)通过“新建”对话框新建这样新建的数据库不会自动加到项目中去(但以后可以添加进去)2.命令方式 CREATE DATABASE|?如果给出数据库名,则创建数据库,并使该数据库处于打开状态,但不出现数据库设计器,3.2.2 数据库的打开与关闭1.打开数据库格式:OPEN DATABASE/?EXCLUSIVE/SHARE NOUPDATE说明:数据库打开时,其中包含的所有表均可用,但必须先用USE命令打开。当打开数据库中的某个表时,该表所在的数据库自动打开。如果数据库以独占方式打开,则库中的表可以以独占方式打开,也可以以共享方式打开。NOUPDATE:指定不能对数据库做任何修改。,2.修改数据库格式:MODIFY DATABASE/?3.关闭数据库格式:CLOSE DATABASES ALL,4.删除数据库格式:DELETE DATABASE注意:当一个数据库被删除后,它所包含的数据表并没有被删除,但是这些数据表将不再属于当前的项目。删除操作是不可恢复的,在需要时只能重建,因此要慎用。5.指定当前数据库格式:SET DATABASE TO,