版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二章VFP语言基础2.1数据类型2.2数据存储容器2.3运算符2.4函数2.5表达式2.6空值处理2.7程序设计基础2.1数据类型数据类型是指数据对象的取值集合,以及对之可实施的运算集合;设置不同的数据类型,是为了提供合适的计算量与计算速度。创建表时需要用户指明表中每个字段的数据类型。变量或数组的数据类型则由保存在其中的值来决定。VFP支持的基本数据类型类型说明大小范围字符型任意文本每字符为1字节,最多可有254个字符任意字符货币型货币量8字节-922337203685477.5808~922337203685477.5807日期型包含日期的数据8字节01/01/0001~12/31/9999日期时间型包含日期和时间的数据8字节01/01/0001~12/31/999900:00:00a.m~11:59:59p.m.数值型整数或小数在内存中占8字节,在表中占1—20字节-0.9999999999E+19~0.9999999999E+20逻辑型“真”或“假”1字节“真”(.T.)或“假”(.F.)浮点型*与数值型一样与数值型一样与数值型一样双精度型*双精度浮点型8字节+/-4.94065645841247E-324~+/-8.9884656743115E307整型*整型值4字节-2147483647~2147483646备注型*数据块引用在表中占4字节只受可用内存空间限制通用型*OLE对象引用在表中占4字节只受可用内存空间限制(其中,打“*”的类型只能用于字段,不能用于变量和数组)字符型Character(1)由任意字符(字母,数字,空格,符号等)组成;(2)可以保存诸如姓名,名称,地址及无需算术运算的数字号码(学号,工号,邮编等)。数值型Numberic(1)由数字、正负号及小数点组成;(2)数值型字段的小数部分位数在创建字段时确定,且小数点、小数位数是总字段宽度的一部分。货币型Currency(1)涉及货币数据时,可用货币类型来替代数值类型;(2)若小数部分超过4位,则VFP将它四舍五入到4位。日期型Date(1)日期型变量以“yyyymmdd”字符格式保存,共占8个字节;(2)日期的格式取决于setdate,setmark,setcentury命令的设置,或利用菜单命令“工具/选项”,在“选项”对话框的“区域”选项卡上进行设置,常用的格式为mm/dd/yyyy。日期时间型DateTime(1)其值存储在含有两个4字节整数的8个字节中,第一个4字节保存日期,第2个保存时间,时间从午夜起计算,以1/100秒为最小计时单位;(2)若缺省日期值,VFP用系统默认值1899.12.30填入,若缺省时间值,VFP用系统默认的午夜零点时间。浮点型Float浮点数据类型与数值型等价提供此类型是为了和早期版本的兼容双精度型Double(1)用于在表中存储精度较高、位数固定的数值;(2)与数值型数据不同,在向表中输入数据时小数点的位置由输入的数值决定。整型Integer(1)整型字段在表中占4个字节,以二进制形式存放;(2)比数值型字段占用的空间要少得多。备注型Memo(1)用于在表中存储数据块;(2)备注字段含有4字节的引用,指向真正的备注内容;(3)备注数据的真正大小取决于用户实际输入的内容;(4)表中记录的备注型字段数据保存在单独的文件中,文件名与表名相同扩展名为.fpt。通用型General(1)用于在表中存储OLE对象;(2)通用字段含有4字节的引用,指向真正的内容:电子表格、字处理文档或另一个应用程序创建的文件等;(3)通用字段的真正类型和数据大小取决于创建这些对象的OLE服务器,以及这些OLE对象是以链接方式还是以嵌入方式与该应用程序相联系。若是链接OLE对象,则表中只含有对数据以及创建这些数据的应用程序的引用,若是嵌入OLE对象,表中将含有相关数据的副本及对创建这些数据的应用程序的引用。2.2数据存储容器常量、变量、数组、记录、对象称存储数据的容器。2.2.1标识符(名称)命名规则2.2.2常量2.2.3内存变量2.2.4数组2.2.5字段2.2.6对象2.2.7不同数据存储容器的作用域2.2.1名称命名规则(1)由字母、数字、下划线和汉字符号组成;(2)名称不能以数字开头,系统预定义了许多系统变量均已下划线开头,用户应避免使用下划线开头的名称,且表的字段名不允许以下划线开头;(3)名称的长度在1~128个字符之间,除自由表字段名、表的索引标识名≤10个字符;(4)不能使用系统保留字;(5)文件名的命名规则由所用的OS决定,但在应用中文件的命名应遵守上述规则,否则可能会发生在命令中无法引用该文件的情况(如,文件名若包含空格,在命令中引用文件时需给文件名加引号)。2.2.2常量常量(Constants):数据项的值在整个操作过程中保持不变常量据其数据类型分为6种,不同类型的常量采用不同的定界符表示(1)数值型常量(2)货币型常量(3)字符型常量(4)逻辑型常量(5)日期型常量和日期时间型常量编译时常量:在设计阶段先预定义一个具体值,以后凡需用到此值的地方用该值代替,可为任何一种数据类型。一经改动,可影响到整个应用程序。不能再用作为变量名,不能被赋值。#definemin0数值型常量(1)由数字、小数点、正负号组成(2)在内存中占8个字节(3)可用浮点表示法来表示特大或特小的数如,1.23E20(1.23X1020),2.34E-20(2.34X10-20)货币型常量(1)表示货币型常量时,需在数字前加上美元符号$;(2)在内存中占8个字节;(3)货币型常量无浮点表示法$100.35,$2104字符型常量(1)又称为字符串,是由字符串定界符括起来的一串字符;(2)3种字符串定界符:’’,””,[],注意不能使用中文标点的‘’,“”,且定界符必须成对匹配,若某定界符本身也是字符串的内容,则用另一种定界符;(3)不包含任何字符的串(””)称为空串,与空格串(””)不同;(4)字符串中的字母,大小写不等价。逻辑型常量(1)逻辑真常量的表示:.T..t..Y..y.(2)逻辑假常量的表示:.F..f..N..n.(3)在内存中占一个字节(4)字母前后的点符号(.)是逻辑常量的定界符,不可省略日期型常量和日期时间型常量(1)定界符:{}(2){}内包含年月日时分秒等,各部分之间以分隔符进行分隔,系统默认的分隔符年月日之间用/,时分秒之间用:(3)VFP支持的格式:传统的日期格式和严格的日期格式(4)VFP6.0及以上版本的默认格式为严格的日期格式,若要使用传统的日期格式,应用setstrictdate命令设置setstrictdate命令setstrictdate命令功能:设置是否对日期格式进行检查语法格式:setstrictdateto0|1|20—不进行严格的日期格式检查1—进行严格的日期格式检查2—进行严格的日期格式检查,且对CTOD(),CTOT()函数也进行严格的日期格式检查传统的日期格式是VFP5.0及以前版本使用的默认格式受到setdate,setcentury命令的影响默认格式为美国日期格式,语法形式为:{mm/dd/yy[hh:[mm][:ss]][a|p]}严格的日期格式是VFP6.0及以上版本的默认格式不受setdate等命令的影响语法形式:{^yyyy/mm/dd[hh:[mm][:ss]][a|p]}如,{^2006-01-01},{^2006-01-018:30p}空日期用{}表示2.2.3内存变量变量(Variables):内存中的一个存储单元的位置,变量名是存储位置的符号标识。可为任意数据类型,可随时改变。VFP中称为内存变量。(1)变量的创建(2)控制变量的访问(3)变量和字段同名时,字段优先(4)内存变量的保存与恢复变量的创建无需特别申明需要时可用STORE命令或“=”进行赋值,赋值的同时完成变量的创建,且确定了该变量的数据类型例,store5toa,b,c&&可将同一表达式的值赋给多个内存变量name=“VFP”&&只能将表达式的值赋给一个内存变量控制变量的访问变量只在应用程序运行时或创建它的工作区中存在(1)LOCAL指定局部变量:创建的变量或数组只能在创建其程序中使用、修改,不能被更高层或更低层的程序访问
所属的程序停止运行时,将被释放(2)PRIVATE指定私有变量:将调用程序中定义的变量和数组在当前程序中隐藏起来,用户可在当前程序中重新使用和这些变量同名的变量,而不影响其原始值。一旦程序停止,可重新被访问。举例说明(3)PUBLIC指定全局(公共)变量:当前工作期中任何运行的程序都能使用和修改变量、数组,命令窗口中创建的变量、数组自动赋为全局变量程序代码1:localaa=3??af()??afunctionfprivateaa=5??aendfunc运行结果:353程序代码2:publicaa=3??af()??afunctionfa=5??aendfunc运行结果:355变量和字段同名变量和字段同名时字段具有更高的优先权可在变量名前加m.或m->前缀来引用它们例,usexsxm='张洪'(xm是新创建的内存变量,不能单独利用赋值符号=完成字段变量的赋值)?xm?m.xm,m->xm,xs.xm,xm&&变量,变量,字段,字段use内存变量的保存与恢复内存变量是系统在内存中设置的临时单元,退出VFP数据丢失可用saveto命令将内存变量保存到文件中,以便以后使用可用restorefrom命令将内存变量文件中保存的内存变量恢复语法格式:savetoFileName[alllikeSkeleton|allexceptSkeleton]restorefromFileName[additive]2.2.4数组数组(Arrays):由一系列有序数据(元素)构成,可用数组名和序号引用元素,可是任意数据类型。(1)数组的声明(2)数组元素赋值(3)使用说明数组的声明绝大多数情况下,数组在使用时必须预先声明声明方式:DECLAREDIMENSION私有数组PUBLIC全局数组LOCAL局部数组定义数组的格式:DECLARE|DIMENSION|PUBLIC|LOCAL数组名(行数[,列数])数组元素赋值声明后每个元素默认为.F.可使用数组名和元素位置赋值,如,a(2)=3,b(2,3)=2可使用数组名整体赋相同的值,如,a=32还可使用scatter,gather,copytoarray,appendfromarray命令在数组元素与表的记录之间进行值传递使用说明(1)再次定义数组,是对原数组的扩展(即使维数不同,对已存在的数组再次定义,原数组元素的值会被继承)(2)二维数组可以作为一维数组使用(3)同一数组的不同元素可以赋不同数据类型的值2.2.5字段字段(Fields):是表中的记录中拥有特定数据类型的命名位置,可以是任意数据类型或字段类型其数据类型在表设计阶段由表设计器进行设置,或运行时由CREATETABLE确定2.2.6对象对象(Objects):对象是类的实例。类:是对于拥有数据和一定行为特征的对象集合的描述。VFP对象可以是表单、表单集、或控件。可利用对象完成应用程序中需一致性、依赖性的行为,减少代码量并提高代码的重用性。对象有属性,方法,并能响应特定的事件。可通过事件、属性、方法处理对象。创建对象:表单设计器,或CREATEOBJECT()函数等2.2.7不同数据存储容器的作用域容器作用域举例常量私有#definemin0变量公有、私有或局部a=7数组公有、私有或局部b[2,3]=123字段永久存储,当保存此记录的表被打开时才可访问REPLACEkcWITH“英语”对象属性通过对象和对象容器层次被引用FrmA.txtkc.Value=“大学物理”数据的作用域取决于其在程序中声明的方式和位置2.3运算符运算符(Operators)用来处理同种类型的数据。在VFP中可分为如下几类:(1)数值运算符
(2)字符运算符
(3)日期和日期时间运算符
(4)关系运算符
(5)逻辑运算符
数值运算符又称为算术运算符。按优先级高低排列,VFP中提供的数值运算符如下表所示。运算符操作举例数值运算符()子表达式分组,()中的优先
?8*(3+2)
**或^乘方?5**2+2^2*、/乘、除?1/2*4
%模?5%3+、-加、减略字符运算符作用:连接、比较字符型数据。运算符操作举例字符运算符+将字符串连接在一起。参加连接的串可以是字符型常量、字符型字段、字符型变量、返回值为字符型的函数。结果仍是字符型?"Visual"+"FoxPro"?"今天是"+dtoc(date())-删除操作符左侧字符串尾部的空格后连接起来(空格后置)?"abc"-"de"+"123"$比较。查看一个串(左)是否包含在另一个串(右)中结果为逻辑值?"96"$"96001"日期和日期时间运算符运算符操作举例日期和日期时间运算符+相加?{^2006/3/1}+10?{^2006/03/018:10:20a}+10-相减?{^2006/3/1}-10?{^2006/03/018:10:20a}-10?{^2006/3/10}-{^2006/3/1}?{^2006/03/018:10:20a}-{^2006/03/017:10:20a}注意:(1)不能对两个日期型(或两个日期时间型)数据进行相加;(2)日期型和日期时间型数据不能相减。关系运算符运算符操作举例关系
运算符<小于比较?200<500>大于比较?"abc">"adc"=等于比较a=50(换行)?a=30<>或#或!=不等于比较?a!=8<=小于或等于比较?a<=80>=大于或等于比较?xh>="960001"==字符串精确等于比较?xm=="王小二"使用说明关系运算符使用说明(1)可用于任意类型数据的比较,但要求运算符两侧的数据类型相同或一致(2)运算结果为逻辑值(3)有关字符串的比较A字符串比较时,系统对两个串的字符从左至右逐个进行比较,一旦发现两个对应的字符不同,就根据这两个字符的排序序列决定其大小B两个比较字符串的运算符“=”与“==”的区别字符的排序序列字符排序序列的设置分为三种情况:(1)机器序列(Machine):按照机内码顺序排序,从小到大依次是,空格、大写字母、小写字母、一级汉字(按拼音排序)、二级汉字(按笔画排序);(2)拼音序列(PinYin):是系统默认的字符序列,汉字按拼音序列排序,西文字符从小到大是,空格、小写字母、大写字母;(3)笔画序列(Stroke):汉字按笔画序列排序,西文字符从小到大是,空格、小写字母、大写字母。具体设置:(1)工具/选项,“数据”选项卡中进行设置(2)命令:setcollateto“Machine”|”PinYin”|”Stroke”“=”与“==”的区别(1)“=”,受setexact命令影响SETEXACTOFF:默认值,右端表达式结尾前的每个字符都相匹配例:SETEXACTOFF&&左部匹配?"ABCD"="ABC"&&.T.?"ABC"="ABCD"&&.F.SETEXACTON:每个字符都相匹配;忽略表达式结尾的空格;比较时,在较短的表达式右边加上空格,与较长者匹配例:SETEXACTON?"ABCD"="ABC“&&.F.?"ABC"="ABC"&&.T.(2)“==”,不受setexact命令影响,只有长度相等且各个个字符都相同时,两串才相等,结果为.T.。逻辑运算符运算符操作举例逻辑运算符()分组子表达式。改变表达式中的运算顺序?.t.and(.t.or.f.)NOT或!逻辑“非”。取反一个逻辑值?not.f.?!.f.AND逻辑“与”。对两个逻辑值进行“与”操作?.t.and.f.OR逻辑“或”?.t.or.f.用于操作逻辑类型的数据,运算结果为逻辑值。按优先级高低排列,VFP中提供的逻辑运算符如下表所示。2.4函数(Function)概念:一个预先编制好的计算模块,可供用户或程序调用。参数(Argument):供函数或过程操作的一个值,一个函数可接收若干个参数。返回值:返回单个值(所以函数调用可嵌入一个表达式)分类:系统函数和用户自定义函数函数调用的语法格式:函数名([参数1[,参数2[,…]]])包含一对()以与命令区别。2.4.1系统函数的分类2.4.2常用函数2.4.1系统函数的分类VFP提供的函数有上百种之多按功能可分为五大类,每一大类又可分为若干功能更明确的小类参见P35表2_8(1)数据类型类包括:数值函数,字符函数,日期/时间函数,数据转换函数(2)数据库类包括:数据库函数,字段函数,索引函数,记录函数,关系函数,表函数。(3)环境类包括:环境函数,文件管理函数。(4)输入输出类包括:键盘和鼠标输入函数,菜单函数,打印函数,窗口函数。(5)程序设计类包括:数组函数,调试和错误处理函数,低级文件函数,面向对象程序设计函数。2.4.2常用函数应从函数的功能,语法,及返回值等方面掌握函数数值函数字符函数日期/时间函数数据转换函数其它常用函数数值函数(1)Abs(nExpression)——返回指定数值表达式的绝对值(2)Max(eExp1,eExp2[,eExp3…])——求最大值(3)Min(eExp1,eExp2[,eExp3…])——求最小值(4)Int(nExp)——计算指定数值表达式的值,并返回其整数部分,不进行四舍五入(5)Mod(nDividend,nDivisor)——求余数(6)Round(nExp,nDecimalPlaces)——按指定的小数位数对数值表达式四舍五入,若小数位数为负数,返回结果在小数点左端包含若干个零。(7)Sqrt(nExp)——返回指定数值表达式的平方根(8)Rand()——返回0-1之间的一个随机数举例说明数值函数举例说明?int(20.9)&&20?round(1234.1962,3)&&1234.196?round(1234.1962,2)&&1234.20?round(1234.1962,-2)&&1200?40*rand()+20&&返回一个介于20—60之间的一个随机数Mod(nDividend,nDivisor)(1)被除数中的小数位数决定了返回值中的小数位数;(2)除数为正,返回值为正;除数为负,返回值为负。例,?mod(5,3)&&2?mod(5.1,3)&&2.1?mod(5,-3)&&-1?mod(5,3.6)&&1?mod(-5,3)&&1?mod(-5,-3)&&-2字符函数(1)Alltrim(cExp):返回删除字串前后空格后的串?alltrim('abcd')(2)Trim(cExp):返回删除字串后缀空格后的串?trim('abcd')(3)Len(cExp):返回字串长度?len('abcd')&&8(4)At():返回一个字符表达式在另一个字符表达中的位置(5)Substr():取子串(6)Left(cExp,nExp):从串cExp最左边开始取指定数目nExp个字符构成的串,例,?left('abcdefghi',4)&&abcd(7)Right(cExp,nExp):从串cExp最右边开始取指定数目nExp个字符构成的串,例,?right('abcdefghi',4)&&fghi(8)Space(nExp):返回由nExp指定数目的空格构成的串函数at()At(cSearchExp,cExpSearched[,nOccurrence]):返回一个字符表达式在另一个字符表达中出现的位置,若未出现,返回0。cSearchExp:搜索表达式cExpSearched:被搜索表达式nOccurrence:指定搜索表达式在被搜索表达式中第几次出现,缺省时为1。函数at()区分搜索字符的大小写函数atc()不区分搜索字符的大小写例,?at('ab','ddAB')&&0?at('ab','ddab')&&3?atc('ab','ddAB')&&3取子串函数SubstrSubstr(cExp,nStartPosition,[,nCharactersRturned])功能:从给定的cExp或备注字段中返回一个子串。nStartPosition:返回的字串在cExp或备注字段中的位置。nCharactersRturned:返回的字符个数,缺省时返回cExp结束前的全部字符。例,?substr('abcdefghi',4)&&defghi?substr('abcdefghi',4,3)&&def日期/时间函数(1)Date():返回由OS控制的当前系统日期,其格式受控于:setcentury,setdate,setmark命令的设置(2)Datetime():返回当前的系统日期和时间,其格式受控于:setcentury,setdate,setmark,sethours,setseconds命令的设置(3)Dow(dExp|tExp):返回dExp|tExp是一周的第几天注意第一天为星期日(4)Day(dExp|tExp):返回指定表达式的值是该月的第几天(5)Month(dExp|tExp):返回指定表达式的值中的月份值(6)Year(dExp|tExp):返回指定表达式的值中的年份值(7)Time():以24小时制8位字符串格式返回当前系统时间例,?len(time())数据转换函数(1)Asc(cExp):返回字串最左边字符的ASCII码。(2)Chr(nExp):计算nExp的值,然后以该值为ASCII代码返回其对应的字符。(3)Val(cExp):字符串—〉数值(4)Dtoc()和Ttoc()函数:日期|时间—〉字符串(5)Ctod()和Ctot()函数:字符串—〉日期|时间(6)Str():数值—〉字符串Val(cExp)返回由数字组成的cExp的数值。(1)cExp最多由16位数字组成,若超过16位,则对其圆整。(2)Val()函数从左至右返回cExp中的数字,直到遇到非数值型字符为止。(3)若cExp的第一个字符不是数字、+、-,则返回0。例,?val("12345678901234567890")&&1.23456789012345600E+19?val("123456abc")&&123456.00?val("ab123456")&&0.00Dtoc()和Ttoc()函数Dtoc(dExp|tExp[,1])Ttoc(tExp[,1|2])参数1:指定以年月日顺序且无分隔符的形式返回字符型日期;参数2:指定仅返回含时间部分的字符型时间。例,t={^2006/03/018:10:20a}?dtoc(t)&&03/01/06?dtoc(t,1)&&20060301?ttoc(t)&&03/01/0608:10:20AM?ttoc(t,1)&&20060301081020?ttoc(t,2)&&08:10:20AMCtod(
)和Ctot(
)函数Ctod(cExp):把cExp的值转换成日期型数据;Ctot(cExp):把cExp的值转换成日期时间型数据。(1)cExp的范围:1/1/1000至12/31/9999(2)cExp的默认格式:mm/dd/yy,可用setdate,setcentury更改默认格式(3)若输入时未指定世纪,则默认为是当前世纪。例,t="03-15-2006"?ctod(t)&&03/15/06?ctot(t)&&03/15/0612:00:00AMStr()函数Str(nExp,[,nLength[,nDecimalPlaces]]):将nExp转换为字符串。nLength:指定返回字符串的长度(包括小数点和小数点右边每个数字所占的字符),缺省时默认宽度为10。nDecimalPlaces:指定返回字符串的小数位数,缺省时默认宽度为0。nLength>数值宽度:前导空格填充。nLength<整数部分的数字位数:返回一串星号,表示数值溢出。nDecimalPlaces<nExp的值中的小数位数:截去多余的数字。数值宽度>10位,且未指定nLength:以浮点数形式输出对应的字符串。例,?str(123.45)&&_______123(_表示空格)?str(123.45,5)&&__123(未指定小数位数)?str(123.45,5,3)&&__123(宽度不够,首先保证整数)?str(123.45,2)&&**(数值溢出)?str(123.45,5,1)&&123.5(截去多余的小数位)?str(1234567890)&&123567890?str(12345678901)&&_1.234E+10?str(12345678901,11)&&1235678901其它常用函数(1)between()(2)inkey()(3)type()(4)iif()(5)diskspace()(6)file()(7)messagebox()(8)getfile()between()格式:between(eTestValue,eLowValue,eHighValue)eTestValue:测试值eLowValue:指定范围的下界eHighValue:指定范围的上界功能:判断eTestValue的值是否在eLowValue与eHighValue之间返回:.T.,.F.,NULL(若eLowValue或eHighValue为NULL值,则返回NULL值)例:?between('a','a','z')&&.T.?between('a','A','z')&&.F.?between('2','1','5')&&.T.?between(2,1,5)&&.T.inkey()格式:inkey([nSeconds])功能:返回一个键码值,该值对应于键盘缓冲区中第一个按键操作nSeconds:对键击的等待时间;缺省时,inkey()函数立即返回一次键击的值;为0时,inkey()函数一直等待到有键击为止。若没有按下键,inkey()函数返回0;若在等待时间按下若干个键,inkey()返回第一个键的值。例:?inkey(100)&&若在100秒内按abcd…等键,返回97?inkey(0)&&若按1,返回49type()格式:type(cExpression)功能:返回表达式cExpression值的类型cExpression:表达式,且必须用引号例:?type('date()')&&D?type('datetime()')&&T?type('time()')&&C?type('.t.and.f.')&&L?type(‘a=5’)&&U(变量a未预先赋予数值型的值,U表示不确定的类型)a=5?type('a')&&N?type('a=5')&&L?a=5&&.T.iif()条件函数格式:iif(LExp,eExp1,eExp2)功能:根据表达式LExp的值返回eExp1,eExp2中的一个值;LExp的值为条件,当条件为真时返回eExp1的值,否则返回eExp2的值eExp1,eExp2的类型一般相同,但也可不同例:a=3?iif(a!=3,"y",0)&&0a=5b=6max=iif(a>b,a,b)?max&&6?iif(dow(date())=1ordow(date())=7,'今天休息','今天上班')diskspace()格式:diskspace()功能:返回当前磁盘驱动器上可用存储空间的大小(字节数)例:setdefaulttod:\?diskspace()file()格式:file(cFileName)功能:测试辅助存储器上是否存在指定的文件cFileName:用于指定被测试文件的一个字符串返回:若指定文件存在,返回.T.,否则返回.F例:?file('d:\jxgl\xs.dbf')messagebox()格式:messagebox(cMessageText[,nDialogBoxType[,cTitleBarText]])功能:显示一个用户自定义对话框cTitleBarText:指定对话框的标题缺省时显示“MicrosoftVisualFoxpro”返回值:函数的返回值表明选取了对话框的哪个按钮cMessageTextcMessageText:指定在对话框中显示的文本若文本较长需换行,可在表达式中包含回车符chr(13)例:messagebox('Hello!')messagebox('Hello!'+chr(13)+'大家好!')nDialogBoxType指定对话框中的按钮和图标、显示对话框时的默认按钮以及对话框的行为,缺省时值为0。数值对话框按钮0“确定”1“确定”,“取消”2“终止”,“重试”,“忽略”3“是”,“否”,“取消”4“是”,“否”5“重试”,“取消”数值图标16“停止”32“问号”48“惊叹号”64“信息(i)”数值默认激活按钮0第一个按钮256第二个按钮512第三个按钮例,messageb('Error,inputagain!',4+48+0)函数名的缩写返回值函数的返回值表明选取了对话框的哪个按钮返回值按钮1确定2取消3放弃4重试5忽略6是7否例,?messageb('Again!',4+48+0)函数名的缩写getfile()格式:getfile([cFileExtensions][,cText])功能:显示“打开”对话框cFileExtensions:文件扩展名用于指定没有选择“全部文件”时,列表中显示的扩展名cText:指定文件文本框前的标签返回:选定文件的名称例:a=getfile('pjx','项目文件名')?acText参数cFileExtensions参数2.5表达式表达式(Expression):是通过运算符将变量、常量、函数、字段名等组合起来可以进行运算的式子。单个的常量、函数、字段名、控件及属性都为表达式,一般而言,可使用常量的地方都可使用表达式表达式求值的结果:单个值表达式的应用:设置字段和记录的有效性规则,表示查询条件等表达式的类型:字符表达式,日期表达式,算术表达式,逻辑表达式,名称表达式和宏替换表达式的运算:表达式自左向右进行运算。在运算过程中,当运算出某个中间结果后,若已经能确定最终的结果,则将终止本逻辑表达式中后面部分的运算字符表达式(1)组成:由字符运算符(+、_、$)、字符类型的字段、返回字符值的函数、字符型变量、数组元素、字符常量组成(2)运算结果:字符型,逻辑型(如,表达式‘a’$‘ab’结果为.T.)日期表达式(1)组成:由日期运算符、Date或DateTime类型的字段、返回日期或日期和时间的函数、日期或时间型的变量和数组元素、Date或DateTime类型的常量组成(2)运算结果:日期型,日期时间型,数值型算术表达式(1)组成:由算术运算符、Float、Double、Integer、Numeric类型的字段,返回一个数值数据的函数,包含数值数据的变量和数组元素,数值常量组成(2)运算结果:数值型逻辑表达式(1)组成:由逻辑运算符和逻辑类型字段、返回逻辑值的函数、包括逻辑值的内存变量或数组元素、逻辑常量、任何一个返回逻辑值的表达式组成(2)运算结果:真(.T.)、假(.F.)名称表达式和宏替换(1)名称表达式定义:名称表达式是由圆括号括起来的一个字符表达式,该表达式可以是单个变量或数组元素作用:用来替换命令和函数中的名称,为命令和函数提供了灵活性举例说明名称表达式的具体应用(2)宏替换作用:宏替换与名称表达式具有相似的作用,可使用宏替换的方法用内存变量替换名称使用方式:将连字符&置于变量名前,告诉VFP将此变量值当作名称使用,可使用一个点符号(.)结束宏替换表达式举例说明宏替换的具体应用(3)宏替换与名称表达式的区别宏替换与名称表达式的区别同:都可以用变量或数组中的值来替换名称异:宏替换的范围更广些,而名称表达式的运行速度更快些(1)宏替换可以替换整个命令,而名称表达式不行(2)宏替换可以作为其它表达式的组成部分,而名称表达式不可以(3)某些命令和函数中不能使用名称表达式usejsf='js.xm'locatefor&f=‘高山’&&可以实现正确定位locatefor(f)=‘高山‘&&不能实现正确定位a='dir‘&a(a)&&出错s='xh'&s='0118101'(s)='0118102'&&出错store'0181202'to(s)&&正确执行?&s,(s)&&结果为0118102xha=5b=10c='a'?max(&c,b)?max((c),b)&&出错名称表达式具体应用(1)用名称表达式替换命令中的变量名a=100b='a'(b)=10store10to(b)&&相当于store10toa?a&&结果为10(2)用名称表达式替换命令中的文件名a='xs'use(a)&&相当于usexs(3)可用字符表达式来构成一个名称表达式a='jxsj'b='xs'use(a+'!'+b)&&相当于usejxsj!xs(4)使用多个名称表达式时,以逗号将各个名称分隔,形成名称列表usexsf1='xh'f2='xm'browsefields(f1),(f2)小结:将名称保存到变量或数组元素中,以后就可以用名称表达式(用小括号括起内存变量)来代替在命令或函数中所需的名称宏替换的具体应用例1:x='1'y='2'm1y=34?m&x.y&&相当于?m1y
例2:a=100ab=100s='a'store200to&sstore300to&s.b?a,ab2.6空值处理支持空值的作用:降低了表达未知数据的难度,且可更方便地与含有NULL值的Access或其他SQL数据库产品协同工作(1)NULL值的特点(2)NULL值在命令和函数中的行为(3)NULL值在逻辑表达式中的行为NULL值的特点(1)等价于没有任何值(2)与0、“”、空格不同(3)排序优先于其他数据(4)在计算过程中或大多数函数中可用到(5)会影响命令、函数、逻辑表达式和参数的行为,VFP支持的NULL可出现在任何使用值或表达式的地方(6)可用ISNULL()函数判断是否为NULL值(7)NULL值不是一种数据类型,当给字段或变量赋NULL值时,该字段或变量的数据类型不变,只是值变为NULL值。a='10'a=NULL?type('a')&&CNULL值在命令和函数中的行为以下通用规则适用于传递给命令和函数的NULL值:(1)给命令传递NULL值将产生错误(2)接收.NULL.为有效参数的函数其结果亦为.NULL.(3)若向本应接受数值型参数的函数传递.NULL.值参数,将产生错误(4)当传递NULL值时,ISBLANK()、ISDIGIT()、ISLOWER()、ISUPPER()、ISALPHA()和EMPTY()返回.F.,而ISNULL()返回.T.(5)INSERT-SQL和SELECT-SQL命令通过ISNULL和ISNOTNULL子句处理NULL值。在这种情况下,INSERT、UPDATE、REPLACE将NULL值放入记录中(6)SQL合计函数将忽略NULL值,若所有值皆为NULL,则VFP合计函数产生.NULL.,否则任何NULL值将被忽略相关函数的返回值参数EMPTY()ISBLANK()ISNULL()NULL.F..F..T.空白字段、空字符串、空格字符串.T..T..F.0.T..F..F.NULL值在逻辑表达式中的行为逻辑表达式表达式的结果X=.T.X=.F.X=.NULL.XAND.NULL..NULL..F..NULL.XOR.NULL..T..NULL..NULL.NOTX.F..T..NULL.2.7程序设计基础程序相关概念程序的创建与运行程序结构过程与用户自定义函数程序相关概念程序:是为了完成某一具体任务而编写的一系列指令。VFP程序由一系列代码组成,代码可以包括以命令形式出现的指令、函数或VFP可以理解的任何操作。且VFP将过程化程序设计与面向对象程序设计结合在一起,帮助用户创建出功能强大、灵活多变的应用程序。在程序中能完成的工作都可以通过界面或命令操作方式来完成,而运行程序具有明显的优势:程序可被修改并重新运行;可从菜单、表单和工具栏启动程序;一个程序可调用其它程序;具有在命令窗口中所不能使用的结构化程序设计命令。程序的创建与运行创建程序文件(1)文件/新建菜单命令(2)常用工具栏/新建按钮(3)项目管理器:代码选项卡/程序/新建(4)命令窗口:modifycommand[Filaname|?]运行程序(1)常用工具栏/“!”按钮(2)项目管理器:选择程序文件/运行(3)命令窗口:doProgramName[withParameterList]运行程序文件的过程一旦运行程序文件,系统会自动地对程序文件(*.prg)进行编译,生成伪编译程序(*.fxp);执行程序时,系统实际上是执行*.fxp文件;伪编译是计算机系统中对解释性程序语言源代码保密的一种常用技术,文本格式的源代码经过伪编译成为二进制机器码,并可被特定的程序读懂。程序结构程序结构——根据不同的情况和条件,控制程序去执行相应的语句序列程序结构主要分为:(1)顺序结构,按照顺序依次执行程序中的命令;(2)分支结构,根据条件的结果执行不同的操作;(3)循环结构,使得一组语句重复执行若干次。顺序,分支,循环可相互嵌套(在一种结构中包含任何一种结构),一个程序从总体上来说是一个顺序结构,而其中的各个子部分则是各种结构的组合和嵌套。程序结构的嵌套嵌套:在一种程序结构中包含另一种程序结构例,clearfori=1to9forj=1toi??str(j,1)+'*'+str(i,1)+'='+str(i*j,2)+space(2)endfor?endfor分支结构两种实现分支结构的语句:(1)IF…ELSE...ENDIF语句(2)DOCASE…ENDCASE语句语法格式与执行过程举例说明语法格式:IF条件表达式[THEN]命令组1[ELSE命令组2]ENDIF执行过程:若含有ELSE子句,当条件表达式为.T.时,执行命令组1,否则执行命令组2;若不含有ELSE子句,当条件表达式为.T.时,执行命令组1,否则执行ENDIF后面的语句。…ifa>bmax=aelsemax=bendif?max…ifx>=0ifx>0y=1elsey=0endifelsey=-1endifDOCASE语句语法格式与执行过程语法格式:DOCASECASE条件表达式1命令组1[CASE条件表达式2命令组2……CASE条件表达式N命令组N][OTHERWISE其他命令组]ENDCASE执行过程:从第一个CASE开始,判断其后的条件表达式是否为.T.,当遇到第一个结果为.T.的表达式时,执行它后面的命令组,跳过下一个CASE和ENDCASE之间的所有语句,若包含了OTHERWISE语句,当所有的CASE表达式的值为.F.时,执行OTHERWISE后的其它命令组。a=1b=-2c=1delta=b*b-4*a*cDOCASECASEdelta>0?"方程有两个不相等的实数根:"??(-b+sqrt(delta))/(2*a)??(-b-sqrt(delta))/(2*a)CASEdelta=0?"方程有两个相等的实数根:"??-b/(2*a)CASEdelta<0?"方程有两个复根:"real_part=-b/(2*a)img_part=sqrt(-delta)/(2*a)
?ALLTRIM(STR(real_part))+"+"ALLTRIM(STR(img_part))+"i"
?ALLTRIM(STR(real_part))+"-"ALLTRIM(STR(img_part))+"i"ENDCASE循环结构循环:使得一组语句组重复执行若干次。可预先指定要循环的次数,也可不预先指定;只要某个条件成立,就可一直循环下去,直到条件不成立。三种实现循环的语句(1)FOR…ENDFOR计数循环(2)DOWHILE…ENDDO根据某条件决定是否结束循环(3)SCAN…ENDSCANLO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 言语治疗技术失语症书写抄写评估
- 客服收银岗位培训
- 小巷管家社会工作专业教学案例宝典
- 物联网技术在智慧养老中的应用智慧养老技术概论
- 项目管理工具之约束三角形社会工作专业教学案例宝典
- 医疗垃圾科普
- 关于培训的课件
- 中班科学活动土壤
- 培训结营仪式流程
- 数学学案:课前导引数学归纳法原理
- 钢结构工程冬季施工方案
- 2024-2030年中国度假酒店行业未来发展趋势及投资经营策略分析报告
- 2024-2030年中国安防行业发展现状及竞争格局分析报告权威版
- ktv营销业绩提成合同模板
- 英语-重庆市2025年普通高等学校招生全国统一考试11月调研试卷(康德卷)试题和答案
- 桩基及基坑支护工程技术施工方案(三篇)
- 招聘笔试题与参考答案(某大型国企)2024年
- 安徽理工大学《岩土力学与工程》2021-2022学年第一学期期末试卷
- 追觅科技在线测评逻辑题
- 有限空间应急演练专项方案
- 2024-2030年中国演艺行业发展分析及发展前景与趋势预测研究报告
评论
0/150
提交评论