2.1数据类型和字段类型VFP各种类型的数据可以保存在表、数组、变量以及其他数据容器中。所有数据都有其所属类型。类型就是对数据的允许取值以及这个值的范围进行的说明。第二章数据类型1.字符型(C)字符型数据由任意字符组成,最长254个字符。2.数值型(N)数值型用来表示整数或小数。3.日期型(D)日期型用于存储有关年月日数据,占8个字节。4.日期时间型(T)用于表示日期、时间兼有的数据,占8个字节。5.逻辑型(L)逻辑型数据只含有两个值:真(.T.)或假(.F.),占1个字节。6.货币型(Y)表示货币量,使用货币类型需在数字前加上$符号,占8个字节。7.浮点型(F)、双精度型(B)、整型(I)用于表示不同精度的数据。8.备注型(M)备注型用于在表中存储大量文本数据,备注字段包含4字节的引用,为指向具体文本的指针。9.通用型(G)VFP特色类型,用于在表中存储OLE对象,在表中包含4字节的引用,它指向具体对象的内容。10.二进制字符型(C)、二进制备注型(M)在各种代码页间保持不变的字符型数据和备注型数据,用于不同国家的文本数据的处理。*其中7、8、9、10只能描述表的字段类型,不能描述内存变量的类型2.2.1常量常量是一个在整个操作过程中值保持不变的量。.字符型常量:.数值型常量:.逻辑型常量:.日期型常量:.编译常量:2.2存储数据“ABC”,‘张华’,[3.15]3.1415926只有两值.T.,.F.{3/15/1999},{4/1/199910:00am}....SetStrictdateTo1/0是否采用严格的日期格式如:{^2002-10-0110:30:30a}SetCenturyOn/Off是否显示4位年份SetDateToMDY|USA|YMD|SHORT|ANSI|DMY|LONGSetmarkto‘日期数据分隔符’注意默认的‘/、-、.’仍然有效#DEFINETISHI“数据非法”#DEFINEPI3.14159注意:定义的编译常量所表示的值不能改变2.2.2变量变量是内存中的一个存储单元的位置,变量名是存储位置的符号标识。通过变量名访问该存储单元值1.内存变量的创建可以使用赋值等命令创建变量,格式为:变量名=表达式或者STORE表达式TO变量名列表例如x=3.14159store1toa,b,c&&给变量a、b、c同时赋值为1usejs&&打开js表counttors&&统计当前js表记录个数值并赋给rs变量AVERAGEjbgztopjgz&&统计js表jbgz字段平均值并赋给pjgz变量SUMjbgztozgz&&统计js表jbgz字段总和值并赋给zgz变量2.将内存变量保存至内存变量文件(.mem)中saveto文件名[alllike/except“变量名描述”]保留当前内存变量3.从内存变量文件中恢复内存变量值restorefrom文件名[ADDITIVE]2.变量的作用域变量只在应用程序运行时或创建它的工作区中才存在。用LOCAL指定的变量为局部变量(本层程序中有效)用PRIVATE指定的变量为私有变量(本层、下层程序中有效)用PUBLIC指定的变量为全局(公共)变量(上/本/下层均有效).程序中变量如未做作用域说明,默认为局部变量。.在命令窗口中创建的变量或数组被自动赋予全局属性。M-或M.如访问内存变量x形式:m-x或m.x3.变量的访问变量可以用变量名来访问,但若此时存在同名的表字段变量,则优先访问字段变量。若此时访问内存变量,需在变量名前加前缀:2.3操作符操作符用来处理同种类型或类型兼容的数据。VFP操作符包括:字符操作符、日期和日期时间操作符、逻辑操作符、关系操作符、数值操作符。★操作中需注意两点:同种类型数据(或类型兼容的数据)之间才能操作,不同类型数据之间需先转换后操作操作运算符的具有一定的优先顺序2.3.1字符操作符+字符串连接运算-字符串连接运算,同时将前串尾空移至结果最后$字符串包含运算,判断左串是否包含于右串中2.3.2日期和日期时间操作符+相加运算-相减运算例时间B=时间A+秒数日期B=日期A+天数时间B=时间A-秒数日期B=日期A-天数秒数=时间B-时间A天数=日期B-日期A注意:日期时间+日期时间为错误操作2.3.3逻辑操作符NOT或.NOT.或!(逻辑“非”)AND或.AND.(逻辑“与”)OR或.OR.(逻辑“或”)★运算优先顺序为NOT→AND→OR★运算规则表:例如?.T.OR.F.AND.F.结果.T.ABNOTAAANDBAORB.T..T..F..T..T..T..F..F..F..T..F..T..T..F..T..F..F..T..F..F.2.3.4关系操作符小于比较符大于比较符或#或!=不等于比较符=小于或等于比较符=大于或等于比较符==字符串精确等于比较符=等于比较符=比较时的开关状态命令:SETEXACTON|OFF作用:指定字符串的比较,是采用精确比较,还是采用左部匹配方案。(setexactoff(默认)→?‘Tommy’=‘Tom’→.T.)(setexacton→?‘Tommy’=‘Tom’→.F.?‘Tommy’=‘Tommy’→.T.)2.3.5数值操作符**或^乘方运算符*、/乘、除运算符%模(求余)运算符①运算结果的正负号由第二个运算对象正负号决定;值运算由‘同号整除剩几、异号借几整除’决定②a%b=a-*b,其中取小于等于a/b的最大整数+、-加、减运算符★运算优先顺序为:**或^→*、/、%→+、-★混合运算优先级:字符运算符、日期时间运算符、算术运算符优先级高于关系运算符;关系运算符的优先级高于逻辑操作符。如?34or!{^2008-8-8}-5^2{^2008-8-1}and'ABC''B'2.4函数VFP中的许多操作和功能是通过函数来完成和实现的函数是一个预先编制好的计算模块,可供VFP程序在任何地方调用。调用格式:函数名(参数表)函数由系统提供的称为系统函数,由用户定义的称为用户自定义函数。*需熟练掌握常用系统函数的使用。2.4.1系统函数的分类2.4.2常用系统函数1.数据类型函数①数值函数ABS()MAX()、MIN()MOD()作用同%算术运算RAND()返回0~1间的随机数INT()取整数ROUND()四舍五入函数CEILING()功能:对数据进行向上取整操作。例:?CEILING(3.4),CEILING(-3.8)FLOOR()功能:对数据进行向下取整操作。例:?FLOOR(3.8),FLOOR(-3.4)SQRT()功能:对数值开平方根运算EXP()功能:对数学常数e进行乘方运算SIGN()功能:根据参数值为正数、零、负数分别返回1、0和-1其它数学函数sin()、cos()、log()、log10()等②字符函数LEN()返回字符串字节长度SPACE(n)返回n字节的空格AT(a,b)、ATC()测试a子串在b字符串中出现的位置OCCURS(a,b)测试a子串在b字符串中出现的次数REPLICATE(a,n)将n个a字符串连接成为新的字符串SUBSTR()、LEFT()、RIGHT()截取字符串子串LOWER()、UPPER()字母大小写转换LTRIM()、TRIM()、ALLTRIM()去掉字符串左、右空格STRTRAN(a,b,c)将a字符串中的b子串用c子串全部替换STUFF(a,n1,n2,b)将a字符串中的n1位置起的连续n2个字节的子串用b子串替换LIKE(a,b)字符串匹配比较:b是否象a(用*、?描述)MESSAGEBOX(“提示信息”,按钮值+图标值+默认按钮值,“标题信息”)●日期月份运算③日期时间函数DATE()、GOMONTH()、TIME()、DATETIME()、YEAR()、MONTH()、CMONTH()、DAY()、DOW()、CDOW()、WEEK()④转换函数STR()、VAL()数值←→字符ASC()、CHR()字符←→ASCⅡ码DTOC()、DTOS()、CTOD()日期←→字符CTOT()、TTOC()字符←→时间⑤数据测试函数TYPE()测试数据类型.注意其用法ISALPHA()测试字符串值是否为字母形式ISDIGIT()测试字符串值是否为数值形式ISBLANK()测试字符串值是否为纯空格、{}EMPTY()测试数据值是否为空格、0、.F.、{}ISLOWER()测试字符串首字符是否为小写字母ISUPPER()测试字符串首字符是否为大写字母2.其他类函数Between(参数1,参数2,参数3)INLIST(参数1,参数2,参数3,参数4,参数5,…)CAPSLOCK()测试或设置大小写状态NUMLOCK()测试或设置小键盘区数字/方向键状态INKEY()除非用户干预,否则程序暂停运行n秒(若n=0则必须由用户干预解除暂停状态)IIF(参数1,参数2,参数3)–如参数1值为.t.则函数值为参数2值;否则为参数3值–参数1为返回值为逻辑类型的表达式;参数2,3类型不限Ex:y=iif(x0,1,iif(x=0,0,-1))2.5表达式表达式是变量、操作符、常量、函数、字段名控件以及属性的组合。VFP中表达式包括–字符表达式–日期表达式–算术表达式–逻辑表达式–名称表达式单个的常量、变量、函数、字段名、控件以及属性可看作是一个表达式。名称表达式•名称表达式是由圆括号括起来的一个字符表达式,可以用字符表达式值的内容来代替命令和函数中的名称,如字段名、变量名、菜单名、文件名、对象名等。•使用形式:(字符型变量)或(字符型元素)★名称表达式不能代替整个命令、不能构成表达式.宏替换•宏替换与名称表达式具有相似的作用,也可使用宏替换的方法来代替名称。•形式:&字符型变量•实质:将字符型内存变量的内容代换出来,参与命令、表达式等等操作。•宏替换的使用范围比名称表达式广。空值(.NULL.)•VFP支持.NULL.值,这样降低了表达未知数据的难度•.NULL.值具有以下特点:•等价于没有任何值•与0、.F.、空串、空格、空日期不同•给变量赋.NULL.不改变变量原来的数据类型•相关测试函数ISNULL()•相关运算EndABNOTAAANDBAORB.null..T..null..T..null..F..F..null..null..null..null..null..null.例1:tablname=“js”use(tablname)&&打开js表store“xm”tonamereplace(name)with“王二平”&&替换当前记录&&xm字段值browfieldgh,(name)&&显示所有gh,xm字段值use&&关闭当前js表例2:x1=100y1=“x1”stroe200to(y1)&&给变量x1赋值200&&不能写成(y1)=200例3:tablname=“js”use&tablname&&打开js表store“xm”tonamereplace&namewith“王二平”&&替换当前记录&&xm字段值displaygh,&name&&显示当前记录gh,xm字段值ml=“use”&ml&&关闭当前js表,不能用(ml)形式例4:x1=100y1=“x1”&y1=200例5:x=“1”y=“2”x12=“Hello!”?x&x&y例6:x=‘**3‘?2&x.+10&&用.表示结束宏代换变量的引用ValueDialogboxbuttons0OKbuttononly.1OKandCancelbuttons.2Abort,Retry,andIgnorebuttons.3Yes,No,andCancelbuttons.4YesandNobuttons.5RetryandCancelbuttons.ValueIcon16Stopsign.(X)32Questionmark.(