第二章VisualFoxPro的数据类型2.1数据类型分类–常用:C、N、D、L、M、G–其它:货币、浮点、整型、双精度、日期时间、备注(二进制型)、字符型(二进制型)类型的使用–检查类型函数TYPE()–只用于字段的类型:双精度、浮点、通用(G)、整型、备注备注(二进制型)、字符型(二进制型)格式:用定界符将字符串括起来由任意ASCII字符、汉字等组成定界符:“”,‘’,[]例如:“Iamastudent”‘中国’[123]说明:1.定界符不能作为常量本身的内容;2.定界符必须配对出现;3.不包含任何字符的字符串(“”)叫空串。1.字符型o若定界符本身是常量中的内容;o则要用另一种定界符定界;格式:$+数字0-9、小数点和正负号组成占用字节:8取值范围:(-922337203685477.5807,922337203685477.5807)例如:$100、$15.31说明:1.货币数据无科学计数法。2.货币数据采用4位小数,多余4位时,系统自动将多余的小数四舍五入。2.货币型如:$123.456789存储为$123.4568说明:1.默认值:分隔符:斜杠/日期格式:mm/dd/yy(美国日期格式)2.日期值输入格式与输出格式并不完全相同,用户可根据应用需要设置输出格式。书写格式:{年月日}(年月日之间用分隔符分隔)分隔符:斜杠/连字号—点句号.空格取值范围:01/01/0001~12/31/9999例如:{10/25/99}{10-25-2003}{^2003-8-6}3.日期型传统的日期格式严格的日期格式严格日期–表示方法:{^yyyy-mm-dd}或者{^yyyy/mm/dd}–yyyy表示年,mm表示月,dd表示日–Birthday={^1989-01-01}–Tdate={}设定格式–工具/选项/区域–Setcenturyon|off–Setdatetoymd–Setstrictdateto0|1|24.日期时间型(DateTime)格式:{^yyyy-mm-dd[hh[:mm[:ss]][a|am|p|pm]]}–cdatetime={^1991-02-0203:21:56}–Tblankdate={:}–时间格式受SETHOURS、SETSECONDS命令的影响Sethoursto12|24Setsecondson|off{00:00:00AM}等价于午夜{12:00:00AM}{00:00:00PM}等价于中午{12:00:00PM}{00:00:00}至{11:59:59}等价于{12:00:00AM}至{11:59:59AM}{12:00:00}至{23:59:59}等价于{12:00:00PM}至{11:59:59PM}5.数值型(Numeric)书写格式:由数字0-9、小数点和正负号组成占用字节:8,20(字段)例如:100、-21、15.31、-21092.5041、1.3E+9书写格式:.T..t..Y..y..F..f..N..n.占用字节:1说明:1.逻辑常量只有真和假两种值:2.应在表示逻辑常量的字母左右加注圆点符“.”以示区别。6.逻辑型否则会被误认为变量名。7.通用型(General)–包含一个4个字节的引用(连接)–用于在表中存储OLE(对象链接与嵌入)对象(图片,电子表格等)8、备注型(Memo)•包含一个4个字节的引用(连接)•用于在表中存储数据块(举例)•备注字段一般是一些备注性质的文字9.浮点型(Float)10.双精度型(Double)11.整型(Integer)4字节12.二进制字符型(BinaryCharacter)13.二进制备注型(BinaryMemo)2.2数据存储VFP允许使用常量、变量、数组、记录和对象来存储数据,它们也被称为存储数据的容器–常量(Constants)–变量(Variables)–数组(Arrays)–字段(Fields)–对象(Objects)一、命名规则数据容器需要一个名称当建立名时,必须符合如下规则:–名称由字母、下划线“_”和数字符号组成;–名称的开头只能是字母或下划线,不能是数字;–自由表的字段名、表的索引标识名至多只能10个字符,其余的名称的长度可以在1~128个字符之间;–避免使用VFP系统的保留字。值在整个操作过程中保持不变类型–字符:‘王欢’,“Iamastudent.”,“123.44”–数值:123.44,2E+4–逻辑:.T.,.F编译时常量–用#DEFINE预处理命令定义–如:#DEFINEOPER“输入的数据非法!”#DEFINEpi3.1415926–不能另作它用二、常量三、变量内存变量(变量)变量是由程序员定义的一个或者一组单元变量名是存储位置的符号标识;变量中存储数据通过该名称来读写。新来旧去、取之不尽1、变量的创建STORE值的表达式TO内存变量名表格式一STORE0TOAA,BBSTORE李磊TONAME格式二内存变量名=表达式A=.T.将逻辑真值赋给变量A2.控制变量访问局部变量(local)私有变量(private)全局变量(public)(1)用LOCAL指定局部变量(本层)1.只能在创建他们的程序中使用和修改,不能被更高或更低层的程序访问2.在他们所属的程序停止运行时,局部变量和数组将被释放3.格式:Locala(变量名)Main2.prgx=1?xSub2()?x&&x=1ProcedureSub2Localxx=2endprocMain1.prgLocalxx=1?xSub1()?x&&x=1Proceduresub1x=2endproc(2)用PUBLIC指定全局变量(公共)1、格式:public变量名2、在命令窗口中创建的任何变量或数组被自动赋予全局属性3、全局变量在整个运行程序中一直存在publicmLocalnm=3n=4?m*m=3?n*n=4Sub()?m*m=30?n*n=4Proceduresub()m=30n=40endproc(2)用PRIVATE指定私有变量1、格式:private变量名2、私有变量可以在建立它的模块以及相应的下层模块使用3、私有变量可以将高层中创建的、私有变量同名的变量隐藏起来Main3.prgPublica,ba=1b=2?a*a=1?b*b=2Sub1()?a*a=1?b*b=20Proceduresub1()Privateaa=10b=20?a*a=10?b*b=20Sub2()endprocProcedureSub2()?a*a=10?b*b=20Endproc主程序PublicaPublicb一级模块Privatea二级模块locala三级模块全局变量私有变量局部变量3.访问变量?nVar、?m.nVar或?m-nVar如果字段和变量同名,则字段具有更高的优先权clearuse教师表3?teacher_idteacher_id=12345?teacher_id?m.teacher_id4、显示内存变量Display|listmemoryDisplaymemorystore“hello”toa1store“hi”toa2displaymemorylikea*5、释放内存变量Releasea1,a2Releaseall|clearmemoryReleasealllikea*6、保存和恢复内存变量SAVEALLLIKE*|?通配符TO内存变量文件RESTOREFROM内存变量文件–数组变量是结构化的变量,是一组具有相同名称、以下标相互区分的有序内存变量。–数组属于内存变量,数组必须先定义后使用,定义数组是向系统申请数组元素在内存中的存储空间三、数组1.数组的定义DECLAREX(5),Y(5,5)私有数组DIMENSIONA(10),B(10,10)私有数组PUBLICX(3,4)全局数组LOCALM(9)局部数组数组下标从1开始,X(0)是错的数组在声明之后,每个元素被默认地赋予.F.值。dimensionarrayname[6,3]arrayname[1,2]=1113arrayname[1,3]=“ABC”arrayname[2,2]=.T.arrayname[3,3]={^2008/08/08}–可以用一个语句为所有元素赋相同的值arrayname=10000STORE10TOA2.为数组元素赋值四、字段字段是记录中拥有特定数据类型.五、对象对象是类的实例,类是对于拥有数据和一定行为特征的对象集合的描述。对象:表单,表单集,控件对象都有属性和方法,并能响应特定的事件2.3函数(系统函数)函数是一段程序代码,是预先编制好的计算模,可供VFP程序在任何地方调用。函数调用格式:函数名(参数值)返回单个值或者不返回值函数分为系统函数和用户自定义函数主要内容1、数据类型函数2、数据库类型函数3、其它类型函数nExp代表数值表达式cExp代表字符型表达式dExp代表日期型表达式lExp代表逻辑型表达式eExp代表多种类型表达式一、数据类型函数1、算术运算函数1.1取绝对值函数ABS()(absolute)【格式】ABS(nExp)【功能】计算nExp的值,并返回该值的绝对值。【举例】?ABS(-123+23)结果:100i=100?ABS(i+20)结果:1201.2.取整函数格式:INT(nExp)功能:计算nExp的值,返回该值的整数部分举例:?INT(10.6)结果:格式:CEILING(nExp)功能:计算nExp的值,返回不小于该值的最小整数举例:?CEILING(10.6)结果:格式:FLOOR(nExp)功能:计算nExp的值,返回不大于该值的最大整数举例:?FLOOR(10.6)结果:1011101.3.四舍五入函数ROUND()【格式】ROUND(nExp1,nExp2)【功能】返回nExp1四舍五入的值,nExp2表示保留的小数位数。【举例】?ROUND(12.36,1)结果:12.4【说明】当nExp2的值大于等于0时,其表示保留的小数位数;其值小于0时,其表示保留的整数位数。1.4求余数函数MOD()【格式】MOD(nExp1,nExp2)【功能】返回nExp1除以nExp2的余数。【说明】①余数的符号与nExp2相同。②当两表达式同号时,函数值为两数相除的余数;当两表达式异号时,函数值为两数相除的余数再加上除数的值。举例:?MOD(36,10)结果:?MOD(36,-10)结果:?MOD(-36,10)结果:?MOD(-36,-10)结果:6-44-61.5.求最大值和最小值函数MAX()MIN()【格式】MAX(eExp1,eExp2[,eExp3…])MIN(eExp1,eExp2[,eExp3…])【功能】MAX()计算各表达式的值,并返回其中最大值.MIN()计算各表达式的值,并返回其中最小值.【说明】数字型、字符型、货币型、日期型、日期时间型等;表达式数据类型必须相同.举例:?MAX(4,5,6)结果:6?MIN(4,5,6)结果:42、字符型函数2.1字符串长度函数LEN()【格式】LEN(cExp)【功能】返回cExp的字符个数;函数值为数值型;。【举例】?LEN(‘-123+23’)结果:72.2大小写转换函数LOWER()UPPER()【格式】LOWER(cExp)UPPER(cExp)【功能】LOWER()将cExp中字母全部变成小写字母;UPPER()将cExp中字母全部变成大写字母.【举例】?UPPER(‘About’)结果:ABOUT?LOWER(‘AbouT’)结果:about2.3截取字符串函数格式:1).SUBSTR(cExp,nExp1[,nExp2])功能:从cExp中截取子字符串,nExp1表示截取的开始位置,nExp2表示截取字符的个数。举例:?SUBSTR(‘荆州师范学院’,5,4)结果:师范说明:若省略nExp2,截取nExp1位开始的所有字符;举例:?SUBSTR(‘荆州师范学院’,5)结果:师范学