VFP常用命令详解.docx
《VFP常用命令详解.docx》由会员分享,可在线阅读,更多相关《VFP常用命令详解.docx(37页珍藏版)》请在冰豆网上搜索。
VFP常用命令详解
大
中
小
VFP常用命令详解
VFP命令、函数及程序语句大全〔1〕
VFP命令是一种实现对数据库系统进行操作的动词或短语。
VFP命令可在VFP命令窗口中单独运行,也可编制成程序成批运行,由命令和函数编制的程序可对数据库系统进行自动、复杂的操作,使数据库系统应用起来更加友好、方便。
☐ VFP常用命令分类表
类别
命令
建立文件类
CREATE,MODIFY,COPY,SAVE等
数据库操作类
USE,CLOSE,COPY,MODIFYSTRUCTURE等
数据编辑类
BROWSE,EDIT,CHANG,REPLACE,UPDATE等
记录指针操作类
GOTO,LOCATE,SEEK,FIND,SKIP等
记录操作类
APPEND,DELETE,INSERT等
数据显示类
BROWSE,LIST,DISPLAY等
数据统计类
SUM,COUNT,AVERAGE,TOTAL等
存变量操作类
ACCEPT,INPUT,READ,SAVE等
程序控制类
DO,DOWHILE…ENDDO,IF…ENDIF等
系统设置类
SETTALK,SETDEFAULTTO等
☐ 命令格式
VFP命令一般由命令动词和控制短语构成。
一般格式:
命令动词[FROM<源文件>][TO<目标文件>][记录范围][FOR/WHILE<条件>]
[FIELDS<字段名表>]
[]表示可选,<>表示必选,/表示或选
例如:
〔1〕APPENDFROMC:
\RSDA.DBFFOR基本工资>100FIELDS编号,,职称,基本工资。
从C:
\RSDA.DBF表中把基本工资大于100元的记录添加到当前表添加字段为:
编号,,职称,基本工资。
〔2〕COUNTFOR职称="高工"TOGG统计高工的记录数到内存变量GG。
控制短语规定了对数据库操作的限制条件:
1.指向输入输出目标
FROM/TO
APPENDFROM,COPYFILETO<目标文件>
2.限制记录范围〔SCOPE〕
ALL所有记录
NEXT本记录后的第几个记录
RECORD<1>第1个记录
REST当前记录之后所有记录
3.选择字段
FIELDS<字段表>选择输入/输出的字段。
4.限制条件
FOR/WHILE<条件>
FOR基本工资>100.AND.基本工资<200
☐ 命令格式规则
命令的行为单位,一行书写不完,在未尾加上“;”第二行接着写。
必须以命令动词开头,动词后的短语顺序不限。
命令中大小写字母等效。
命令动词和关键字可以只写前4个字符。
不得用命令动词或关键字作为自定义变量、函数、程序名。
一.表结构的操作
1.创建表结构
命令1:
CREATE[路径][表名]
例子:
在A盘创建GZ2数据表。
CREATEA:
GZ2
命令2:
CREATE[新表名]FROM[旧表名]
例子:
在A盘由GZ1创建GZ3数据表。
CREATEA:
GZ3FROMA:
GZ1
命令3:
COPYSTRUCTRUETO[路径][表名]
例子:
在D盘生成一个与正在使用的表结构相同的新表文件MY
COPYSTRUCTRUETOD:
\MY
2.表结构的显示
命令:
LISTSTRUCTURE
DISPLAYSTRUCTURE
例子:
显示当前数据表在结构。
LISTSTRUCTURE
3.表结构的修改
命令:
MODIFYSTRUCTURE
作用:
显示表文件结构,并允许修改此表的结构
说明:
只有在用USE命令打开表文件以后,才能显示或修改表文件的结构。
例子:
修改当前数据表的结构。
MODIFYSTRUCTURE
二.表文件的打开和关闭
1.打开
命令:
USE表名[INDEX索引文件名][EXCLUSIVE]
例子:
打开A盘GZ1数据表。
USEA:
\GZ1
例子:
以独占方式打开当前表文件XX
USEXXEXCLUSIVE
2.关闭
命令:
USE
例子:
关闭当前打开的表。
USE
三.记录指针的定位
1.绝对定位
命令:
GO[TO]n|TOP|BOTTOM
说明:
n定位到第n条记录,TOP定位到最上面一条记录,BOTTOM定位到最下端一条记录
2.相对定位
命令:
SKIP[+|-]n
说明:
它以当前记录为基准前移〔-〕或后移〔+〕n个记录,不选任选项,则默认记录指针后移一条记录。
四.表数据的添加
1.记录的追加
命令:
APPEND[BLANK]
例子:
向当前数据表尾部追加记录。
APPEND
例子:
向当前数据表尾部追加一条空记录。
APPENDBLANK
2.记录的插入
命令:
INSERT[BLANK][BEFORE]
例子:
在当前记录后插入一条空记录。
INSERTBLANK
例子:
在第3条记录前插入一条记录。
GO3
INSERTBEFORE
3.用复制方法建新表记录
命令:
COPYTO新表名[范围][FIELDS字段表][FOR条件]
例子:
把当前表中“应发合计”大于1000元的记录复制到新数据表GZ2中。
COPYTOA:
GZ2FOR应发合计>1000
4.从其他表取数据
命令:
APPENDFROM表名[FOR条件]
例子:
把GZ1表中“应发合计”大于1000的记录复制到当前的表后面。
APPENDFROMGZ1FOR应发合计>1000
五.表记录的显示
1.浏览显示
命令:
BROWSE[FIELDS字段表][FOR条件]
例子:
显示当前表中“应发合计”大于1000元的记录的职工编号、、应发合计三个字段。
BROWSEFIELDS职工编号,,应发合计FOR应发合计>1000
说明:
此命令的结果以浏览窗口的形式出现,具有修改功能。
2.显示输出
命令:
LIST|DISPLAY[OFF][<范围>][FIELDS]<表达式表>[WHILE<条件>][FOR<条件>][TOPRINT|TOFILE<文件>]
说明:
〔1〕命令带OFF参数表示不显示记录号
〔2〕范围指定对哪些记录进行操作,〔范围包括:
RECORDn:
第几号记录;NEXTn:
当前记录开始的几个记录;REST:
自当前记录开始至文件末尾的所有记录;ALL所有的记录。
不选范围则隐含范围为ALL〕
〔3〕字段名表指在结果中需要出现的字段名,字段名与字段名之间用逗号分隔。
不带时指显示所有字段。
〔4〕WHILE后跟条件,FOR后面也跟条件,区别是,WHILE后的条件如果满足,便停止查找;FOR后的条件查找所有满足条件的记录。
〔5〕TOPRINT和TOFILE<文件>分别表示将显示结果在打印机上打印出来和将显示结果输出到文件。
〔6〕DISPLAY命令在显示记录满屏后,要求用户按任意键继续显示,并且在该命令中,如果省略范围仅显示当前记录。
LIST不分屏,如果省略范围显示所有记录。
六.修改记录内容
1.编辑或修改的特定记录
命令:
CHANG|EDIT[范围][[FIELDS]字段表][FOR条件][WHILE<条件>]
例子:
修改第五条记录
CHANGE|EDITRECORD5
2.成批自动替换记录
命令:
REPLACE[范围]字段WITH表达式[FOR条件]
例子:
计算各记录“应发合计”字段的值。
REPLACEALL应发合计WITH职务工资+岗位津贴+保留奖金+保留津贴
七.删除记录
1.逻辑删除
命令:
DELETE[范围][FOR条件](打删除标记)
2.物理删除
命令:
PACK〔删除有删除标记的记录〕
ZAP〔删除所有记录〕
例子:
删除“职工编号”空白的记录。
DELETEALLFOR职工编号=""
PACK
八.数据表排序
1.物理排序,生成一个新的表文件。
命令:
SORTTO新表名ON字段名[/A][/D][范围][FOR条件]
例子:
把当前表中记录按“应发合计”从大到小重新排序。
SORTTOA:
GZ3ON应发合计/D
2.逻辑排序,生成一个索引文件。
〔一〕标准索引文件:
IDX
命令:
新建索引:
INDEXON字段名表达式TO索引文件名
同时打开:
USE表名INDEX索引文件名
之后打开:
SETINDEXTO索引文件名
重新索引:
INDEXON字段名表达式TO索引文件名
关闭索引:
SETINDEXTO
例子:
对当前数据表以“应发合计”从大到小排列。
INDEXON-应发合计TOGZ
〔二〕复合索引文件:
CDX
命令:
新建索引:
INDEXON字段名TAG标记[ASCEDING|DESCENDING]
同时打开:
USE表名ORDER[TAG]标记
改变索引:
SETORDERTO[TAG]标记
重新索引:
INDEXON字段名TAG标记
关闭索引:
SETORDERTO
删除索引:
DELETETAG标记
例子:
对当前数据表以“应发合计”从大到小排列。
INDEXON应发合计TAGHJDESC
九.查找记录
1.顺序查找
命令:
LOCATEFOR条件[范围]
继续查找命令:
CONTINUE
例子:
在当前的表中查找姓“张”的记录。
LOCATEFOR="张"
2.索引查找
说明:
根据当前的索引来查找记录。
在使用命令前先要按准备查找的字段建立索引或排序
命令:
FIND字符串
SEEK表达式
用FOUND()检查找到否
例子:
在当前的表中查找姓“张”的记录。
FIND张
SEEK"张"
3.查找函数
说明:
在使用命令前先要按准备查找的字段建立索引或排序
函数:
SEEK()
例子:
在当前的表中查找姓“张”的记录。
SEEK("张")
十.统计数据表记录个数
命令:
COUNT[范围][FOR条件][TO变量]
例子:
统计当前表中“应发合计”大于1000元的人数。
COUNTFOR应发合计>1000
十一.数据表数值字段的求和
命令:
SUM[范围][FOR条件][TO变量]
例子:
统计当前表中“应发合计”字段的总和。
SUM应发合计
十二.算术平均值的计算
命令:
AVERAGE[范围][FOR条件][TO变量]
例子:
统计当前表中“应发合计”字段的平均值。
AVERAGE应发合计
十三.多功能计算
命令:
CALCULATE表达式[范围][FOR条件][TO变量]
例子:
分别统计当前表中“应发合计”字段的人数、总和、平均值。
CALCULATECNT(应发合计),SUM(应发合计),AVG(应发合计)
VFP命令、函数及程序语句大全〔2〕
一.数值运算函数
函数操作例结果
SQRT(x) 求平方根 SQRT〔9〕3
INT(x) 取整数INT〔3.14〕3
ROUND(x) 四舍五入 ROUND(3.14159,4)3.1416
MOD(x,y) 求X除以Y的余数 MOD(25,4)1
MAX(x,y) 求X,Y中的最大值MAX(7,8)8
MIN(x,y) 求X,Y中的最小值 MIN(1,2,3)1
二.字符中操作函数
函数名操作例结果
UPPER〔S〕小写字母UPPER(abc)ABC
LOWER〔S〕大写字母LOWER(ACD)acd
LEN〔S〕求字符串的长度LEN("中国1号")7
AT(S1,S2〕在字符串S2,找字符串S1AT("H","CHINA")2
SUBSTR〔S,I,N〕在S字符串中的SUBSTR('TECHNOLO',3,3)CHN
第I个字符起取N个字符
LEFT〔S,N〕从字符串S左边取N个字符LEFT〔“中国人”,4〕中国
RIGHT〔S,N〕从字符串S右边取N个字符S=‘12345’RIGHT〔S,3〕345
SPACE〔N〕生成N个空格"合计"+SPACE
(2)+"123"合计123
TRIM〔S〕消除字符串尾部空格TRIM(" ")
ALLTRI〔S〕消除字符串中所有空格ALLTRIM〔"李 丽"〕李丽
STUFF〔S1,N1,N2,S2)用字符串S2替换S1中第N1个字符起的N2个字符
STUFF〔"NOW",2,1,"E"〕NEW
&宏替换P=“G2”USE&PUSEG2
三.日期和时间函数
函数名操作例结果
DATE〔〕 求当前日期 DATE()2001/11/12
DATETIME() 求当前日期和时间 DATETIME()2001/11/12/0:
22:
33am
YEAR〔D〕 求年份 YEAR(DATE())2001
MONTH〔D〕 求月份〔数值〕 MONTH(DATETIME())11
CMONTH(D〕 求月份〔字符〕 CMONTH(DATETIME())Novenber
DAY〔D〕 求日期 DAY(DATE())12
DOW〔D〕求星期几〔数值〕 DOW〔DATE〔〕〕1
CDOW〔D〕求星期几〔英文〕 CDOW〔DATE〔〕〕sunday
TIME〔D〕 求当前时间 TIME〔DATE〔〕〕10:
20:
38am
四.数据类型转换函数
函数名操作例结果
ASC〔S〕求第一个字符串的ASCII码ASC("what")87
CHR〔N〕求ASCII码的字符CHR(87)w
STR(R,L,D)数值转换成字符,L为长度,D为小数位数
X=3.1415STR(X,6,2)3.14
VAL〔S〕字符串转换为数值VAL("123")123.00
CTOD〔S〕字符串转日期CTOD('11/01/2002')11/01/2002
DTOC〔D〕日期转换成字符串DTOC(DATE())11/01/2002
DTOS〔D〕把日期转成年月日式的字符串DTOS(DATE())20021101
CTOT〔C〕字符串转成日期时间型CTOT(11/01/200210:
30:
50am)
11/01/200210:
30:
50am
DTOT〔D〕日期型转为日期时间型DTOT(DATE())11/25/20010:
00:
01am
TTOC〔T〕日期时间型转为字符型TTOC(DATETIME())11/25/200100:
00:
01am
TTOD〔T〕日期时间型转为日期型TTOD(DATETIME())11/25/2001
IIF(LE,E1,E2〕逻辑判断IIF(A>0,"YES","NO")YES
五.检测函数
函数名操作例结果
RECNO〔〕 检测当前记录号 RECNO〔〕1
RECCOUNT〔〕 检测当前记录数 RECCOUNT〔〕12
BOF〔〕 开始记录 BOF〔〕1
EOF〔〕 最后记录 EOF〔〕12
FOUND〔〕 返回查找结果 FOUND〔〕.T.
ROW〔〕 返回当前行坐标 ROW〔〕1
COL〔〕 返回当前列坐标 COL〔〕1
SYS〔N〕 返回系统状态 SYS〔13〕联机状态
VFP命令、函数及程序语句大全〔3〕
VFP提供一些简单的程序设计语言命令,包括赋值语句、控制语句、设置命令等,我们可根据某种功能的需要,利用这些命令及数据库操作的有关命令构成语句,分行存在文件中〔称为命令文件,以.PRG为扩展名,在项目管理器中标为“程序”〕或一些对象的过程或事件处理程序中。
如被调用,系统将一条条顺序执行各行命令,如遇到控制语句〔IF,DO,CALL,FOR…等〕,依据控制语句的指定,转移到指定语句再一条条顺序执行。
这些命令书写时,每条语句应在一行中写完,如不能写完,可用分号“;”结束,表示下一行继续。
两条语句不能写在一行上。
每条语句中命令字及选项中保留字大多数可只书写前四个字符。
一般一个简单的VFP应用系统由假设干模块组成,各自完成一定的功能,总的系统用一个总控模块去控制,通过它调用子模块,层层调用以实现全系统的功能。
这种结构如图5.4所示。
这种方式便于设计、调试,保证程序的正确性,也容易实现模块共亭,实现软件重用,提高程序设计效率。
主模块可由主封面表单、主命令文件和主菜单文件构成;各个模块可由过程、自定义函数、表单、表单集、应用程序或子菜单等构成。
一个表单或一个表单集中可有一到多个用户界面,可设置一到多个命令按钮及其他程序控件,用户可利用按钮及程序控件,产生特定的消息触发执行一个程序,完成一个功能。
应用程序是对一个模块编译后的.APP执行文件,“过程”是由命令组成的程序,以RETURN语句结束,它可为另一个程序所调用,调用执行时遇到RETURN语句将返回其调用程序。
图5.4VFP程序总体结构
一.变量赋值与显示语句
在项目管理器中选“代码→程序→新建”或在命令框利用命令MODIFYCOMMAND建立命令文件。
1.MODIFYCOMMAND
意义:
创建命令文件。
命令格式:
MODIFYCOMMAND文件名
例如:
MODIFYCOMMANDPROC1
执行此命令后,将进入全屏幕编辑状态。
如原已建立了该文件proc1,将调出该文件在屏幕上显示,用户可对之修改。
如是新文件,则用户可利用全屏幕编辑键,输入自己的程序。
新文件将自动加上扩展名.PRG。
2.DO
意义:
执行命令文件程序,有三种方法:
①在项目管理器中选“代码→程序→选择程序名→运行”。
②在主菜单中选“程序→运行→输入〔选择〕程序名→运行”。
③在程序中或命令窗日中使用DO命令。
命令格式:
DO程序名[WITH表达式表]
程序名可以是上述方式建立的命令文件〔.PRG文件〕、可执行文件〔.EXE文件〕、应用程序〔.APP文件〕,及对.PRG文件编译后的文件〔.FXP文件〕。
如调用DO命令时不带扩展名,则按.EXE文件、.APP文件、.FXP文件、.PRG文件的顺序查找同名程序并执行之。
例如:
DOPROC1
此外,程序名还可能是菜单程序,调用时必须带扩展名〔.MPR〕。
例如,有菜单程序MAIN.MPR,则可如下调出执行:
DOMAIN.MPR
程序名还可以是事件名或过程名。
其中表达式表由多个表达式组成,用逗号分开,在执行时首先计算各表达式的值,并带入被调程序,被调程序第一句应是LPARAMETERS形参表语句,形参表是以逗号分隔的多个内存变量名,其个数应等于调用时的表达式的个数,执行时,首先用调用语句中各表达式的值对应给它们赋值。
例如:
主程序中:
DOPROC1WITH“AB”,21
被调程序:
LPARAMETERSM1,X0
执行时,首先完成赋值:
M1=“AB”;X0=21,再往下执行。
当使用DO运行一个程序时,包含在其中的命令一直执行,直到以下某一事件发生。
遇到RETURN语句,返回到调用程序DO命令的下一句,遇到了CANCEL命令,返回VFP命令状态。
遇到QUIT命令退出程序并退出VFP;到达文件尾回到调用前状态;再遇到另一个DO命令,将转人新程序执行。
3.PUBLIC
意义:
设置全局性内存变量命令。
格式:
PUBLIC变量名1[,变量名2]…
在不同程序或过程或事件中,同名内存变量的值不一定相同,如要将一个程序〔过程、事件〕中变量的值传到另一程序〔过程、事件〕中,可应用上述命令将它定义成全局变量。
4.PRIVATE
意义:
设置局部变量的命令。
格式:
PRIVATE[ALL[LIKE∣EXCEPT通配符]∣内存变量表]
其中选项意义:
ALL将所有内存变量说明为局部性变量,ALL[LIKE∣EXCEPT通配符]将变量名能与通配符相匹配的内存变量说明为局部性变量。
“ALLEXCEPT通配符”将除了能与通配符相匹配的变量名之外的内存变量说明为局部性变量。
在程序中,为了一个程序的运行结果不影响另一个程序的执行,不希望同名变量将值从一个程序带到另一个程序而造成干扰。
为此,可将该变量定义成局部性变量。
5.DIMENSION
意义:
定义内存变量数组命令,VFP中可定义一维或二维数组。
格式:
DIMENSION数组名〔数字表达式1[,数字表达式2]〕[,数组名2〔数字表达式1[,数字表达式2]〕]…
每个数组的每个元素都可单独使用,如同一个内存变量,称为下标变量,下标起始值为1。
例如,DIMENSIONARRAY1〔8,20〕,X1〔30〕定义了两个数组,数组名分别为ARRAY1和X1,前一个数组共有20×8=160个元素:
ARRAY1〔l,l〕、ARRAY1〔l,2〕……ARRAY1〔l,20〕,ARRAY1〔2,1〕…ARRAY1〔8,20〕。
对各元素也可用单下标取用其值,如用ARRAY1〔l〕,ARRAY1〔2〕…ARRAY1〔160〕也可访问该数组各元素,与前面双下标表示形式一一对应。
6.PUBLICARRAY
意义:
定义全局性内存变量数组。
格式:
PUBLICARRAY数组名〔数字表达式1[,数字表达式2]〕[,数组名2〔数字表达式1[,数字表达式2]〕]…
7.=
意义:
赋值语句。
将表达式的值赋值给一个内存变量。
对变量赋值后,该变量类型也即确定为表达式返回值的类型。
对一个变量可重复赋值,也可改变变量的类型。
但为了保证程序的清晰和结构完整,建议在一个系统中每个变量名应有确定的意义和数据类型。
8.STORE
意义:
同时对多个变量赋值命令。
格式:
STORE表达式TO变量1[,变量2]…
在程序运行时常要求用户输入控制参数或数据,实现此功能语句我们称为人机对话语句。
在程序中如插入人机对话语句,用户可借助键盘输入参数或控制量赋值给变量。
控制程序走向,或用于不同数据处理。
在程序执行到这类语句时,将停止运行,在屏幕上显示命令中附注的提示信息,同时等待用户从键盘输入数据,赋给所指定的变量。
完成赋值之后再接着运行下一条语句。
在VFP中这类语句可在主控程序中或在调试程序时使用,在表单程序中使用文本框等各种控件及消息框代替它们。
9.INPUT
意义:
输入各种类型数据赋给内存变量
格式: