(完整版)VFP中常用命令

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VFP中常用命令
一、数据库的建立、打开、关闭和删除
建立数据库:
CREATE DATABASE [databasename|?]
从磁盘中删除数据库:
CREATE DATABASE [databasename|?]
ELETE DATABASE databasename
DELETE DATABASE databasename|?
打开数据库:
OPEN DATABASE [EXCLUSIVE|SHARED][NOUPDATE]
打开数据库设计器(允许用户按交互方式编辑当前数据库):
MODIFY DATABASE [databasename|?]
指定的数据库databasename为当前数据库。

指定当前的数据库:
S ET DATABASE TO [databasename]
Databasename必须为已经打开的数据库。

如果省略数据库名称databasename,则不指定当前数据库(没有当前数据库)。

关闭数据库:
CLOSE DATABASE [ALL]
关闭当前数据库,如果带ALL子句,则关闭所有打开的数据库。

二、数据表和视图的建立、打开、关闭和删除
建立数据表(SQL命令):
CREATE TABLE | DBF tablename (Col_name1 Type1 [NOT NULL/NULL]
[{,Col_name2 Type2 [NOT NULL/NULL]}...])
table_name是所创建的数据表的名字。

Col_name1,Col_name2,...是表中列的名。

Type1, Type2...是相应列的数据类型(VFP的数据类型见表3-9)。

如果说明为NOT NULL,则列中不允许分配空值(这种情况下,列不能包含空值,如果插入空值,将返回错误信息)。

向当前打开的数据库中添加数据表:
ADD TABLE tablename|?
从当前打开的数据库中删除数据表:
REMOVE TABLE tablename|? [DELETE]
如果包含DELETE子句,将从磁盘中删除这个表文件,否则,只从数据库中删除,但文件
仍保存在磁盘中。

在当前打开的数据库中建立视图:
CREATE SQL VIEW viewname AS SELECT ……
其中SELECT ……为SELECT语句。

执行这个语句时,如果没有打开的数据库,则建立独立的视图,这样的视图不能存储。

从当前打开的数据库中删除视图:
DELETE VIEW viewname
打开一个表:
USE tablename|? [IN 工作区号]
将当前数据表与另一数据表连接后建立一个新表:
JOIN WITH 工作区号|表别名 TO tablename FOR 条件 [FIELDS 字段名表]
三、数据表和表结构的编辑、修改
打开浏览窗口(可在其中编辑数据表):
BROWSW(详细格式见P. 114~116)
打开并修改数据表中的字段:
(1) CHANGE [FIELDS 字段名列表]
(2) EDIT [FIELDS 字段名列表]
这两个命令的功能相似,可选子句较多(详见手册)。

数据表改名:
RENAME TABLE tablename1 TO tablename2
其中数据表tablename1必须存在且未打开。

视图改名:
RENAME VIEW viewname1 TO viewname2
其中数据表tablename1必须存在且未打开。

修改数据表结构(SQL命令):
ALTER TABLE tablename ;
ADD 字段名 Type [NULL | NOT NULL]
[,字段名 Type [NULL | NOT NULL] ;
[ALTER COLUMN字段名Type {NULL | NOT NULL}];
[{,字段名Type NULL | NOT NULL}...] ;
[DROP字段名[,字段名[, ...]]
将当前表与另一表之间建立关联:
SET RELATION TO [表达式1 INTO 工作区号1 | 表别名1];
[, 表达式2 INTO 工作区号2 | 表别名2] [, ...]
建立关联的两个表必须事先已按关联表达式进行索引排序。

在当前表与另一表之间建立一对多关联:
SET SKIP TO表别名1[, 表别名2]
消除当前表与另一表之间的关联:
SET RELATION OFF INTO 工作区号 | 表别名
四、数据表中数据操作(查询、插入、删除和修改等)
数据查询SELECT语句(SQL命令)
格式见教材的有关章节。

这是本课程的重点内容,必须很好地掌握。

更改数据表中的记录:
REPLACE 字段1 WITH 表达式1[ADDITIVE];
[,< [,<字段2> WITH <表达式2>[ADDITIVE],…];
[FOR 条件1][WHILE条件2]
其中的ADDITIVE子句适用于备注字段,表示将表达式的值加在字段的末尾。

用内存数组的值更新数据表中的记录:
REPLACE FROM ARRAY数组名 [FIELDS 字段名列表][常用子句]
用新的值更新表中的记录(SQL命令):
UPDATE [databasename!]tablename;
SET Column_1=Expression1 [{Column_2=expression2}...] ;
[WHERE Condition]
用一个表中的数据更新当前指定工作区中打开的表:
UPDATE ON fieldname FROM filename;
REPLACE fieldname1 WITH expr1
[, fieldname2 WITH expr2 [, ...]]
给记录加删除标记(SQL命令):
DELETE FROM [databasename!]tablename;
[WHERE 条件]
给记录加删除标记:
DELETE [范围] [FOR 条件] [WHILE 条件];
[IN 工作区号|表别名]
永久删除加了删除标记的记录:
PACK
永久删除打开的数据库中加了删除标记的记录:
PACK DATABASE
去掉删除标记(恢复)
RECALL [常用子句]
删除一个表中所有记录(保留表的结构):
ZAP [IN tablename|alias]
为数据表文件追加记录:
APPEND [BLANK][IN 工作区号|别名]
从另一个文件中提取数据添加到当前数据表的尾部:
APPEND FROM filename|? [FIELDS 字段名列表][ FOR 条件]
其中filename所指定的文件可以是数据表、EXCEL电子表格、文本文件等,如果不是数据表,需要其它子句指定格式(详见手册)。

用内存数组的值添加到当前数据表的尾部:
APPEND FROM ARRAY arrayname [ FOR 条件][FIELDS字段名列表]
数据中的一行对应一个新记录,一列对应一个字段。

从一个文件输入一个OLE对象放入一个通用(general)字段:
APPEND GENERAL 通用字段名 [FROM filename]
如果省略子句FROM filename,则将指定的字段清空。

将一个文本文件的内容拷贝到一个备注字段:
APPEND MEMO 备注字段名 [FROM filename][OVERWRITE]
如果省略子句FROM filename,则将指定的字段清空。

插入新记录(在当前记录之前或后插入):
INSERT [BLANK] [BEFORE]
如不省略BLANK,则插入一个空白记录,且不显示输入窗口。

在表中插入新记录并赋值(SQL命令):
INSERT INTO tablename [(字段1 [, 字段2, ...])]V ALUES (eExpression1 [, eExpression2, ...]) 或
INSERT INTO tablename FROM ARRAY ArrayName | FROM MEMV AR
如带有FROM MEMV AR子句,则用同名的内存变量给字段赋值。

清除当前记录中字段的数据:
BLANK [常用子句]
移动记录指针:
SKIP [n] [IN 工作区号|表别名]
五、文件管理(文件和文件夹的复制、创建和删除)
从当前表复制出表或其它类型的文件(表须打开)
COPY TO filename [FIELDS 字段名列表] [常用子句] [其它子句]
如果没有指定类型,则复制一个与当前的表相同的数据表。

复制表的结构
COPY STRUCTURE TO filename [FIELDS字段名列表]
复制任何文件:
COPY FILE 源文件 TO 目的文件
如果用此命令复制表,表须关闭
从磁盘上删除任意文件:
(1)ERASE filename|?
(2)DELETE FILE [filename|?]
任意文件改名(或文件移动到另一文件夹):
RENAME filename1 TO filename2
其中filename1和filename2都可以包含路径。

如二者不在同一文件夹,则将filename1移动到filename2所在的文件夹。

显示一个文件夹中的文件信息:
DIR | DIRECTORY [ON drive]
从磁盘上删除一个文件夹:
RD | REDIR 文件夹名
在磁盘上建立一个文件夹:
MD | MKDIR文件夹名
六、数据的复制与传送
单个记录与数组间的数据传送
当前记录→数组或内存变量:
SCATTER [FIELDS字段名列表][MEMO]TO 数组名 [BLANK] | MEMV AR [BLANK]
其中[BLANK]表示建立一个空元素的数组。

如果用MEMV AR子句,则表示将各字段的值复制到同名同类型的内存变量。

如果包含MEMO子句,则备注字段一起复制。

数组或内存变量→当前记录
GATHER FROM 数组名 | MEMV AR [FILEDS字段名列表] [MEMO]
用同名的内存变量或数组中的第一行置换当前记录,如果数组为多行的二维数组,也只用第一行。

成批记录与数组间的数据传送
表→数组:
COPY TO ARRAY arrayname [常用子句]
数组→表:
(1) A PPEND FROM ARRAY arrayname [ FOR 条件][FIELDS字段名列表]
用内存数组的值加在数据表的尾部,数据中的一行对应一个新记录,一列对应一个字段。

(2) REPLACE FROM ARRAY数组名 [常用子句]
用内存数组的值更新数据表中符合条件的记录。

查询结果→数组:
S ELECT …… INTO ARRAY arrayname
将SQL SELECT语句的查询结果传给数组arrayname。

这里“SELECT ……”可为各种形式的SELECT查询语句。

给内存变量赋值:
STORE 表达式 TO 变量名

变量名=表达式
七、排序与索引
将当前表排序后建立一个新数据表:
SORT TO 文件名 ON 字段名1 [/A | /D] ;
[/C] [ 字段名2 [/A | /D] [/C] ...];
[ASCENDING | DESCENDING] [常用子句];
建立单索引文件:
INDEX ON 表达式 TO 单索引文件名;
[FOR<条件>] [UNIQUE] [COMPACT];
[ASCENDING][DESCENDING][ADDITIVE]
建立复合索引文件:
INDEX ON 表达式 TO TAG 索引名 [OF 复合索引文件名];
[FOR 条件] [UNIQUE|CANDIDATE];
[ASCENDING][DESCENDING][ADDITIVE]
使用索引文件:
打开表时将索引文件一并打开,USE命令带INDEX子句:
USE tablename|? [IN 工作区号][INDEX 索引文件名列表|?]
给当前表打开一个或多个索引文件:
SET INDEX TO[索引文件名列表|?];
[ORDER 索引文件名序号|索引文件名|[TAG]索引名 [OF 复合索引文件名] ; [ASCENDING][DESCENDING]]
指定字符字段在排序或索引时的整理系列:
SET COLLATE TO 整理系列
对于汉字字符串,“整理系列”可以是“Machine”、“PinYin”或“Stroke”三者之一(必须带引号),分别表示按机器码、拼音和笔划排序。

指定当前表中的控制索引文件或标记:
SET ORDER TO;
[索引文件名序号|索引文件名|[TAG]索引名 [OF 复合索引文件名];
[IN 工作区号|表别名];
[ASCENDING][DESCENDIN G]
删除索引
DELETE TAG ALL [OF 复合索引文件名]
DELETE TAG 索引标识1 [OF 复合索引文件名1];
[,索引标识2 [OF 复合索引文件名2]]…
八、查找和定位
顺序查找当前表中满足条件的第一条记录:
LOCATE FOR 条件下[范围][WHILE条件]
找到后将记录指针定位在满足条件的第一条记录,且函数FOUND()的返回值为真。

在索引表中查找:
FIND cExpr
其中cExpr为字符串表达式。

如果找到,则记录指针定位在满足条件的第一条记录,且函数FOUND()的返回值为真;查找失败时,FOUND()的返回值为假,记录指针定位在文件尾。

在索引表中查找:
SEEK eExpr;
[ORDER 索引文件名序号|索引文件名|[TAG]索引名 [OF 复合索引文件名] ; [ASCENDING][DESCENDING]];
[IN 工作区号|表别名]
如果找到,则记录指针定位在满足条件的第一条记录,且为真;查找失败时,FOUND()的返回值为假,记录指针定位在文件尾。

继续查找:
CONTINUE
用LOCATE、 FIND或 SEEK查找到一条记录后,用CONTINUE继续查找下一条。

用以上查找命令LOCATE、 FIND、SEEK和CONTINUE的查找结果,都可以通过函数FOUND()的返回值反映出来。

九、统计计算
统计表中的记录数:
COUNT [范围] [FOR 条件] [WHILE 条件][TO内存变量名]
统计满足条件的记录数,显示记录数或将结果赋给内存变量名。

求和:
SUM [表达式列表];
[范围] [FOR 条件] [WHILE 条件][TO内存变量名|TO ARRAY 数组名]
求平均值:
A VERAGE [表达式列表];
[范围] [FOR 条件] [WHILE 条件][TO内存变量名|TO ARRAY 数组名]
对当前表中数值型字段进行分组求和:
TOTAL TO tablename ON 字段名[常用子句]
其中tablename为存放结果的表文件名,字段名为确定求和分组的字段。

计算:
CALCULATE 表达式列表;
[范围] [FOR 条件] [WHILE 条件][TO内存变量名|TO ARRAY 数组名]
其中表达式列表可以是如下函数的任意组合:
A VG(nExpr), CNT(), MAX(eExpr), MIN(eExpr), NPV(nExpr1, nExpr2,…),STD(nExpr),SUM(nExpr),V AR(nExpr)
其中nExpr为数值表达式,eExpr为任意表达式。

十、程序控制
条件语句:
IF 条件 [THEN]
……
[ELSE]
[……]
ENDIF
多分支语句:
DO CASE
CASE 逻辑表达式1
……
CASE 逻辑表达式2
……
CASE 逻辑表达式n
……
[OTHERWISE]
……
ENDCASE
DO循环:
DO WHILE 条件
[LOOP]
……
[EXIT]
……
ENDDO
FOR循环
FOR 循环变量=初值 TO 终值 STEP 步长
……(中间可插入[LOOP]或[EXIT])
ENDFOR | NEXT
扫描循环(对一个表中满足条件的记录进行循环):
SCAN [范围] [FOR 条件] [WHILE 条件]
……(中间可插入[LOOP]或[EXIT])
ENDSCAN
集合扫描循环
FOR EACH Var IN Group
Commands
[EXIT]
[LOOP]
ENDFOR | NEXT [Var]
十一、其它
定义数组:
DECLARE | DIMENSION 数组名(下标1,下标2,……)
定义过程:
PROCEDURE 过程名
PARAMETERS 参数表
……
RETURN [TO MASTER | TO 程序名]
定义函数:
FUNCTION 函数名
PARAMETERS 参数表
……
RETURN 表达式
调用一个子程序或过程
DO 子程序名 | 过程名 [IN 程序文件名][WITH 实在参数表]
定义公共变量:
PUBLIC 变量名列表
PUBLIC [ARRAY] 数组名1(行1,列1)[, 数组名2(行2,列2) [,…]]
定义私有变量
PRIV ATE变量名列表
PRIV ATE ALL[LIKE | EXCEPT 通配符]
定义局部变量
LOCAL 变量名列表
LOCAL [ARRAY] 数组名1(行1,列1)[, 数组名2(行2,列2) [,…]]
显示各种信息:
LIST …(格式见有关手册)
DISPLAY …(格式见有关手册)
输出提示信息:
WAIT [<提示信息>] [TO <内存变量>];
[WINDOW[AT[<行>,< 列>] [NOW AIT]];
[CLEAR|NOCLEAR];
[TIMEOUT<数值表达式>]
各种设置命令:
设置是否显示日期中的世纪:
SET CENTURY ON | OFF
设置显示的小数位数:
SET DECIMALS TO 小数位数
设置是否处理带删除标记的记录:
SET DELETED ON | OFF
如果设置为ON,则不处理带删除标记的记录。

设置是否显示命令的结果:
SET TALK ON | OFF
设置文件的搜索路径:
SET PATH TO 路径
设置传给子程序或自定义函数的参数是按值还是按引用方式传递:SET UDFPARMS TO V ALUE | REFERENCE
如设置为TO V ALUE,表示按值传递。

执行一个外部命令或程序:
RUN 命令或程序
在指定的位置显示或打印:
@行,列 SAY …
在指定的位置显示表达式的值,并等待用户输入,将输入值赋给一变量:
@行,列 SAY 表达式 GET 变量名 [DEFAULT 表达式]
READ
例:
@2,2 say "请输入金额: " get nMoney default 50
Read
此例先在第2行、第2列显示"请输入金额: ",等待用户输入一个数值,将用户输入值赋给变量nMoney,如果用户不输入数值(直接按回车),则将50赋给nMoney。

请注意在下一行不能漏掉“Read”。

ALL:命令对表中所有记录起作用,即执行时从首记录到末记录,最记录指针停在数据库的末尾。

NEXT <expN> 命令作用于从当前记录开始到当前记录后<expN>条记录为止的范围内的记录,最后记录指针指向作用范围内的最后一条记录处。

NEXT 1表示仅作用于当前记录。

Record <expN> 命令作用于记录号为<expN>的记录。

TEST 命令作用范围从当前记录开始到表的最后一个记录为止
命令中的FOR子句只作用于满足条件的记录。

一、基本命令
1. 打开和关闭数据表
USE [<数据表名>] 当省略选项时为关闭当前数据表
CLOSE ALL 关闭所有数据表
2. 选择当前工作区
SELECT <工作区号|数据表名|0>
功能:选择当前工作区。

可以直接选择工作区号,也可通过指定其中已经打开的数据表别名来指定工作区。

SELECT 0 是选择当前未使用的最低编号的工作区
3. 增加记录
APPEND BLANK 在当前表的尾部追加一个空白记录
INSERT BLANK 在当前表的当前记录之后插入一条空白记录
INSERT BLANK BEFORE 在当前表的当前记录之前插入一条空白记录
注意:在表建立索引后,INSERT的功能与APPEND相同
4. 替换字段的值
REPLACE [范围] <字段1> WITH <表达式1>[, <字段2> WITH <表达式2>, ...<字段n> WITH <表达式n>] [FOR <expL>]
功能:计算表达式的值,并填入指定字段,当范围和条件选项省略时只对当前记录操作。

5. 删除记录
DELETE [范围] [FOR 条件]
功能:对记录加删除标记(即逻辑删除),当范围和条件选项省略时只对当前记录操作。

RECALL [范围] [FOR 条件]
功能:对记录去除删除标记(即恢复删除),当范围和条件选项省略时只对当前记录操作。

PACK
功能:删除带有删除标记的记录
ZAP
功能:物理删除当前表所有记录
6. 建立索引与选择主控索引
INDEX ON <关键字表达式> TAG <索引标识符> [DESCENDING]
功能:对当前表按<关键字表达式>建立结构复合索引,索引文件名与表名相同,扩展名默认为CDX。

DESCENDING选项为按关键字降序排列,默认为升序。

SET ORDER TO TAG <索引标识符>
功能:在结构复合索引文件打开后,指定主控索引标识符。

7. 记录指针定位
GO BOTTOM | TOP | <expN>
功能:移动记录指针直接指定记录。

BOTTOM为指向末记录,TOP为指向首记录,<expN>为指向记录号为<expN>的记录。

SKIP [expN]
功能:按expN的值,从当前位置出发移动记录指针。

当expN为正时向尾部方向移动expN 条记录,当expN为负时向首部方向移动expN条记录,当expN为1时可以省略。

8. 查找
LOCATE [范围] [FOR 条件]
功能:在数据表的指定范围中搜索满足条件的第一个记录。

搜索成功,记录指针指向该记录,并将FOUND()置为.T.;否则,记录指针指数据表末尾,并将FOUND()置为.F.。

<范围>缺省为ALL。

CONTINUE
功能:查找下一个满足LOCATE命令指定条件的记录,查找成功,将FOUND()置为.T.并将指针指向满足条件的记录;否则,记录指针指数据表末尾,将FOUND()置为.F.。

9. 数据表复制
COPY TO <文件名> [范围] [FIELDS <字段名表>] [FOR 条件]
功能:把已打开的表内容复制到新的表中。

<范围>缺省值为ALL。

<字段名表>规定了新
表字段,缺省为全部字段。

COPY STRUCTURE TO <文件名> [FIELDS <字段名表>]
功能:把当前表的结构复制到新的表中。

不复制记录。

<字段名表>规定了新表字段,缺省为全部字段。

10. 统计
COUNT [范围] [FOR 条件] TO <内存变量>
功能:统计表中满足条件的记录个数,并存入指定的内存变量。

<范围>缺省时为ALL
SUM [表达式表] [范围] [FOR 条件] TO <内存变量表>
功能:统计表中全部的或指定数值字段的值的和,并各个和存入指定的内存变量,内存就是的个数求和的数值表达式个数相同。

<范围>缺省时为ALL
A VERAGE [表达式表] [范围] [FOR 条件] TO <内存变量表>
功能:统计表中全部的或指定数值字段的值的平均,并各个和存入指定的内存变量,内存就是的个数求和的数值表达式个数相同。

<范围>缺省时为ALL
二、函数
1. 数学函数
ABS(expN)
功能:求数值表达式的绝对值。

INT(expN)
功能:对数值表达式expN取整数部分
ROUND(expN, Dec)
功能:对数值表达式expN精确到小数点后Dec位。

2. 字符函数
SUBSTR(expC, expN1, expN2)
功能:取字符串expC中从expN1开始的expN2个字符,若expN2省略,则从expN1开始一直取到最后。

TRIM(expC)
功能:取掉字符串expC的尾部空格。

ALLTRIM(expC)
功能:取掉字符串expC首尾的空格。

SPACE(expN)
功能:产生expN个空格。

UPPER(expC)
功能:将字符串expC转换成大写。

LOWER(expC)
功能:将字符串expC转换成大写。

expC1 $ expC2
功能:判断字符串expC1是否在expC2中出现,若出现则值为.T.,否则为.F.。

3. 日期函数
DATE()
功能:获取系统日期。

4. 类型转换
V AL(expC)
功能:将数字字符值转换成数值,如:V AL('123.45')的值为数值123.45
S TR(expN [, 宽度 [, 小数位数]])
功能:将数值转换成字符串,当小数位数省略时不带小数,当宽度和小数位数都省略时宽度为10不带小数。

DTOC(expD)
功能:将日期表达式expD转换成字符表达式,格式与系统日期格式一致。

DTOS(expD)
功能:将日期表达式expD转换成字符表达式,格式为YYYYMMDD,前4位为年份中间2位为月份最后2位为日。

CTOD(expC)
功能:将符合当前系统日期格式的字符串转换成日期值。

5. 测试函数
FOUND()
功能:测试当前的查找(SEEK, LOCA TE, CONTINUE)是否成功。

查找成功函值为.T.否则为.F.。

EOF()
功能:测试当前记录指针是否到了数据表的末尾。

当在末尾时函数为.T.否则为.F.。

RECNO()
功能:返回当前记录号。

相关文档
最新文档