第一篇:6-VFP讲稿(单命令一)(定稿)
单命令(一)
一、命令基本格式。
掌握FoxPro的命令格式(也称语法结构、句法结构、语法规则等)和各组成部分的功能,是学习FoxPro单命令的重要环节。为便于讲述和学习,此处首先给出FoxPro单命令的基本格式和大部分命令公用的组成部分。需要首先说明的是:由于FoxPro的命令比较复杂,在今后介绍有关命令的具体格式时,不常用的部分将被略去,欲知其详,可另参考有关书籍。
命令的基本格式如下:
<命令动词> [<操作对象>|<命令短语> „]
二、表基本操作命令 1.浏览命令
BROWSE [FIELDS <字段名表>] [FOR <条件>] 说明:
①“FIELDS <字段名表>”短语用于决定表中的哪些字段显示在浏览窗口中、以及这些字段的显示顺序。
<字段名表>由一个或多个字段名组成,如果有多个字段名,字段名和字段名之间用逗号分隔。<字段名表>按从左至右的显示顺序列出了所有需显示的字段,未列出的字段不被显示。
短语举例:FIELDS 学号,姓名,总分
如果省略了FIELDS短语,BROWSE命令按表结构中的字段顺序显示出全部的字段。
②“FOR <条件>”短语用于选择哪些记录出现在浏览窗口、以及哪些不出现。符合条件的出现,不符合条件的不出现。
短语举例:FOR 性别=“女”.AND.职务=“经理” 2.添加记录命令
APPEND [FROM <表文件名>] [FIELDS <字段名表>] [FOR <条件>] APPEND BLANK
3、插入命令
INSERT [BEFORE][BLANK]
4、删除与恢复记录
(1)逻辑删除记录:DELETE [<范围>] [FOR <条件>] 范围短语用于确定命令的作用范围,即命令作用于记录的范围。有四种具体的形式:
RECORD n 表文件中的第n条记录。n可以是常数,也可是数值表达式; NEXT n
从当前记录开始(包括当前记录)的n条记录。n可以是常数,也可是数值表达式;
REST
从当前记录开始(包括当前记录)至最后一条记录; ALL
表文件中的所有记录。
(2)逻辑删除的环境设置
SET DELETE ON|OFF(3)恢复记录:RECALL [<范围>] [FOR <条件>](4)物理删除记录:PACK(5)物理删除全部记录:
ZAP(6)安全保护模式的设置:SET SAFETY ON|OFF 5.显示记录
P107 LIST | DISPLAY [<范围>] [[FIELDS] <表达式表>] [FOR <条件>][OFF] [TO PRINTER] [PROMPT] 说明:
①LIST用于连续显示,DISPLAY用于分屏显示。
②当省略范围时,LIST的默认范围是ALL,DISPLAY的默认范围是当前记录。③CLEAR命令清除主窗口。④OFF用于禁止输出记录号。
⑤TO PRINTER短语用于把结果直接打印在打印机上。
⑥执行完显示命令后,记录指针指向范围内的最后一条记录,如果明确指定了范围ALL或默认为ALL,则指向表的尾部,函数EOF()的值为.T.。
第二篇:VFP对口高考命令-3至5
DO <查询文件名> 功能:运行指定的查询
例:do d:chax1.qpr 运行名为chax1的查询文件
MODIFY QUERY <查询文件名> 功能:打开指定的查询文件 例:modify query d:chax1.qpr 打开名为chax1的查询文件
注:不论用什么方法打开查询文件,VFP都会自动打开查询设计器
SELECT <字段列表> FROM [数据库名!] <表名> [,[数据库名!] <表名>,„] [WHERE 条件] [GROUP BY 分组项列表] [ORDER BY 排序项[DESC]„] [INTO 目标|TO FILE 文件名|TO PRINTER] 功能:从一个或多个表中查询数据
例:select b1.语文,b1.数学,b1.英语 from sjk1!b1 where b1.语文>70 group by b1.语文 order by b1.学号 desc 查询sjk1数据库中的b1表的语文,数学,英语字段中满足语文大于70的数据,按照b1表的语文字段分组,按照b1表的学号排序,且设置排序方式为倒序。
[INTO 目标]的“目标”可以使用如下3种:“ARRAY 数组名”、“CURSOR 表名”、“DBF 表名”。
[ORDER BY[desc]]中若缺省“desc”则按升序排序。否则则按降序排序。[TO PRINTER]:将查询结果送往打印机输出
[TO FILE 文件名]:将查询结果输出到指定的文本文件中
CREATE VIEW <视图名> AS <查询语句> 功能:为当前数据库创建视图 例:open database d:sjk1 打开数据库sjk1
create view st1 as select * from sjk1!b1 为当前数据库创建一个视图st1其功能为“查询数据库sjk1的表b1中所有字段数据”
注:使用上述命令创建的视图还需要在视图设计器中指定可更新字段,才能实现更新数据的功能
DROP VIEW <视图名> 功能:删除当前数据库中指定的视图 例:open database d:sjk1 打开数据库sjk1
drop view st1 删除视图st1 CREATE REPORT <报表文件名> 功能:建立一个空白报表 例:create report d:bb1 建立一个报表bb1
MODIFY REPORT <报表文件名> 功能:打开指定的报表文件 例:modify report d:bb1 打开报表bb1
REPORT FORM <报表文件名> TO PRINTER 功能:打印指定的报表 例:report form d:bb1 to printer 打印报表bb1
MODIFY COMMAND <程序文件名> 功能:建立一个程序文件 例:modify command cx1 建立一个名为cx1的程序文件并打开编写 DO <程序文件名> 功能:运行指定的程序 例:do d:cx1 运行程序cx1
注:如果在A程序中使用命令调用B程序,则B程序称为A程序的子程序,A程序称为B程序的主程序。
VFP中可以使用“*”号和NOTE命令可以给某一行加注释,也可以使用“&&”在语句行后面添加注释。
注:给某一个行加注释就是以“*”或NOTE开头后进行注释,给语句行加注释就是使用“&&”直接在语句后面加上注释,相比来说“&&”注释更加灵活。
例:clear &&清屏
给clear加注释“清屏” 注:注释的作用就是帮助理解程序的功能,以利今后修改程序时提高工作效率,一般注释的内容在VFP中以绿色显示。
CLEAR 功能:清除屏幕上的显示信息 ACCEPT [提示信息] TO <内存变量>
功能:把用户输入的字符串保存到指定的内存变量中
例:accept to x 在屏幕上光标处输入字符串,并将字符串保存到变量x中
accept ”请输入x:” to x
在屏幕上”请输入x:”后输入字符串,并将字符串保存变量x中 INPUT [提示信息] TO <内存变量>
功能:把用户输入的表达式的值保存到指定的内存变量 例:input ”请输入y:” to y 在“清输入y:”后输入数据,并将数据保存到变量y中 注:input与accept的区别是,前者可以输入数值型数据、逻辑型数据,也可输入字符型数据,在输入字符型数据时要加定界符,后者输入的数据都一律被认为是字符型数据,且不用加定界符。
WAIT [提示信息] [TO 内存变量] [WINDOW] [TIMEOUT 时间] 功能:等待用户输入一个字符
例:wait 屏幕上显示“按任意键继续„”,并要求任意输入一个字符以继续
wait “是否继续(Y/N)?” to x window timeout 2 在屏幕右上角中的系统窗口中显示“是否继续(Y/N)?”系统窗口存在2秒,并将输入的字符保存到变量x中
注:wait命令和accept命令中的变量的一定是字符型变量且不用加定界符,而input命令的变量的类型由输入表达式值的数据类型决定。wait命令常用于输入单字符和显示信息,accept命令常用于输入字符串,input命令常用于输入其他类型的数据。
@<行,列> SAY <显示信息> 功能:在指定位置输出信息 例:@1,1 say ”你好” 在第一行第一列显示“你好” @<行,列> [SAY 显示信息] GET <变量> 功能:在指定位置输入数据,并把输入的数据保存在指定的变量 例:@1,1 say”姓名:” get xm
read 在第一行第一列显示“姓名:”并在其后面输入数据并将数据其保存给变量xm 注:该命令需要与read命令共同使用,才能激活命令中的变量,接收输入的数据。注:不与read命令共同使用的话,系统将自动将原先变量的值载入。ROW()功能:返回当前坐标的行坐标 COL()功能:返回当前坐标的列坐标 SET TALK ON|OFF
功能:设置是否显示某些命令执行的结果,ON为显示,OFF为不显示 SET SAFETY ON|OFF
功能:设置删除文件数据时是否显示提示信息,ON为显示,OFF为不显示 CLEAR ALL 功能:清除用户自定义的内存变量和对象 IF <条件>
功能:单分支选择结构
<语句组> ENDIF 例:if x<0 判断x是否小于0,其返回值是.T.或.F.?”x小于0”
返回.T.时执行,执行后执行endif后面的语句
endif
返回.F.时执行endif后面的语句 IF<条件> 功能:双分支选择结构
<语句组1> ELSE
<语句组2> ENDIF 例:if x<0 判断x是否小于0,其返回值是.T.或.F.?”x小于0”
返回.T.时执行,执行后执行endif后面的语句
else
?”x大于等于0” 返回.F.时执行,执行后执行endif后面的语句
endif 注:条件是一个逻辑表达式,其返回值为.T.或.F.。
注:if和endif必须成对使用,分别表示选择结构开始和选择结构结束 DO CASE
功能:多分支选择结构
CASE <条件1>
<语句组1> CASE <条件2> <语句组2> „
CASE <条件n> <语句组n> [OTHERWISE 语句组] ENDCASE 例:do case
case x=1
?”x等于1”
x等于1时执行,执行后执行endcase后面的语句
case x=2 ?”x等于2”
x等于2时执行,执行后执行endcase后面的语句
case x=3
?”x等于3”
x等于3时执行,执行后执行endcase后面的语句
otherwise
? ”x是大于3的数”
x不满足以上的所有条件时执行,执行后执行endcase后面的语句 endcase 注:do case和endcase必须成对使用,分别表示选择结构开始和选择结构结束
DO WHILE <条件> 功能:基于条件的循环结构 <语句组>
ENDDO 例:do while x<10 判断x是否小于10,其返回值是.T.或.F.?”x小于10”
x=x+1
返回.T.时执行,执行完毕后跳回循环开始处(do while <条件>)再次判断条件是不是满足或不满足
enddo 返回.F.时执行enddo后面的语句
SCAN [FOR条件] 功能:针对表记录的循环结构 <语句组> ENDSCAN
例:use d:b1 由于是针对表记录的循环,所以需打开一张表
scan for 性别=”男”
display
每个性别字段等于“男”的记录都会执行一次语句组的语句,全部执行完毕后,执行endscan后面的语句
endscan FOR <变量>=<初值> TO <终值> [STEP 步长] 功能:指定次数的循环
<语句组> ENDFOR
例:s=0 设置累加器s
for x=1 to 11 step 2 给x赋初值1,终值11,其步长为s=s+x
因步长为2,故x的值为1、3、5、7、9、11,s将x从初值1到11的每一步的值都加起来,当x的值下一步大于其终值时,执行endfor后面的语句
endfor 注:do while enddo,scan endscan,for endfor必须成对使用
LOOP 功能:终止本次循环,使程序再次检查是否满足循环条件,以决定是否进行下一次循环即直接跳回循环开始处(如do while <条件>)。
EXIT 功能:结束循环,使程序执行循环结构后面的语句即直接跳到循环结束处(如 enddo)。PROCEDURE <过程名> 功能:定义一个过程 <语句组> ENDPROC 例:procedure x 定义一个过程,过程名为x
display
该过程的语句
endproc
结束过程
SET PROCEDURE TO [过程文件名] 功能 :打开指定的过程文件 例:set procedure to 关闭正在打开的过程
set procedure to d:gc1 打开过程文件gc1 注:缺省可选项则关闭已经打开的过程文件。DO <程序名|过程名> [WITH 参数表] 功能:调用指定的程序,并把指定的参数传递给调用的下级程序。注:缺省可选项,则不传递参数。
PAREMETERS <参数表> 功能:接受上级程序传递来的参数 例:input”你出生的年份:” to c
input”现在的年份:” to n
do c1 with c,n
调用过程c1并传递参数c和n,并执行过程c1的语句
?”你现在”+alltrim(str(n))+alltrim(”岁”)
在屏幕上显示“你现在n(变量)岁”,因n为数值型,所有要用str()函数转换成字符型,用alltrim()函数消除多余的空格
return
procedure c1 定义过程c1
parameters x,y 接收上级传递过来的参数,c对应x,n对应y
y=y-x 即用现在的年份减去你出生的年份,算出要计算的年龄
endproc
结束过程,并将参数y,x的值传递回c,n,此时执行调用该过程之后的语句 注:在这里c,n称为实参,即实际使用的参数。x,y称为形参,即位置相同,形式相同的参数。
CREATE FORM <表单文件名> 功能:创建一个空白表单 例:create form d:bd1 建立一个名为bd1的表单 DO FORM <表单文件名> 功能:运行指定的表单 例:do form d:bd1 运行表单bd1
MODIFY FORM <表单文件名> 功能:打开指定的表单 例:modify form d:bd1 打开表单bd1 Thisform.refresh 功能:刷新表单
Thisform.release 功能:释放并关闭表单,即从内存中清除表单
Thisform.<对象名>.<属性名>=<属性值> 功能:修改或设置表单对象的属性值Thisform.text1.value=”VFP”
这个表单的text1控件的value属性值是”VFP” DO <菜单程序名> 功能:运行指定的菜单 例:do d:cd1.mpr 运行菜单cd1
DO <菜单程序名> WITH this ,T,功能:使用表单调用菜单 例:do d:cd1 with this ,T, 在当前表单上调用菜单cd1
例:5
第三篇:VFP命令、函数及程序语句解读
VFP命令、函数及程序语句大全(1 学过VFP(Microsoft Visual FoxPro的朋友都知道它是微软公司开发的数据库管理系统。它
经历了从dBASE、FoxBASE、FoxPro直到VFP的发展过程。本文便以VFP 6.0为例介绍它的命令、函数
及程序语句,为学习VFP的朋友提供必要的学习参考,也为已经精通VFP的朋友提供复习的好机会。
一、主要命令:
1、CREATE 作用:建立一个新的表。
格式:CREATE [<文件>|?](注意,命令字符可取前面四个字符,后面可省略不写,即CREA,下
同;中括号表示其中的参数是可选的;|管道符号表示两个参数只能选择一个,不能同时选择,下
同。
说明:文件指建立以.dbf为扩展名的VFP数据库文件,在命令后面加上一个问号表示系统会弹出
对话框,要求用户输入想要建立的表名。在命令中不加文件名或问号系统也会弹出对话框,要求用
户输入想要建立的表名。
2、MODIFY STRUCTURE
作用:显示表文件结构,并允许修改此表的结构。格式:MODIFY STRUCTURE 说明:只有在用USE命令打开表文件以后,才能显示或修改表文件的结构。
3、APPEND 作用:在当前表的尾部(无论表中有无记录追加记录(在当前表指当前正使用的表。
格式:APPEND [BLANK] 说明:在APPEND命令后面加上BLANK参数表示在当前表的尾部添加一条空白记录。无BLANK 参数
时,表示在当前表的尾部添加一条记录并要求用户输入相应的字段内容。
4、INSERT 作用:在表文件中间插入一个新记录。格式:INSERT [BEFORE] [BLANK] 说明:INSERT 在当前记录后插入一记录;INSERT BEFORE 在当前记录前插入一记录;INSERT BEFORE BLANK 在当前记录前插入一空记录。INSERT-SQL命令追加记录
INSERT INTO 表名[(字段1[,字段2…]];VALUES(表达式1[,表达式2…]
例:INSERT INTO XS(XH,XM,XB,XIMING VALUES(“950106”,“高山”,“男”,“”
5、UPDATE 作用:修改数据
update <表名> set <字段1=表达式1>,<字段2=表达式2...> where <条件> 例: update <表名> set <字段1,字段2...>=<表达式1,表达式2...> where <条件>
6、BROWSE 作用:主要用于打开浏览窗口,查阅表文件并同时进行修改。格式:BROWSE 作用:打开一个“浏览”窗口,供用户浏览或修改记录。格式:BROWSE [FIELDS <字段名表>]
7、USE 作用:打开和关闭表文件。格式:USE [<文件名>] USE 说明:前一个命令用来打开<文件名>指定的表文件,该表如有备注型字段,则同时打开相应的
备注文件(.fpt文件;后一个命令关闭当前打开的表文件。
8、LIST和DISPLAY
作用:显示表(.dbf的内容、结构或状态。
格式:LIST|DISPLAY [OFF] [<范围>] [FIELDS] <表达式表> [WHILE <条件>] [FOR <条件>] [TO PRINT|TO FILE <文件>] LIST|DISPLAY STRUCTURE TO PRINT|TO FILE <文件> LIST|DISPLAY STATUS [TO PRINT|TO FILE <文件>] 说明:命令带OFF参数表示不显示记录号,范围指定对哪些记录进行操作,范围包括:RECORD n 第几号记录、NEXT n 当前记录开始的几个记录、REST 自当前记录开始至文件末尾的所有记录、ALL 所有的记录。不选范围则隐含范围为ALL;FIELDS后跟字段名,字段名与字段名之间用逗号分
隔。WHILE后跟条件,FOR后面也跟条件,区别是,WHILE后的条件如果不满足,便停止查找;FOR后的条件查找所有满足条件的记录。TO PRINT和TO FILE <文件>分别表示将显示结果在打印机上打印出
来和将显示结果输出到文件。
格式中,下面两个命令分别为显示表结构(STRUCTURE和工作状态(STATUS。注:LIST命令一次连续显示完所有记录内容。DISPLAY命令在显示记录满屏后,要求用户按
任意键继续显示。如果LIST与DISPLAY都无任何选择项时,LIST显示文件的全部记录, DISPLAY仅显示当前记录。
9、记录的定位
作用:用记录指针(POINTER定位记录。格式: 1GO[TO] RECORD n|TOP|BOTTOM 命令定位 GO [RECORD] N GO BOTTOM GO TOP 2n 3SKIP [+|-] n 说明:第一个命令又叫绝对定位,其中,RECORD n定位到n号记录,TOP定位到第1个记录, BOTTOM定位到最后一个记录。第二个命令定位到第n个记录,n是一个数值。第三个命令又叫相对定
位,它以当前记录为基准前移(-或后移(+n个记录,不选任选项,则默认记录指针后移一个记
录。
LOCATE [<范围>] FOR <表达式> 范围: ALL NEXT N RECORD N
REST
10、CHANGE和EDIT 作用:显示要编辑或修改的字段。
格式:CHANGE|EDIT [<范围>] [FIELDS <字段名表>] [WHILE <条件>] [FOR <条件>]
11、REPLACE 作用:用表达式的值代替命令中与之相对应的字段的内容。
格式:REPLACE [<范围>] <字段1> WITH <表达式1>[,<字段2> WITH <表达式2>] [FOR <条件> ] [WHILE<条件>] 例:USE B2-1 REPLACE ALL 工资 WITH 工资+200 FOR 工资<1000 BROW
12、DELETE、PACK、ZAP和RECALL 作用:分别是给要删除的记录作删除标记、彻底删除、删除所有记录和取消被选中的表记录的
删除标志。
格式:DELETE [<范围>] [WHILE<条件>] [FOR <条件>](特例:DELETE FILE FILENAME.DBF,该命令删除指定的表文件
PACK
ZAP RECALL [<范围>] [FOR <条件>] [WHILE<条件>]
13、SORT和INDEX 1SORT 作用:是建立一个其记录以新的物理顺序排列的新表文件,原文件不变.格式:SORT TO <文件名> ON <字段名1> [/A] [/C] [/D][,<字段名2> [/A] [/C] [/D>...[ASCENDING|DESCENDING] [<范围>] [FOR <条件>] [WHILE<条件>] [FIELDS<字段表>] 2INDEX 作用: 对当前表根据关键字表达式的值从小到大排列,并存入TO后指定的索引文件名的文件或复合索引文件的一个标识中。
格式: INDEX ON <关键字表达式> TO <文件名> INDEX ON <关键字表达式> TAG <标识名> [OF <文件名>] [FOR <条件>] 说明:第1个命令中,/A按字段名升序排序,/D按字段名降序排序,/C忽略大小写,针对字符型
关键字而言,ASCENDING和DESCENDING分别表示升序和降序。第1个命令建立.dbf表文件,第2个命令建立.idx单一索引文件,第3个命令建立.cdx复合索引文件(Compound Index。
删除索引
DELETE TAG ALL [OF 复合索引文件名]
DELETE TAG 索引标识1 [OF 复合索引文件名1][,索引标识2 [OF 复合索引文件名2>…
14、USE <表文件名> INDEX <索引文件名表>、SET INDEX TO和SET ORDER TO 作用:分别是打开表文件的同时打开索引文件、打开索引文件和改变主索引。并确定第一个索引文件为主控索引文件.(当前起作用的索引文件称为主控索引文件, 当前起作用的索引标识称为主控索引
格式:USE <表文件名> INDEX <索引文件名表> SET INDEX TO [<索引文件名表>] 作用:打开当前表的一个或多个索引文件并确定第一个索引文件为主控索引文件,该命令用于单索引文件.格式:SET INDEX TO [<索引文件表>] [ADDITIVE] 说明:(1[<索引文件表>]中第一个索引文件为主控索引文件.(2若缺省ADDITIVE选项,则在用本命令打开索引文件时,除结构复合索引文件以外的索引文件均被关闭
SET ORDER TO [<数值表达式>]|[<单索引文件名>]|[TAG] <索引标识> [ASCENDING|DESCENDING>(特例:重新索引命令:REINDEX 作用:对于打开表时自动打开的复合索引文件确定主索引,也能确定主索引文件.(1 数值表达式表示已打开的索引的序号.系统先为单索引文件编号,故结构复合索引文件的序号比单索引文件大.(2 SET ORDER TO 或 SET ORDER TO 0命令取消主索引和主索引文件,表中记录将按物理记录输出.15、CLOSE INDEX 或 SET INDEX TO 单独关闭索引文件,并不关闭与之相关的表文件
16、FIND、SEEK和LOCATE及CONTINUE 作用:前两个命令FIND和SEEK是在一个已经建立了索引文件的表中,定位到关键字中的内容与命
令行中字符串相同的第一个记录。后一个命令在用USE打开表文件以后,直接查询表中字段内容。
格式:FIND <“字符串”>|<字符串> SEEK <表达式>(表达式的数据类型可为字符型、数字型、日期型和逻辑型。LOCATE [<范围>] [FOR <条件>] [WHILE<条件>] CONTINUE 说明:FIND命令与SEEK命令的区别是前者后跟字符串,而后者后跟表达式。在用LOCATE命令找到
一个匹配记录后,可用CONTINUE命令搜索表的剩余部分来寻找其他匹配的记录。
例:SET ORDER TO NL „确定索引关键字为NL(年龄 FIND 28 „找年龄字段为“28“的记录 DISPLAY „显示当前记录
SET ORDER TO NL „确定索引关键字为NL(年龄 SEEK “28”„找年龄字段为“28“的记录
DISPLAY 17.从磁盘上删除任意文件:(1ERASE filename|?(2DELETE FILE [filename|?]
18、COUNT 作用:统计当前表文件中符合条件的记录数。
格式:COUNT [<范围>] [FOR <条件>] [WHILE<条件>] [TO <内存变量名>] 说明:内存变量名可用除参数外的任意字符。
19、SUM 作用:对当前表中选中记录的全部或指定的数值字段或由指定字段组成的数值表达式累加求和。
格式:SUM [<范围>] [数值<表达式>] [TO <内存变量名表>] [FOR <条件>] [WHILE<条件>] 20、AVERAGE 作用:对当前表中选中记录的全部或部分数值型字段及其组成的表达式求平均值并显示。
格式:AVERAGE [<范围>] [数值<表达式>] [TO <内存变量名表>] [FOR <条件>] [WHILE<条件>]
21、TOTAL 作用:分类汇总命令,按<表达式>做过索引或排序的表文件的数字型字段进行分类汇总。它把与<表达式>值相同的所有记录中的数字字段的值分别进行求和,并各
自作为一条记录存放在由文件指定的文件中去。在新生成的记录中,还将包括与<表达式>值相同的所有记录中的首项记录的其他字段内容。
格式:TOTAL TO <文件名> ON <表达式>[FIELDS <数值型字段名表>][<范围>][FOR <逻辑表达式1>][WHILE <逻辑表达式2>] 例:USE B2-1 INDEX ON 职称 TO ZC TATOL ON 职称 TO B2-1T FILEDS 工资 22.APPEND FROM 作用:从其他文件向表文件添加数据。数据来源文件既可以是表文件,也可是文本文件或其他符合规定的文件。
格式:APPEND FROM <文件名>|?[FIELDS <字段名表>][FOR <逻辑表达式>] FIELDS <字段名表>和FOR <逻辑表达式>,用于源文件为表文件时,指定追加记录的字段和条件。在字段名表和逻辑表达式中的字段名,必须是在来源和目的两个文件中公有的,共注意宽度和类型匹配。实际应用中,数据来源文件常为表文件(.DBF和ASCII码文本文件(.TXT 对于文本文件又有标准格式(SDF和通用格式(DELIMITED之分.例: USE B2-1 APPE FROM S3-1.TXT SDF BROWSE 23.COPY(选择表的部分内容生成一个新表
作用:把打开的表文件结构及数据复制成由<文件名>所指定的并符合规定要求的文件。如果默认全部选择项和文件名的扩展名,则结构及全部数据都被复制,且其文件扩展名由系统规定为“.DBF”。
格式:COPY TO<文件名> [FIELDS <字段名表>][<范围>][FOR <逻辑表达式1>][WHILE <逻辑表达式2>] 格式中的或用来为新表建立一个与原表相同的结构索引.例1: COPY TO B3-2 COPY TO S3-2.TXT SDF 例2: USE RS COPY TO RS3 FIELDS 姓名,基本工资,奖金 USE RS3 LIST 24.COPY FILE复制数据整表:(可用于复制任何类型文件 COPY FILE 原文件名 TO 目标文件名
注:复制表时,还应当复制和它相配的备注文件(.FPT,如有备注字段和结构复合索引文件。
当前表应关闭。(如果已打开表:COPY TO 新文件名 例:将RS.DBF复制为RS1.DBF COPY FILE RS.DBF TO RS1.DBF 或USE RS
COPY TO RS1 USE RS1 LIST 25.COPY STRUCTURE(只复制结构不复制数据
作用:表文件结构复制,生成一个指定文件名和包括指定字段的表文件结构;如有CDX或PRODUCTION选择项还将为新表建立一个与源表相同的结构索引.格式: COPY STRUCTURE TO<文件名> [FIELDS <字段名表>] 例: COPY STRUCTURE TO B3-3 FIELDS 编号,姓名,何时工作,职称 26.copy to建立结构扩展文件
作用:把已打开的表文件的结构作为数据记录复制到由<文件名>指定的库文件中去.格式: COPY TO<文件名> STRUCTURE EXTENDED 例: USE B3-3 COPY TO B3-4 STRUCTURE EXTENDED USE B3-4 BROW 该命令可以用于测试表文件结构,也可以用于顺序方式建立库文件结构.新库文件的结构是一个由系统规定的标准结构,它由4个字段构成: FIELD_NAME 字段名
FIELD_TYPE 字段类型 FIELD_LEN 字段宽度 FIELD_DEC 小数位数 27.常用命令: 库表
建立数据库: CREATE DATABASE 库文件名.DBC 建立表: CREATE 表文件名.DBF CREATE TABLE/DBF 表名(各个字段属性 打开数据: OPEN DATABASE 库文件名 打开表: USE 表文件名
使用非前库的表:USE 库名!表名 打开索引表:USE 表名 INDEX 索引名 显示库信息:DISP DATABASE [TO PRINTER] 显示记录:LIST(快速查看 BROWSE(分屏浏览可修改 DISP(显示当前记录
关闭数据库:CLOSE ALL(关闭所有库、表、索引 关闭表: USE
CLOSE DATABASES(关闭当前库、表 CLOSE TABLES(关闭当前表,不关库 CLOSE INDEXES(关闭当前索引
修改库:MODI DATA 库名 [NOWAIT] [NOEDIT] 修改表结构:MODI STRU ALTER TABLE 表名 ADD 字段名 ALTER TABLE 表名 ALTER 字段名 ALTER TABLE 表名 DROP 字段名 添加表:ADD TABLE 表名追加记录: INSERT INTO 表名(字段名列表 VALUES(对应数值 APPEND APPEND FROM 源文件 移去表:REMOVE TABLE 表名
删除记录:DELETE ALL FOR [条件](逻辑删除 PACK(物理删除 ZAP(全部彻底删除
删除库:DELETE DATABASE 库名(先关闭库 删除表:DELETE FILE 表名(先关闭表 VFP命令、函数及程序语句大全(2
二、常用函数
1、数学函数 函数用途
ABS(<数值表达式>绝对值,|x| CEILING(<数值表达式> >=自变量的最小整数 EXP(<数值表达式>对基E的幂,e=2.71828 FLOOR(<数值表达式> <=自变量的最大整数 INT(<数值表达式>取整(舍尾自变量
LOG(<数值表达式>自变量的自然对数,ln x LOG10(<数值表达式>自变量的普通对数,lg x MAX(<表达式1>,<表达式2>两个值的最大值 MIN(<表达式1>,<表达式2>两个值的最小值 MOD(<数值表达式1>,<数值表达式2>求余数 RAND([<数值表达式1>]返回伪随机数
ROUND(<数值表达式1>,<数值表达式2>四舍五入第一个自变量 SIGN(<数值表达式>自变量的符号 SQRT(<数值表达式>平方根(正根
2、字符串操作函数 函数用途
&<内存变量> 用于代替内存变量内容
LEN(<字符串表达式>返回字符串表达式的字符个数 SPACE(<数值表达式>生成空格
SUBSTR(<字符串表达式>,<数值表达式n>[,<数值表达式L>]求子字符串,从指定的字符串表达式第n个开始,总长为L的字符串
LOWER(<字符串表达式>将字符串字母转换成小写字母 UPPER(<字符串表达式>将字符串字母转换成大写字母 TRIM(<字符串表达式>删除字符串尾空格
ASC(<字符串表达式>返回字符串表达式最左边的第一个字符的ASCII码 CHR(<数值表达式>将数值表达式转换成字符
AT(<字符串表达式1>,<字符串表达式2>[,<数值表达式n>] 确定字符串表达式1在字符串表达式2中的位置,n为字符串表达式第几次出现 STR(<数值表达式>[,<数值表达式L>][,<数值表达式n>将数值转换为字符串,L为数值表达式总长,n为小数位数
VAL(<字符串表达式>将数字字符串转换为数字 TYPE(<表达式>检测表达式值的数据类型 LTRIM(<字符串表达式>删除字符串左部空格 RTRIM(<字符串表达式>删除字符串右部空格
LEFT(<字符串表达式>,<数值表达式n>取字符串左边部分字符,n为返回的字符个数
RIGHT(<字符串表达式>,<数值表达式n>取字符串右边部分字符,n从右边截取字符个数
3、表(.dbf操作函数
函数用途
BOF([<工作区号或别名>]查表文件开始函数 EOF([<工作区号或别名>]表文件结尾测试函数
RECNO([<工作区号或别名>]测试当前或指定工作区表的当前记录号 DELETED([<工作区号或别名>]记录删除测试函数 FILE(<“字符串”>测试文件是否存在函数 DBF([<工作区号或别名>]检测表的文件名函数
4、日期、时间函数 函数用途
DATE(查系统当前日期函数
TIME([<数值表达式>]查系统当前时间函数
YEAR(<日期型表达式>|<日期时间型表达式>由日期查年函数 MONTH(<日期型表达式>|<日期时间型表达式>从日期查月份函数 CMONTH(<日期型表达式>|<日期时间型表达式>由日期查月份名函数 DAY(<日期型表达式>|<日期时间型表达式>从日期查当月的日函数
DOW(<日期型表达式>|<日期时间型表达式>[,<数值表达式>]由日期查星期函数
CDOW(<日期型表达式>|<日期时间型表达式>从日期查星期名函数 DTOC(<日期型表达式>|<日期时间型表达式>日期转换为字符函数
CTOD(<字符串表达式>字符串转换为日期函数 CTOT(<字符串表达式>返回日期时间值函数 TTOC(<日期时间型表达式>返回字符值
5、显示、打印位置函数 函数用途
ROW(判断光标行位置函数 COL(判断光标列位置函数
INKEY([<数值表达式>]检测用户所击键对应的ASCII码函数,数值表达式以秒为单位等待击键的时间
6、其他函数 函数用途
DISKSPACE(返回默认磁盘驱动器中可用字节数函数 OS(检测操作系统名称的函数 VERSION(返回VFP版本号的函数 VFP命令、函数及程序语句大全(3
三、主要程序语句
1、条件判断语句 格式:(1IF <条件> <命令语句组>
ENDIF 说明:如果条件为真,则执行命令语句组中的各语句,否则跳过这些命令语句不执行, 而执行ENDIF后的语句。(2IF <条件> <命令语句组1> ELSE <命令语句组2> ENDIF 说明:如果条件为真,执行命令语句组1,否则执行命令语句组2。(3IF <条件1> IF <条件2> <命令语句组1> ELSE <命令语句组2> ENDIF...ELSE <命令语句组N>
ENDIF 说明:进行多重条件的嵌套选择。(4DO CASE CASE <条件1> <命令语句组1> CASE <条件2> <命令语句组2> CASE <条件3> <命令语句组3>......CASE <条件N> <命令语句组N> [OTHERWISE] [<命令语句组N+1>] ENDCASE 说明:依次判断条件,转入条件为真的命令语句组中执行。当所有条件都不成立时,若有
OTHERWISE项,则执行命令语句组N+1,否则执行ENDCASE后面的语句。
2、循环语句
格式:(1DO WHILE <条件> <命令语句组> [LOOP] <命令语句组> [EXIT] <命令语句组> ENDDO 说明:判断条件是否为真,如为真就重复执行循环体中的命令语句组,直到条 件为假,结束循环。(2)SCAN <命令语句组> ENDSCAN 说明:在一个表中建立一个执行命令语句组的循环,并执行对每一条记录的操 作,直到表文件 记录完为止。
第四篇:vfp命令、语句等说明总结
VFP命令、函数及程序语句大全
VFP提供一些简单的程序设计语言命令,包括赋值语句、控制语句、设置命令等,我们可根据某种功能的需要,利用这些命令及数据库操作的有关命令构成语句,分行存在文件中(称为命令文件,以. PRG为扩展名,在项目管理器中标为“程序”)或一些对象的过程或事件处理程序中。如被调用,系统将一条条顺序执行各行命令,如遇到控制语句(IF,DO,CALL,FOR„等),依据控制语句的指定,转移到指定语句再一条条顺序执行。
这些命令书写时,每条语句应在一行中写完,如不能写完,可用分号“;”结束,表示下一行继续。两条语句不能写在一行上。每条语句中命令字及选项中保留字大多数可只书写前四个字符。
一般一个简单的VFP应用系统由若干模块组成,各自完成一定的功能,总的系统用一个总控模块去控制,通过它调用子模块,层层调用以实现全系统的功能。这种结构如图5.4所示。这种方式便于设计、调试,保证程序的正确性,也容易实现模块共亭,实现软件重用,提高程序设计效率。
主模块可由主封面表单、主命令文件和主菜单文件构成;各个模块可由过程、自定义函数、表单、表单集、应用程序或子菜单等构成。
一个表单或一个表单集中可有一到多个用户界面,可设置一到多个命令按钮及其他程序控件,用户可利用按钮及程序控件,产生特定的消息触发执行一个程序,完成一个功能。应用程序是对一个模块编译后的. APP执行文件,“过程”是由命令组成的程序,以RETURN语句结束,它可为另一个程序所调用,调用执行时遇到RETURN语句将返回其调用程序。
图 5.4 VFP程序总体结构
一.变量赋值与显示语句
在项目管理器中选“代码→程序→新建”或在命令框利用命令MODIFY COMMAND建立命令文件。
1.MODIFY COMMAND
意义:创建命令文件。
命令格式:MODIFY COMMAND 文件名
例如:MODIFY COMMAND PROC1
执行此命令后,将进入全屏幕编辑状态。如原已建立了该文件proc1,将调出该文件在屏幕上显示,用户可对之修改。如是新文件,则用户可利用全屏幕编辑键,输入自己的程序。新文件将自动加上扩展名.PRG。
2.DO
意义:执行命令文件程序,有三种方法:①在项目管理器中选“代码→程序→选择程序名→运行”。②在主菜单中选“程序→运行→输入(选择)程序名→运行”。③在程序中或命令窗日中使用DO命令。命令格式:DO 程序名[WITH 表达式表]
程序名可以是上述方式建立的命令文件(.PRG文件)、可执行文件(.EXE文件)、应用程序(.APP文件),及对.PRG文件编译后的文件(.FXP文件)。如调用DO命令时不带扩展名,则按.EXE文件、.APP文件、.FXP文件、.PRG文件的顺序查找同名程序并执行之。
例如:DO PROC1
此外,程序名还可能是菜单程序,调用时必须带扩展名(.MPR)。例如,有菜单程序MAIN.MPR,则可如下调出执行:
DO MAIN.MPR
程序名还可以是事件名或过程名。
其中表达式表由多个表达式组成,用逗号分开,在执行时首先计算各表达式的值,并带入被调程序,被调程序第一句应是LPARAMETERS形参表语句,形参表是以逗号分隔的多个内存变量名,其个数应等于调用时的表达式的个数,执行时,首先用调用语句中各表达式的值对应给它们赋值。
例如:主程序中:DO PROC1 WITH “AB”,21
被调程序:LPARAMETERS M1,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 通配符]将变量名能与通配符相匹配的内存变量说明为局部性变量。“ALL EXCEPT通配符”将除了能与通配符相匹配的变量名之外的内存变量说明为局部性变量。在程序中,为了一个程序的运行结果不影响另一个程序的执行,不希望同名变量将值从一个程序带到另一个程序而造成干扰。为此,可将该变量定义成局部性变量。
5.DIMENSION
意义:定义内存变量数组命令,VFP中可定义一维或二维数组。
格式:DIMENSION 数组名(数字表达式1[,数字表达式2])[,数组名2(数字表达式1[,数字表达式2])]„
每个数组的每个元素都可单独使用,如同一个内存变量,称为下标变量,下标起始值为1。
例如,DIMENSION ARRAY1(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.PUBLIC ARRAY
意义:定义全局性内存变量数组。
格式:PUBLIC ARRAY 数组名(数字表达式1[,数字表达式2])[,数组名2(数字表达式1[,数字表达式2])]„
7.=
意义:赋值语句。
将表达式的值赋值给一个内存变量。对变量赋值后,该变量类型也即确定为表达式返回值的类型。对一个变量可重复赋值,也可改变变量的类型。但为了保证程序的清晰和结构完整,建议在一个系统中每个变量名应有确定的意义和数据类型。
8.STORE
意义:同时对多个变量赋值命令。
格式:STORE 表达式 TO变量1[,变量2]„
在程序运行时常要求用户输入控制参数或数据,实现此功能语句我们称为人机对话语句。在程序中如插入人机对话语句,用户可借助键盘输入参数或控制量赋值给变量。控制程序走向,或用于不同数据处理。在程序执行到这类语句时,将停止运行,在屏幕上显示命令中附注的提示信息,同时等待用户从键盘输入数据,赋给所指定的变量。完成赋值之后再接着运行下一条语句。在VFP中这类语句可在主控程序中或在调试程序时使用,在表单程序中使用文本框等各种控件及消息框代替它们。
9.INPUT
意义:输入各种类型数据赋给内存变量
格式:INPUT “提示信息” TO 内存变量名
本命令允许输入字符类型、数值类型、日期类型、逻辑类型等不同类型的数据,要求输入数据是字符类型时,数据两端要加定界符,例“张平”;输入数据是日期类型时,要按{MM/DD/YY}或设定的格式,例{12/21/00};逻辑类型按.T.、.F.格式。
用户输入还可以是包括变量名及函数在内的表达式,但变量必须是己赋值的,表达式是可以计算出确定值的。用户输入完后回车表示输入结束。
例:INPUT“请输入初始日期:” TO D1
屏幕上显示:“请输入初始日期:”,光标在此句之后。用户可输入{05/10/96}。
此时用户如果执行命令:?D1
屏幕上将显示:05/10/96
10.ACCEPT
意义:输入字符串赋给变量。
格式:ACCEPT[“提示内容”]TO内存变量名
该命令和INPUT命令区别有两点:
.输入数据均被视为字符类型。
.输入数据两端不需加定界符,如加了定界符,定界符被视作字符串的一部分。
11.WAIT
意义:接收单个字符赋给变量,或中断程序,按任意键后继续。
格式:WAIT [“提示信息”] TO 内存变量名
该命令与ACCEPT命令不同点在于只接收从键盘输入的一个字符,用户输入一个字符后无须回车。该命令也可用在VFP表单程序的某个事件中,用于中断该事件的执行,让屏幕显示程序运行的中间结果,按某个键或单击鼠标后再继续执行。
12.GET
意义:格式化输入数据,给内存变量赋值或修改表中当前记录字段内容。
格式:@ 行号,列号 GET 内存变量名或字段名
[FUNCTION功能代码][PICTURE格式代码][DEFAULT表达式][MESSAGE提示信息]
[RANGE输入值范围下限,输入值范围上限][SIZE文本框高度,文本框宽度][VALID 条件表达式]
该命令可用于对内存变量赋值,也可用于修改当前打开表中当前记录中指定字段的内容。如对内存变量赋值且省略DEFAULT选项,在使用此语句时,必须已对该内存变量赋值。否则按此选项中表达式对内存变量初始化。
本命令执行后只显示内存变量或字段当前值,要到执行命令“READ”时,此语句方被激活,程序停止执行,等待用户从键盘输入数据,直待回车后才继续执行。行号、列号为当前窗口中字符行和列的位置号。行号与列号允许是小数。FUNCTION选项用于对输入内容限制或变化。功能代码:
A:只允许输入内容由字母字符组成,包括不允许空格和标点符号。
B:数值数据左对齐,默认格式为右对齐。
I:文本居中对齐。
J:文本右对齐,默认为左对齐。
Sn:限定文本框中字符个数为n。如S20。
T:去掉前导和后缀空格。
Z:当数值数据值为0时显示空格。
!:把字母字符转换为大写。
PICTURE选项用于限定输入数据的字符类型及大小。功能代码例:
A:该位为字母或数字
L:只允许逻辑数据。
N:该位为字符或数字。
X:任何字符。
I:该位为数字,或数值数据中的符号。
-:标明小数点位置。,:用逗号分隔左右数字。
!:将小写字母转换为大写字符。
例:@3,10 GET x1 DEFAULT 0 PICTURE“9999.99”
此时在屏幕第3行的第10列位置显示方框,其中内容为DEFAULT规定的初始值0.00,如再发出命令:READ,将光标落在尚未激活的第一个方框上等待输入,只能输入数字和符号,且整数部分不多于4位,小数部分不多于2位,否则将提示“请您重新输入”。
RANGE、VALID两个选项用于保证数据完整性,输入数据必须在预定范围内,满足条件表达式要求时,才可完成赋值操作。本语句还有设置字体、字形和颜色的选项。
在VFP中,综合上述人机交互命令尤其是@„ GET命令的功能和特性,设计了文本框、编辑框等类和控件,便之应用更加方便、简单,我们将在下一章中介绍。
程序运行结果一般由输出语句使其显示在屏幕上或输出到其他地方,输出语句可将数据输出到屏幕上显示也可传送给打印机或传送存入到其他文件中。屏幕显示语句在VFP中一般用在主控程序或调试程序时使用。在表单程序中使用各种控件、消息框代替它们。
13.?|??
意义:计算<表达式表>所指定的各表达式的值,并显示在屏幕上。
格式:?表达式1[,表达式2]„
用?时,从下一行第一列起显示结果。用??时,从当前行当前列起显示结果。
14.SAY
意义:格式化输出语句。
格式:@行号,列号 SAY表达式[FUNCTION功能代码] [PICTURE格式代码][SIZE高度,宽度]
有关选项的意义与@„GET命令相似,此外还有关于字体,颜色设置的选项。若发出有SET DEVICE TO PRINTER命令,输出到打印机,否则输出至屏幕上显示。
本语句常与@„ GET语句合用,合用时,行号、列号指SAY内容显示所在行、列号,GET变量内容框将放置在SAY内容之后。二.程序控制命令
1.IF„ENDIF命令
意义:分支条件语句,根据逻辑表达式的值,有选择的执行一组命令。根据条件表达式的值是.T.还是.F.控制程序流向。
格式:
IF 条件表达式
语句序列1
[ELSE
语句序列2]
ENDIF
IF条件表达式语句是条件语句的开始,ENDIF语句是条件语句的终止。语句序列是若干条顺序执行的语句。执行时首先计算条件表达式的值,如结果为“真”(.T.)则执行语句序列l,执行完后退出该语句。如条件表达式不满足,且有ELSE语句和语句序列2,则执行语句序列2。其程序流程图如图5.5所示。
图5.5 分支结构程序流程图
图5.6 主控模块程序流程图
在一个分支控制语句块中可以嵌套另一个IF„ENDIF语句块。【例5.7】主控模块的程序
程序流程图如图5.6所示。编写程序清单如下: CLEAR &&清屏幕
@ 5,27 SAY “设备管理系统” @ 7,36 SAY “主菜单”
@10,21 PROMPT “1.各种查询、屏幕修改”+SPAC(16)@11,21 PROMPT “2.数据编辑”+SPAC(26)@12,21 PROMPT “3.资产统计”+SPAC(26)@13,21 PROMPT “4.报表打印”+SPAC(26)@14,21 PROMPT “5.系统维护”+SPAC(26)MENU TO m_choic &&等待用户输入
IF LASTKEY()=27 &&按Esc键返回VFP
RETURN ENDIF
IF m_choic=1
DO sbcx_sc.spr
ELSE
IF m_choic=2
DO sjbj_sc.spr
ELSE
IF m_choic=3
DO zctj_sc.spr
ELSE
IF m_choic=4
DO bbdy_sc.spr
ELSE
IF m_choic=5
DO xtwh_pg
ENDIF
ENDIF
ENDIF
ENDIF ENDIF RETURN
2.CASE
意义:分情况语句,当求解一个问题存在多种情况,如要求对不同选择执行不同的语句序列,可采用分情况语句。该语句一句中列出许多语句成分,每个语句成分给出一个条件表达式,每次只根据具体条件找出第一个条件表达式值为.T.的语句成分,执行该成分语句中的语句序列后退出该语句。
命令格式:
DO CASE
CASE条件表达式1
语句序列1
CASE条件表达式2
语句序列2
„
CASE条件表达式n
语句序列n
[OTHERWISE
语句序列n+1]
END CASE
执行该语句时,系统逐一计算条件表达式1的值,条件表达式2的值„只要有一个条件表达式的值为.T.则执行其后语句序列,执行它后退出本分情况语句。
如到条件表达式n的值仍均为.F.又有OTHERWISE成分,则执行语句序列n+l,其程序流程图如图5.7所示。
仍如上面主控程序的例子,程序可设计为:
CLEAR &&清屏幕
@ 5,27 SAY “设备管理系统”
@ 7,36 SAY “主菜单”
@10,21 PROMPT “1.各种查询、屏幕修改”+SPAC(16)
@11,21 PROMPT “2.数据编辑”+SPAC(26)
@12,21 PROMPT “3.资产统计”+SPAC(26)
@13,21 PROMPT “4.明细报表打印”+SPAC(22)@14,21 PROMPT “5.系统维护”+SPAC(26)MENU TO m_choic &&等待用户输入
IF LASTKEY()=27 &&按Esc键返回VFP
RETURN ENDIF
DO CASE
CASE m_choic=1
DO sbcx_sc.spr
CASE m_choic=2
DO sjbj_sc.spr
CASE m_choic=3
DO zctj_sc.spr
CASE m_choic=4
DO bbdy_sc.spr
CASE m_choic=5
DO xtwh_pg
ENDCASE
RETURN
图5.7 CASE结构程序流程图
从上面两段程序可见,对于同一个问题,用DO CASE „ENDCASE 语句比IF„ENDIF语句要简洁了并且逻辑关系清晰,因此不容易出错。在分情况语句中也可嵌入分支条件语句及分情况。它本身也可嵌入到分支条件语句中去使用。
在对数据表中数据时,常常每条记录被处理的过程是一样的,处理语句也就大体相同,如果表中有多少记录就写多少条语句是十分困难的,为避免重复书写,可使用循环。
3.DO WHILE„.ENDDO
意义:循环语句,可使多次重复执行同一组语句。格式:
DO WHILE条件表达式
语句序列
[LOOP]
[EXIT]
ENDDO
其中“DO WHILE条件表达式”语句称为循环起始语句,“ENDDO”语句称为循环结束语句,进入此命令时首先检查条件表达式的值是否为真(.T.)。如果是真,则执行语句序列,然后再判断条件表达式的结果,如仍为真,则继续下去。如果为假(.F.)则退出循环,执行ENDDO后面的语句。如果进入本命令一开始,条件表达式的值为假,则语句序列一次也不执行,就直接转入执行ENDDO后面的语句。其中LOOP意义为结束本次循环,返回循环体开始。EXIT意义为结束循环,转入执行ENDDO后面的语句。
LOOP语句和EXIT语句一般用在分支条件语句中,因而语句格式为:
DO WHILE 条件表达式1
语句序列1
[IF条件表达式2
LOOP
ELSE
语句序列2
ENDIF]
[IF条件表达式3
EXIT
ELSE
语句序列3
ENDIF]
ENDDO
其程序流程图如图5.8所示。
在使用时必须保证经有限次循环后条件表达式1应变为假或条件表达式3的值应变为真,使退出循环。否则就可能成为死循环。在条件表达式中的变量称循环变量,在数据库中循环变量可能是内存变量,也可能是表中的指针。必须注意在每次循环过后,循环变量的值都要改变并且是向最终使条件表达式1的值为假或条件表达式3的值变真的方向变化,否则就无法满足前述退出条件。在VFP中有两类特殊用法。
(1)循环变量是指针。该用法中有两种结构①指针首先指向第一条的DO WHILE结构如图5.9所示。②指向满足条件记录的第一条的DO WHILE结构如图5.10所示。
图5.8 DO WHILE„ENDDO结构程序流程图
图5.9 指针做循环变量开始指向第一条时的DO WHILE结构流程图
图5.10 指针做循环变量开始指向满足条件记录的第一条时 的DO WHILE结构流程图
格式1:图5.9实现的语句。
USE(表名)
SELECT工作区别名
GO TOP
DO WHILE NOT EOF()
语句序列
SKIP
ENDDO
在本格式中,循环变量是表中指针,首先让指针指向表的第一条记录,如果不是文件尾,则执行语句序列之后让指针下移一条,再返回判断指针是否指向文件尾。这样一直继续下去直到指针指到最后一条记录的后面,循环结束。
【例5.8】在学生表中有少数学生更换了班级,现要求在屏幕上一屏一屏地显示每个学生的数据,并提问是否修改班级名称,如回答“Y”,则提供修改框。
SET TALK OFF
USE学生
KEY=“Y”
GO TOP
DO WHILE NOT EOF()
@3,10 SAY“姓名:”+姓名
@5,10 SAY“班级:”+班级
@7,10 SAY“出生日期:”+DTOC(出生日期)
@9,10 SAY“是否修改,Y/N?’GET KEY
READ
IF UPPER(KEY)=“Y”
@11,10 SAY“请输入改后班级名称” GET 班级
READ
ENDIF
SKIP
ENDDO
USE
SET TALK ON
格式2:如果只按某个条件查看记录,则可用查找语句开始。图5.10实现语句:
LOCATE FOR条件表达式
DO WHILE NOT EOF()
语句序列
CONTINUE
ENDDO
例5.8中如只查99级学生,显示其姓名则:
LOCATE FOR “99”$班级
DO WHILE NOT EOF()
?姓名
CONTINUE
ENDDO
(2)当于DO UNTIL的循环结构。
有些循环要在执行部分语句之后再根据一个条件表达式判断是否结束,此时循环条件可用常量.T.,见图5.11所示。
图5.11 DO UNTIL结构程序流程图
语句格式: DO WHILE.T.语句序列
IF 条件表达式
EXIT ENDIF
ENDDO
【例5.9】求编写学生表录入新数据的程序,每次录入一条记录,之后提问是否继续,如回答不是“Y”,就停止录入。
SET TALK OFF
USE 学生
KEY=“ ”
DO WHILE.T.APPEND BLANK
@3,10 SAY“姓名:” GET 姓名
@5,10 SAY“班级:” GET 班级
@7,10 SAY“出生日期:”GET 出生日期
READ
@9,10 SAY“否继续?Y/N?” GET KEY
READ
IF UPPER(KEY)<>“Y”
EXIT
ENDIF
ENDDO
USE
SET TALK ON
此语句由用户输入Y或N控制程序结束。
上述第一、二两种格式可以用等价的SCAN循环取代。
4.SCAN„ENDSCAN循环语句
意义:在数据表中循环检查或处理一条条记录。
命令格式一:
SCAN
语句序列
ENDSCAN
此句等价于前述格式1的语句。
命令格式二:
SCAN FOR条件表达式
语句序列
ENDSCAN
本语序等价于前述格式2的语句。有一些循环次数是一定的,或者循环变量的值在每次循环中增加的量是相同的,则可应用FOR循环。
5.FOR„ENDFOR循环语句
命令格式:
FOR内存变量=初始值 TO 终了值[STEP 增量]
语句序列
ENDFOR
此循环以某个内存变量为循环变量,进入循环时首先给它赋初始数值,只要不超过终了值,则执行语句序列。STEP语句为可选项,指示在每次循环后循环变量的增加量。前面执行语句序列之后,将循环变量值增加增量的值,再判断是否超过终了值,这样继续下去直到超过终了值。增量可为正值也可为负值,省略时默认值是1。如增量为正,则当循环变量大于终了值时,循环结柬。如增量为负,则每循环一次,循环变量均减小,减少到小于终了值时循环结束。
例5.8中修改班级名的程序也可写为:
SET TALK OFF
USE 学生
KEY=“ ”
N=RECCOUNT()&&记录总条数
FOR I=1 TO N
@3,10 SAY“姓名:”十姓名
@5,10 SAY“班级:”十班级
@7,10 SAY“出生日期:”+DTOC(出生日期)
@
9、10 SAY“是否修改班级名,Y/N?” GET KEY
READ
IF UPPER(KEY)=“Y”
@11,10 SAY“请输入改后班级名称” GET 班级
READ
ENDIF
ENDFOR
USE
SET TALK ON
使用相对指针,如果打开索引,或某些录入、修改、查询操作使当前指针位置改变都可能引起错误。不如本例中采用物理地址,比较可靠。
【例5.10】要求输入N个学生的总分X,按总分分成优、良、及格、不及格四个等级,统计每个等级的人数。等级划分标准为:90-100分为优,75-89分为良,60-74分为及格,59分及以下为不及格。
SET TALK OFF
DIMENSION M(4)&&定义数组
STORE 0 TO M&&M所有元素初值设为0
x=0
INPUT“学生人数 N=?” TO N&&计数循环
FOR I=1 TO N
?“请输入第”,I,“人的成绩”
@ROW(),20 SAY “X=?” GET X
READ
DO CASE
CASE x>=90
M(l)=M(1)+1&&统计优秀生人数
CASE x>=75
M(2)=M(2)+1
CASE x>=60
M(3)=M(3)+l
CASE x<60 AND x>=0
M(4)=M(4)+1
OTHERWISE
?“输入数据有错,请重输”
I=I-1
ENDCASE
ENDFOR
?“优、良、及格、不及格人数各为”,M(1),M(2),M(3),M(4)SET TALK ON
【例5.11】设有商品表,结构为商品(商品代码,品名,单价,数量,金额),欲对其中部分商品调动单价,为此建立一个调价表,其结构为调价(商品代码,原单价,新单价),编写程序用调价表中新单价数据修改商品表中单价与金额。
SET TALK OFF
SELE 1
USE商品
SELE 2
USE 调价
SCAN
代码1=商品代码
SELE 1
LOCATE FOR商品代码=代码1
IF NOT EOF()
REPL 单价 WITH 调价.新单价、金额 WITH 单价*数量
ENDIF
SELE 2
ENDSCAN
CLOSE ALL
SET TALK ON
本例中设置二个工作区,分别打开二个表,首先在工作区2上利用SCAN循环遍历调价所有记录,对每一记录在商品表中查找有无商品代码标识相同的记录,如有,则用新单价更新原单价,并修改金额。由于在非当前工作区中不能移动指针,不能查询,不能修改数据,因而在转到商品表中查询之前要将商品表所在工作区1设为当前工作区,更新以后又转到工作区2将调价表中指针指向下一条,再准备按第二个品种调价。
在当前工作区中可读取非当前工作区中数据,如本例中用 “调价.单价”这样的格式从工作区2的调价表中读取其中指针所指记录的单价,这种方式称为联访。如此对多个数据表操作十分麻烦,可采用预先建立关联的办法,在一个表中移动指针时,第二个表中指针按关键字保持一致的方式跟着移动。
三.其他常用命令
1.SET RELATION
意义:将当前数据库和“别名”工作区中的表文件关联在一起,当前表文件称为主动表文件,“别名”工作区中的表文件称为被关联表文件,每当主动表文件中指针移动时,被关联表文件中指针也相应移动。
命令格式:SET RELATION TO 字段名 INTO 别名[ADDITIVE]
命令中选用的“字段名”必须同时包含在两个表文件中,且被关联表必须以该字段建立索引文件并打开为主索引文件。每当主动表文件中记录指针移动时,被关联表中记录指针根据主索引文件指引指向与之相匹配(索引字段值等于主动表当前记录该字段的值)的第一条记录。若找不到匹配记录,则指针将指向文件尾,EOF()为真(.T.)
如命令无ADDITIVE选项,在建立关联时将取消当前数据库与其他数据库的任何关联,仅保留一个新关联。而选了此选项,则原有关联均保留,增加一个新关联。
要注意的是,如果对应主动表中某记录在被关联表中找不到匹配记录时,主动表中数据被改为0。例5.11中如果调价表中商品包括商品表中全部商品,利用此命令程序可修改为:
USE 调价&&第一个打开表默认置于1号工作区
INDEX ON 商品代码 TO INDEX1
SELECT 2
USE 商品
SET RELATION TO 商品代码 INTO 调价
SCAN
REPLACE 单价 WITH 调价.新单价,金额 WITH 单价*数量
ENDSCAN
本例中关于被关联表中字段名也可用“区号.字段名”形式对之访问。
不过使用本程序要求两表中内容必须匹配,例如例5.11中如商品只有部分调价,在调价表中只有商品表中部分商品,那么该程序将使商品表中不调价商品单价均变为0。
一般在涉及利用一个表数据修改另一个表数据时,我们以采用SQL语言中修改命令UPDATE比较好。也可采用全联结视图再对之操作。”
2.RUN
意义:在VFP环境中调用DOS命令。·
命令格式:RUN DOS命令或!DOS命令
3.LOAD命令
意义:把汇编或C语言编写并编译的二进制文件调入内存命令。
命令格式:LOAD 二进制文件名
4.CALL命令
意义:执行由LOAD装入内存的二进制代码文件命令。命令格式:CALL 文件名[WITH 字符表达式/内存变量] 其中WITH选项用于向调用程序传递参数。
5.ON ERROR
意义:当出现错误时执行的命令。
命令格式:ON ERROR 命令
其中命令可为任何VFP语句。在程序调试过程中,可在程序中加入此命令,并设计命令处理程序,在其中可加入显示ERROR(),MESSAGE(),LINENO()和PROGRAM()的语句,将错误代码、错误消息、错误行号及程序名称显示出来,以帮助发现错误所在,方便纠正错误。在应用程序中,有时可能出现一些不影响最终结果的错误,我们也可在程序中加入这类错误陷阱,所指定的命令可以是一条无效语句,不让错误影响程序运行。
【例5.12】程序出错时的处理程序及调用方法 主程序:
*---Set system enviroment------
clos data
clea
on erro do showerro with prog(),lineno(),erro(),mess()&&调用出错程序showerro
语句序列
程序出错时的处理程序:
para m_prog,m_line,m_num,m_mess&&传递参数
priv m_odcons&&定义局部变量
m_odcons=set('cons')
set cons off
defi wind erro_win from 0,0 to 14,49;
titl ' 系统错误 ';
colo gr+/b;
shad doub;
in desktop
move wind erro_win cent
acti wind erro_win
@1,4 say ' 错误警告' colo gr+/b
@3,8 say '当前程序无法继续,按<确定>将返回主调!' colo w+/b
@4,4 say '程序建议:稍后再试或与软件供应商联系.' colo w+/b
@6,4 say '出错程序:'+m_prog colo w+/b
@7,4 say '出 错 行:'+allt(str(m_line))colo w+/b
@8,4 say '错误代码:'+allt(str(m_num))colo w+/b
@9,4 say '错误内容:'+iif(len(m_mess)<=28,m_mess,subs(m_mess,1,28)+'...')colo w+/b
@2,3 to 2,wcol()-4 colo w/b
@5,3 to 10,wcol()-4 colo w/b
=opendbf('errosave','errosave','shar')&&存放错误情况
inse into;
dbferrosave(errodate,errotime,erroprog,erroline,errocode,erromess);
valu(date(),time(),m_prog,m_line,m_num,m_mess)
use in errosave
m_readkey=20
m_cnt=1
do while m_readkey=20
if mod(m_cnt,2)=0
@1,6 say ' 错误警告' colo b/b
else
@1,6 say ' 错误警告' colo gr+/b
endi
@wrow()-2,wcol()/2-2 get mb_isee func '*th 确定' defa 1 &&colo sche 13
read cycl modal time 0.4
m_readkey=readkey()
m_cnt=m_cnt+1
endd
set cons &m_odcons
clea wind
close data
clea
retu to master&&返回主程序
6.显示文件目录命令
格式:DIR [<驱动器>][<路径>][<文件名>] 功能:显示指定的磁盘驱动器上的文件名
说明:<文件名>中可带通配符;命令中不指定文件名,则仅仅显示指定目录下的数据表文件名。7.清屏命令CLEAR 格式:CLEAR 功能:清除屏幕 8.总清命令CLEAR ALL 格式:CLEAR ALL 功能:关闭所有打开的数据表文件、索引文件和其他各种文件,清除已有的内存变量 9.SET TALK ON/OFF
四.程序设计基础
程序的概念
命令执行方式:通过命令菜单或直接在命令窗口输命令来执行,执行的结果显示在屏幕上。程序执行方式:以程序的方式来执行。
程序是能够完成一定任务的命令的有序集合,这组命令存放在程序文件(*.prg)中,执行程序时,系统按一定的次序自动执行包含在程序文件中的命令。
程序的特点
可以利用编辑器,方便地输入、修改和保存程序。可以利用多种方式、多次运行程序。可以在一个程序中调用另一个程序。
程序的基本要求
正确性,能实现算法的各个步骤,逻辑上正确,对输入产生的错误有检测措施。通用性,不能只解决一个问题,还考虑解决一类问题。高效率性,编写执行时间短,占用存储空间少的程序。可维护性,程序应易读、易懂、易修改。安全性,必须确保安全、可靠。
程序文件的建立
在项目管理器中和菜单中建立
用命令方式:modify command <文件名>
程序的执行
从“ 程序” 菜单中选择“ 运行” 命令方式:do < 文件名> <文件名>中如果没有指定扩展名,系统将按下列顺序寻找程序文件并执行:.exe-->.app(应用程序)-->.fxp(编译程序)-->.prg
当程序文件被执行时,文件中包含的命令将被依次执行,直到所有的命令被执行完毕中,或者执行到以下命令:
cancel(终止程序执行,返回命令窗口)do(转去执行另一个程序)return(结束当前程序,返回到上级程序,若无上级程序则返回到命令窗口)quit(退出VFP 系统,返回到操作系统)
程序结构
(1)每个程序都必须有1个文件名,文件名由字符、数字或下划线组成,第一个字符必须是字母或汉字,程序扩展名为.PRG(2)程序由若干行数据库命令组成,每行最多写2048个字符,1行只能写1条命令,若把一个命令写成若干行,需在该命令的第1行及中间各行的行尾写“;”号,但最后一行不写。(3)注释行由“*”开头,用以说明程序的名称、功能及其他需要说明的问题,“*”是注释命令,是非执行语句,可以写在程序任一位置。
(4)以“set”开头的命令为环境设置命令,一般出现在可执行语句的前面。(5)每行程序的后部可以写由“&&”号引导的注释。(6)“return”命令是返回命令,表示程序结束。
编写程序的步骤
举例:编写一个简单的程序:给出一个整数,判断是奇数还是偶数。(1)分析任务,确定方法;(2)分解任务,描述算法;(3)编写程序,认真检查;(4)上机调试,纠正错误
流程图
流程图符号的使用规则: 流程线的方向是从左到右,自上而下,非标准流向的流程线要用箭头表示。流程线就尽量避免交叉。
流程图符号内的文字一律从左到右,自上而下书写。流程图符号的注释应写在符号右侧。
出入口处的连接符应使用相同名称,表示把它们连接起来。
子程序、过程和自定义函数
模块化:按适当的原则把一个情况复杂、规模较大的程序系统划分为一个个较小的、功能相关而又相对独立的模块的过程。
模块:一个在结构上相对独立的程序段。可以是子程序、过程或自定义函数。
子程序的基本概念
子程序:总被其它程序调用的,一般不单独运行的一个程序段。
子程序与主程序的关系:是一种调用和被调用的关系。主程序是能调用其他子程序,而不被其他程序调用的程序,凡能被调用的程序都称为子程序。程序中至少应有一个主程序,可以有一个或若干个子程序。子程序的使用
①使用模块化程序设计方法编写程序时,把各个功能划分成若干个功能子模块,把子模块写成一个子程序。
②需要反复调用的情况下,可以写成一个子程序,以节省存储空间。
编写子程序
调用子程序命令格式:
do <子程序名>[ WITH<参数表>] 子程序返回命令
return [ to master ] 表示返回到上一级子程序或主程序。带参数to master表示无论在哪级子程序上,均立即返回主程序。
例
1、对任意给的正整数A、B、C,编写程序计算S=A!+(3/5)B!+(C!/2)调试子程序 联合调试:当主程序和子程序分别编辑完成之后,直接运行主程序。若主程序或子程序有错,再进行编辑、调试、重新运行,直到输出正确结果为止。单独调试:编辑一个模块,调试一个模块,各个模块都调试成功后,加入主程序联调。例
2、根据数据库student.dbf编写一个菜单程序main.prg,完成对数据库查询程序cx.prg和删除程序sc.prg的调用
过程与过程文件
过程是一段程序,它与子程序不同之处在于,子程序是一个独立文件,而过程是过程文件的一个组成部分,可以把多个过程写在一个过程文件中。过程的结构:
procedure <过程名> <过程体> return [to master/to <程序名>] 过程名由用户定义,供调用过程时使用,过程体是一个语句序列,是过程的核心部分,选择to <程序名>表示返回到“程序名”指定的程序。过程文件的结构
procedure <过程名1> <过程体1> return [to master/to <程序名>] procedure <过程名2> <过程体2> return [to master/to <程序名>] „„
procedure <过程名n> <过程体n> return [to master/to <程序名>] 过程文件的调用
在主程序中,调用过程前,首先要打开过程文件。
命令格式:set proc to <过程文件名>
调用后,要关闭过程文件。
命令格式:set procedure to 或 close procedure 过程的调用
格式:do <过程名> 例
3、根据数据库student.dbf编写一个菜单程序gczxc.prg,用过程形式完成对数据库查询程序cx.prg和删除程序sc.prg的调用。
自定义函数命令
命令格式:(1)function <函数名>(2)return <表达式> 基本格式:
function<函数名> parameters <参数表> <语句序列>
return <表达式>
主程序与自定义函数的组织形式:
举例计算组合数的值
编写K!的函数。作业
1、从键盘输入五个数组,每组有六个数据,分别用子程序、过程、自定义函数的方法,输出每组数的最大值和最小值。
2、用子程序、过程、自定义函数三种不同形式对student.dbf数据库编写一个菜单程序:
系统主菜单
1„„追加记录
2„„修改记录
3„„插入记录
4„„删除记录
5„„输出记录
6„„退
出
第五篇:VFP讲稿(创建数据库和表)
第二部分
数据库的创建与单命令
创建数据库和表
一、Visual FoxPro 6.0的配置
P28
二、项目及其管理器
P31
1.项目的概念
项目:是文件、数据、文档和Visual FoxPro对象的集合,被保存为扩展名为PJX的文件。
建立项目可以对相关的内容(项目的各组成部分)进行统一组织、统一管理。
项目管理器:是Visual FoxPro中处理数据和对象的主要组织工具,是Visual FoxPro的“控制中心”。
项目管理器为其各个组成部分提供了一个组织良好的分层结构视图。利用项目管理器,用户可以创建、修改、移出或删除文件。只要简单地单击鼠标,就可以跟踪表和查询,组织表单、报表、标签、代码、位图和其它文件。
2.项目的创建
3.一个项目产生两个文件.PJX和.PJT。4.打开/关闭项目 5.选项卡
三、Visual FoxPro 数据库的基本操作
P93 1.建立数据库
(1)在项目管理器中建立 *(2)从“新建”对话框中建立 *(3)用命令建立
P94(4)新建立的数据库有三个文件
三个文件的扩展名分别是:dbc
dct
dcx dbc数据库文件的扩展名 dct数据库备注文件的扩展名 dcx数据库索引文件的扩展名 2.打开和关闭数据库(1)打开数据库 有三种打开方法: 在项目管理器中打开 *从“打开”对话框中打开 *用命令打开
OPEN DATABASE命令
P95(2)关闭数据库 CLOSE DATABASE 3.数据库设计器
有三种打开方法: 在项目管理器中打开 *从“打开”对话框中打开 *用命令打开
MODIFY DATABASE命令
P98 4删除数据库
有两种删除方法: 在项目管理器中删除 *用命令删除
DELETE DATABASE命令
P99
四、数据库表
1.建立数据库表
P99(1)表设计器
(2)字段名:命名规则与内存变量的命名规则相同。可与内存变量同名。(3)字段类型和宽度(4)建立数据库表产生的文件(5)字段有效性组框(6)用命令建立表
使用命令CREATE <表名> 有打开的数据库时,建立的是数据库表,否则建立的是自由表。2.修改表结构
P102(1)插入字段(2)删除字段(3)修改字段
(4)用命令MODIFY STRUCTURE打开表设计器进行修改
五、自由表
如果当前没有打开数据库,创建的表是自由表。1.创建自由表。
2.自由表和数据库表的异同。
自由表和数据库表的设计器不同。*数据库表有很多附加信息。3.将自由表添加到数据库。4.从数据库中移出表。