刘淳教案第三章VisualFoxPro数据基础1.数据类型STR(-3.1561,6,2)6表示将此数转换为相应字符串后的总长度。2表示小数点后保留两位转化。最后结果“-3.16”,注意负号前面还有一个空格。补全6位。数据类型是数据的基本属性,VisualFoxPro在对数据进行操作时,要先定义其类型,VisualFoxPro中涉及到的数据类型主要有:1.字符型数据(Character,简写为C)由数字、字母等ASCII字符和汉字组成。2.数值型数据(Numeric,简写为N)数值型数据是指可以进行算术运算的数据,包括阿拉伯数字0~9、小数点和正负号。3.浮点型数据(Float,简写为F)是数值型数据的一种,具有较高的精度,它由尾数、阶数和字母E组成。4.整型数据(Integer,简写为I)整型数据指不包含小数的数值型数据,只用于数据表的字段中,需用整数时才定义。5.双精度型数据(Double,简写为B)双精度型数据是具有更高精度的数值型数据,一般使用较少。6.逻辑型数据(Logic,简写为L)逻辑型数据是用于各种逻辑运算的数据,只有两个,即“真”(.T.)和“假”(.F.),输入使用时也可用.t.、.Y.和.y.代替.T.;用.f.、.N.和.n.代替.F.。7.日期型数据与日期时间型数据(Date和DateTime,分别简写为D和T)日期型数据与日期时间型数据分别用来表示日期和日期时间的数据。使用时用大括号({})作定界符,默认格式为{MM/DD/YY}和{MM/DD/YYHH:MM:SS},严格日期格式为{^YYYY/MM/DD},可用设置命令决定有效性。8.货币型数据(Currency,简写为Y):代替数值型数据表示货币,使用时应加上货币符号。9.备注型数据(Memo,简写为M)备注型数据是指在数据表中需要进行备注、说明的字符型数据,它存放在与数据表文件同名、扩展名为.FPT的备注文件中。10.通用型数据(General,简写为G)是数据表中引入的OLE(对象链接与嵌入)对象,具体内容可以是一个文档、表格、图片等,存放在与数据表同名、扩展名为.FPT的备注文件文件中。2.常量常量是指在命令操作或程序运行过程中其值始终保持不变的量,经常用到的常量类型是字符型、数值型、日期型与日期时间型、逻辑型,注意无备注型、通用型。1.字符型常量也叫字符串,由数字、字母、空格等字符和汉字组成,使用输入时必须用定界符(‘’、刘淳教案“”和[])括起来,例如‘VisualFoxPro’、“256”和[计算机]等。注意数字用定界符括起来(如“256”)后就不再具有数学上的含意,只是字符符号,不能参加数学运算;另外定界符(‘’、“”)在使用中应在英文状态输入。2.数值型常量数值型常量即数学中用的整数和小数,例如-23.5、1024等。3.日期型与日期时间型常量日期型与日期时间型常量表示一个确定的日期或日期时间,例如日期型常量{04/23/02}、{^2003/01/01}和日期时间型常量{04/23/9913:00:02}等。4.逻辑型常量逻辑型常量只有两个,即.T.和.F.。使用时也可用.t.、.y.和.Y.代表.T.;用.f.、.n.和.N.代表.F.。5.浮点型常量浮点型常量是数值型常量的浮点格式,例如158E+10、-3.14E-20等。3.变量变量是命令操作和程序运行过程中其值可以改变的量,一般分字段变量、内存变量两类。内存变量除一般意义的内存变量(常直接称内存变量或简称变量)外,还有数组变量和系统变量两种特殊形式。字段变量:即数据表中的字段,字段变量的类型有字符型、数值型、浮点型、双精度型、整型、逻辑型、日期型、日期时间型、备注型、通用型等。有关字段变量的定义及使用将在下一章介绍。内存变量:是内存中的一些临时工作单元,独立于数据库和表文件,常用来保存所需要的常数、中间结果或对数据表和数据库进行某种处理后的结果等,其数据类型由它所存放的数据类型来决定,通常有字符型、数值型、日期型、日期时间型、逻辑型、贷币型和屏幕型,其中屏幕型内存变量不能进行运算,只能用于保存屏幕画面。内存变量需要时可随时定义和释放。当内存变量与字段变量同名时,若要使用内存变量须在内存变量名前面加“M.”。当退出VisualFoxPro系统后,内存中的所有内存变量都将消失。内存变量的命名规则内存变量可以用数字、字母(大小写通用)、汉字和下划线组成,且以字母、汉字开头。例如:X、a2、城市、Class_1是合法的内存变量名,而3m、a_*为非法内存变量名。内存变量的赋值【格式】①STORE表达式TO内存变量名表②内存变量名=表达式【功能】定义并赋值给内存变量,确定其数据类型。【例】STORE5TOa1,a2STORE“上海”TO城市m=5rq={08/20/80}性别=.t.【说明】⑴①、②两种格式的主要区别在于格式①可以对多个内存变量赋值;⑵表达式的含义见后面表达式一节,它可以是一个具体的值,如不是具体值系统先计算表达式的值,再进行赋值。刘淳教案如果要建立屏幕型内存变量,即将屏幕画面赋予内存变量,可用命令SAVESCREENTO内存变量名实现,并用RESTORESCREENFROM屏幕型内存变量恢复。内存变量的显示输出【格式】DISPLAY/LISTMEMORY[LIKE通配符][TOPRINTER/TOFILE文件名]【功能】显示内存变量的当前内容,可选择打印或将这些内容送到一个文本文件中。【说明】⑴通配符的含义与DOS中的通配符含义一致。⑵文件名的扩展名是TXT,为文本文件。【例】定义内存变量a的值为2,a1的值为“多媒体计算机”,并在屏幕上显示出来。a=2a1=“多媒体计算机”b=“123”LISTMEMORYLIKEa*结果为:APubN2(2.00000000)A1PUBC“多媒体计算机”如果只是查看内存变量的值,也可用表达式显示命令?/??实现。【格式】?/??内存变量名表【功能】换行或在当前位置显示内存变量名表中每个内存变量的值。【例】显示上例内存变量a和a1赋值后的值。?a,a1,b结果为:2多媒体计算机123内存变量的保存与恢复【格式】SAVETO内存变量文件名[ALLLIKE通配符/ALLEXCEPT通配符]【功能】将当前内存中的内存变量存放到内存变量文件中。【说明】⑴内存变量文件的扩展名为.MEM;⑵缺省可选项,将所有内存变量(系统变量除外)存放到内存变量文件中。如果要重新使用已保存在内存变量文件中的内存变量,可用命令RESTOREFROM内存变量文件名进行恢复,将内存变量调入内存。内存变量的删除为节省存储空间,不用的内存变量应使用删除命令来释放其所占的内存空间。【格式】①CLEARMEMORY②RELEASE内存变量名表③RELEASEALL[LIKE/EXCEPT通配符]【功能】格式①删除内存中所有内存变量;格式②删除内存变量名表中指定的内存变量;格式③利用通配符选择删除内存变量。4.数组变量数组变量(数组)是按一定顺序排列的一组内存变量的集合。数组中的变量称为数组的元素。每一数组元素用数组名以及该元素在数组中排列的序号一起表示,也称为下标变量。因此数组也看成是名称相同、而下标不同的一组内存变量。下标变量的下标个数称为维数,只有一个下标的数组叫一维数组,有两个的叫二维数组。数组的命名方法和一般内存变量的命名方法相同,如果新定义的数组名称和已经存在的内存变量同名,则数组取代内存变量。刘淳教案数组的引入是为了提高程序的运行效率、改善程序结构。数组的定义数组使用前一般须先定义,VisualFoxPro中可以定义一维数组和二维数组。【格式】DIMENSION/DECLARE数组名1(数值表达式1[,数值表达式2])[,数组名2(数值表达式3[,数值表达式4])]…【功能】定义一个或多个一维或二维数组。【例】DIMENSIONabc(3),b(2,3)【说明】该命令定义了两个数组,一个是一维数组abc,它有三个元素,分别为abc(1)、abc(2)和abc(3);另一个是二维数组b,它有6个元素,分别是c(1,1)、c(1,2)、c(1,3)、c(2,1)、c(2,2)和c(2,3)。数组的赋值数组定义好后,数组中的每个数组元素自动地被赋予逻辑值.F.。与一般内存变量一样,可以通过STORE命令或赋值号“=”来进行。对数组的不同元素,可以赋予不同数据类型的数据。【例】DIMENSIONabc(3),b(2,3)STORE10TObabc(1)=30abc(2)=“TCP/IP”abc(3)=.T.【说明】在定义一维数组abc和二维数组b后,对两个数组赋值。赋值后b中所有元素的值均为10;abc中各元素分别赋予了不同类型的数据30、“TCP/IP”和.T.。5.系统变量系统变量是由VisualFoxPro自动生成和维护的内存变量,以下划线“-”开头,用于控制输出和显示信息的格式,其名称由系统规定。如系统变量“_PEJECT”用于设置打印输出时的走纸方式。打印前要求走纸换页时,可将其值设为“NON”;而“_DIARYDATE”则可用于设置当前日期。6.运算符运算符是表示数据之间运算方式的符号,不同类型的数据要用不同的运算符。VisualFoxPro中的运算符主要有算术运算符、字符串运算符、关系运算符、日期运算符和逻辑运算符。1.算术运算符用于对运算对象进行算术运算,有如下几种:()+-**或^*/%+-分组括号正号负号乘方乘除模运算或取余加减上述算术运算符的运算优先级从左到右依次分类递减,即分组括号、正负号、**或^号、乘方号、乘除模运算或取余数、加减号。算术运算符的运算结果为数值型数据。2.字符串运算符字符串运算符用于对两个字符型数据进行连接运算,主要有两个:原样连接符+和移去空格连接符–。如a=“程序设计”、b=“教程”,则a+b=“程序设计教程”,而a–b=“程序设计教程”。刘淳教案两个字符串运算符的优先级相同,以从左到右出现的次序进行运算。字符串运算符的运算结果为字符型数据。3.关系运算符关系运算符用于对运算对象进行诸如比较一类的运算,主要有:=、#或!=====$小于大于等于不等于小于等于大于等于精确比较字符串包含关系运算符的优先级相同,以从左到右出现的次序进行运算。关系运算符的两边,可以是数值型、字符型、日期型和逻辑型等数据类型($除外),但两边的数据类型必须一致。另外,使用关系运算符比较大小时,数值型数据按照数值大小进行比较;字符型数据按照字符的ASCII码进行比较(其中一级汉字小于二级汉字,以拼音顺序进行比较,二级汉字以部首排列进行比较);日期型数据日期在先的为小,在后的为大;逻辑型数据.T.大于.F.。关系运算符的运算结果为逻辑值.T.或.F.。4.日期运算符日期运算符用于对日期型、数值型的数据进行运算,有两个符号:用于一个日期和一个整数相加的符号+和用于一个日期减去一个日期或整数的符号–。日期运算符无优先级,以从左到右出现的次序进行运算。日期运算符的运算结果为日期型数据或数值型数据。当日期型数据与数值型整数相加或者日期型数据减去一个数值型的整数时,结果为日期型数据;当日期型数据减去日期型数据时,结果为数值型的数据。例如进行运算{05/01/98}+10后结果为日期型数据{05/11/98};而进行运算{05/20/98}–{05/22/98}后结果为数值型数据-2。5.逻辑运算符逻辑型运算符用于对逻辑型数据进行逻辑运算,有三个符号:.NOT.或NOT、!.AND.或AND.OR.或OR逻辑非逻辑与逻辑或逻辑运算符的运算规则为:表3-1逻辑运算逻辑型数据值a逻辑型数据值ba.AND.ba.OR.b!a(或.NOT.a).T..T..T..T..F..T..F..F..T..F..T..F..T..T..F..F..F..F.上述逻辑运算符的运算优先级为从左到右递减,依次为.NOT.、.AND.、.OR.。逻辑运算符的运算结果为