您好,欢迎访问三七文档
第3章程序设计基础3.1数据类型3.2操作符和表达式3.3流程控制3.4过程和自定义函数3.5变量的作用范围3.6数据库的存储过程和触发器3.1数据类型VFP中,存储数据有下列方式:(1)表的记录。表打开后,通过引用字段名就可得到对应该字段当前记录的内容(值)。通过交互方式和操作表的命令可修改字段在记录中的内容。(2)对象。(3)常量、变量和数组。在程序设计时经常要用这些数据元素存储数据。这些记录、对象、常量、变量和数组称为存储数据的容器。3.1.1常量常量是一个数据项,该数据项在程序运行过程中保持不变。1.一般常量一般常量就是直接描述的常量。下列常量都是一般常量:数值型常量:-25,128.43,0。字符型常量:‘01002’,“王红”,[128.43],‘’。‘’表示空串。日期型常量:{^2000.08.19},{},CTOD(“06/18/99”)。{}表示空日期。字符串表示日期常量时需用CTOD()函数进行转换,字符串表示日期的格式与当前系统默认的日期格式一致。当前系统默认的日期格式可通过SETDATE[TO]命令进行设置。逻辑型:真为.T.,.Y.。假为.F.,.N.。2.符号常量符号常量就是在程序中为一个符号先定义一个值,程序中凡使用该值的地方就写上该符号常量。编译该程序时,编译程序将程序出现该符号常量中的地方用定义的值直接代替。符号常量又称编译常量。使用符号常量的好处是当值需要改变时只需改变符号常量定义的值即可。注意:程序中不能对符号常量重新赋值,符号常量不是变量。符号常量定义:#DEFINE符号常量名值例如,#DEFINEPI3.141593.1.2变量1.变量赋值变量赋值的语句有下列两个:格式:变量名=值STORE值TO变量名表有些命令对变量不需事先声明就可直接赋值。赋值的同时该变量就被创建,变量类型取决于赋予的值的类型。【例Ex_VFPStore】变量直接赋值。SETTALKOFFUSERY!工资情况SUM技能工资,(岗位工资+浮动工资)*1.2TOJN,GWFDFOR编号=”01”?JN,GWFDUSE运行后,结果自动产生变量JN和GWFD,并存放技能工资和(岗位工资+浮动工资)*1.2累加值3.1.2变量2.变量的引用在程序中变量可直接用变量名引用其值。如果当前打开的表中有与变量同名的字段名,这时用M.变量名引用该变量,而字段名可直接引用。【例Ex_Muse】变量的引用。USE基本情况编号=”04012”&&给内存变量“编号”赋值&&给字段名为“编号”赋值使用REPLACE或UPDATE命令?编号&&显示1号记录编号字段的内容?基本情况.编号&&显示1号记录编号字段的内容?M.编号&&显示04012下面列出字段值的引用和对象属性的引用方法:变量的引用:M.内存变量名字段值的引用:[[数据库名!]表名.]字段名对象属性的引用:对象名.属性名把这些引用统一起来,都可以认为是对象引用,可把M和表都看成对象。例如:#DEFINEPI3.14159S=PI*8*8THISFORM.TEXT1.VALUE=S3.1.2变量3.显示变量格式:DISPLAYMEMORY[LIKE文件名框架][NOCONSOLE][TOPRINTER[PROMPT]|TOFILE文件名]格式:LISTMEMORY[LIKE变量名框架][NOCONSOLE]|TOFILE文件名]可用LIKE变量名框架限制显示的变量名。框架可用*和?进行描述。TOPRINTER:显示记录送打印机打印。带PROMPT项,打印前打开打印对话框,用户可在该对话框中对打印机进行设置。TOFILE文件名:显示记录送到指定的文件中保存。4.变量的保存和恢复(1)保存变量格式:SAVETO文件名|MEMO备注字段名[ALLLIKE变量名框架|ALLEXCEPT变量名框架]该命令将当前内存变量保存到文件或备注字段中。ALLLIKE变量名框架:指定保存的变量范围。可使用*和?描述框架。ALLEXCEPT指定不保存的变量范围。(2)恢复变量格式:RESTOREFROM文件名|MEMO备注字段名[ADDITIVE]从保存变量的文件或备注字段中恢复变量到内存中。不覆盖当前已有内存变量。3.1.2变量5.内存变量的释放格式:RELEASE变量名表|ALL[LIKE变量名框架|EXCEPT变量名框架]【例Ex_Release】内存变量的释放。OLDDate=CTOD(“06/18/99”)NAME1=”肖文红”GZ1=1633NAME2=”朱平”GZ2=1834NAME3=”杨华”GZ3=1183DISPLAYMEMORY&&显示所有内存变量SAVETOMFILEDISPLAYLIKENAME*&&显示所有NAME打头的内存变量RELEASEALLEXCEPTGZ*DISPLAYMEMORY&&显示所有内存变量CLEARMEMORY&&清除所有内存变量RESTOREFROMMFILEDISPLAYMEMORY3.1.2变量6.变量和表(1)表字段到内存变量格式:SCATTER[FIELDS字段名表|LIKE字段名描述框架|EXCEPT字段名描述框架][MEMO]TO数组名|TO数组名BLANK|MEMVAR|MEMVARBLANK|NAME对象名[BLANK]说明:将当前表的当前记录中FILEDS指定的字段的值放到数组、内存变量或对象中。其中,内存变量的名字与字段名相同。选对象项,对象生成与字段名同名的属性,字段的值放入相应的属性中。选MEMO,则包含备注型字段。【例Ex_Scatter】表字段到内存变量。USE工资情况GO3SCATTERMEMVAR?M.其他工资,工资情况.其他工资&&值不同SCATTERNAMEGZ?GZ.其他工资,工资情况.其他工资&&值不同USEDISPLAYMEMORY3.1.2变量(2)内存变量到表字段格式:GATHERFROM数组名|MEMVAR|NAME对象名[FIELDS字段名表|LIKE字段名描述框架|EXCEPT字段名描述框架][MEMO]该命令用数组、内存变量或对象的值更新当前表的当前记录。【例Ex_Gather】内存变量到表字段。USE工资情况GO3M.其他工资=120?M.其他工资,工资情况.其他工资&&值不同GATHERMEMVAR?M.其他工资,工资情况.其他工资&&值相同USE3.1.3数组1.数组的定义数组就是变量名相同而下标不同的一组变量。数组用下列语句定。格式:DIMENSION数组名[下标最大值表]例如,DEMINSIONNAME[100],CJ[5,10]注意:由数据库操作命令存放结果的数组系统会自动建立。2.表数据传送到数组数组与表之间、变量与表之间都可交换数据,通过数组不仅传送的数据多、速度快,而且还具有自动定位、使用简单方便。数组与表之间的数据传送分为表数据到数组和数组数据到表两个方向。先介绍表数据传送到数组。格式:COPYTOARRAY数组名[FIELDS字段名][范围][WHILE条件1][FOR条件2][NOOPTIMIZE]将当前工作区中打开的表当前指针开始的若干记录的指定字段内容复制到指定数组中。3.1.3数组3.数组内容传送到表格式1:APPENDFROMARRAY数组名[FROM条件][FIELDS字段名表]将数组中的内容加到当前表中(不包括记忆型和通用型字段)。格式2:INSERTINTO表名FROMARRAY数组名|MEMVAR将数组或一组与表字段同名的内存变量中的内容插入或追加到指定表中。【例Ex_ACopy】设计程序,复制表中最后一条记录后再修改。USE工资情况GOBOTTOMCOPYTOARRAYTARRNEXT1APPENDFROMARRAYTARR&&表中不能有不许有重复记录的索引EDITUSEDISPLAYMEMORYLIKETARR*3.1.3数组4.操作数组的函数使用数组的函数很多,这里仅列出常用的操作数组的函数。(1)数组拷贝格式:ACOPY(原数组名,目标数组名[,原数组起始元素[,拷贝个数[,目标数组起始元素]]])(2)数组删除格式:ADEL(数组名,序号[,2])(3)文件名到数组格式:ADIR(数组名[,文件名框架[,属性]])该函数能得到指定目录中文件名框架的文件的情况。返回的数组中的内容如表3.1所示。属性描述的功能如表3.2所示。例如,ADIR(AA,”D:\RY_MIS\*.DBF”,”AD”)?AA[1,1],AA[1,2],AA[1,3],AA[1,4],AA[1,5]?AA[2,1],AA[2,2],AA[2,3],AA[2,4],AA[2,5]?AA[3,1],AA[3,2],AA[3,3],AA[3,4],AA[3,5]……3.1.3数组3.1.3数组(4)得到元素序号格式:AELEMENT(数组名,行号[,列号])(5)表结构到数组格式:AFIELDS(数组名)(6)数组插入格式:AINS(数组名,序号[,2])(7)得到数组大小格式:ALEN(数组名[,数字表达式])(8)数组定位格式:ASCAN(数组,待找的表达式[,开始位置[,需比较元素的个数]])(9)数组排序格式:ASORT(数组名[,排序起始元素[,要排序元素个数或行数[,排序方式]])(10)由序号得到下标格式:ASUBSCRIPT(数组名,元素顺序号,数字表达式)3.1.3数组【例Ex_Array】数组函数应用。DIMENSIONAA[5]AA[1]=2AA[2]=4AA[3]=1AA[4]=3AA[5]=5?AA[1],AA[2],AA[3],AA[4],AA[5]&&显示24135?ASCAN(AA,1)&&显示3=ASORT(AA)?ASCAN(AA,1)&&显示1?AA[1],AA[2],AA[3],AA[4],AA[5]&&显示12345=ADEL(AA,1)?ALEN(AA)&&显示4?AA[1],AA[2],AA[3],AA[4],AA[5]&&显示2345.F.3.2.1操作符1.数值操作符数值操作符用于进行数值运算,优先级从高到低为:+,-号**,^*,/,%+,-。例如:-12.4/3+562.字符操作符字符操作符用于进行字符运算,优先级从高到低为:+,-$。例如,职称+DTOC(出生时间),”王”$姓名3.日期操作符日期操作符用于进行日期运算,日期操作符没有优先级。例如,DATE()-出生时间+1,DATETIME()-{^2000.10.1.12:00PM}3.2.1操作符4.关系操作符关系操作符用于进行关系运算,关系操作符没有优先级。例如,工资=800,编号“”5.逻辑操作符逻辑操作符用于进行逻辑运算,优先级从高到低为:.NOT.,!.AND..OR.例如,职称=”工程师”.AND.DATE()-出生时间35各操作符之间优先级如下:数值操作符,字符操作符,日期操作符关系操作符操作符优先级在同一表达式中,优先级相同的运算符,则按从左到右的次序进行运算。括号()可以改变运算的优先级,运算时总是先算括号里面的。注意,括号必须成对出现。3.2.2常用函数1.数值函数lLEN(c)得到字符串c的长度(字符数)。例如:LEN(“01002”)=5USE基本情况LEN(姓名+职称)=14lINT(n)取数值n的整数部分。例如:INT(680.34)=680lRECNO()得到当前记录号。例如:USE基本情况?RECNO()值为1SKIP?RECNO()值为2SQRT(n)求n的算术平方根。2.字符函数lLEFT(c,n)取字符串c左边n个字符。例如:LEFT(“王红”,2)=”王”lRIGHT(c,n)取字符串c右边n个字符。lSUBSTR(c,n1,n2)取字符串c第n1个字符开始的n2个字符。lTRIM(c),RTRIM(c),LTRIM(c),ALLTRIM(c)去字符串c
本文标题:VisualFoxPro实用教程(第2版)(十一五国家规划)第03章程序设计基础
链接地址:https://www.777doc.com/doc-2854918 .html