FOX常用命令.docx
《FOX常用命令.docx》由会员分享,可在线阅读,更多相关《FOX常用命令.docx(40页珍藏版)》请在冰豆网上搜索。
FOX常用命令
FOX常用命令
说明 :
1、命令结构:
FoxPro的命令结构一般由命令动词、语句体和注释几部分构成。
如:
LIST[范围][[FIELDS字段名列表][FOR条件][WHILE条件][OFF][TOPRINT]
2、常用子句
(1)范围:
表示记录的执行范围,可以是下面几项其中之一:
ALL表示全部记录;
NEXTn表示从当前记录开始的以下n条记录;
RECORDn表示第n号记录;
REST表示从当前记录到最后一条记录。
(2)FIELDS字段名表:
用于指定操作的字段,多个字段时用逗号分隔。
(3)FOR条件:
对满足条件的记录进行操作。
(4)WHILE条件:
当遇到第一个不满足条件的记录时,停止命令执行。
3、以下命令中,大写的英文词为关键词,必须原样照写。
4、“常用子句”指以下几个可选子句:
[范围][FIELDS字段名表][FOR条件][WHILE条件]
5、命令中的“列表”,指用“,”分隔的各项。
如“字段名列表”就是将各个字段名用逗号分隔。
6、部分英文词的意义:
Databasename数据名tablename数据表名filename文件名 Viewname视图名arrayname数组名
7、如果Databasename、tablename、filename等不在当前工作路径下,在命令中还需加上它们各自的路径。
一、数据库的建立、打开、关闭和删除
1、建立数据库:
CREATEDATABASE[databasename|?
]
说明:
?
:
显示“打开”对话框
例如:
CREATEDATABASEd:
\example\people
2、从磁盘中删除数据库:
DELETE DATABASE databasename|?
说明:
只删除数据库,数据库中的表便成为自由表。
例如:
DELETEDATABASEd:
\example\people
3、打开数据库:
OPENDATABASE[EXCLUSIVE|SHARED][NOUPDATE]
说明:
EXCLUSIVE:
以独占方式打开数据库
SHARED:
以共享方式打开数据库
NOUPDATE:
以不可更新方式打开数据库
例如:
OPENDATABASEd:
\example\people
4、打开数据库设计器,让用户按交互方式编辑当前数据库):
MODIFYDATABASE [databasename|?
]
指定的数据库databasename为当前数据库。
例如:
MODIFYDATABASEd:
\example\people
5、显示有关当前数据库的信息
DISPLAYDATABASE
例如:
OPENDATABASEd:
\example\people
CLEAR
DISPLAYTABLES&&显示数据库中的表
DISPLAYDATABASE
6、关闭数据库:
CLOSEDATABASE[ALL]
说明:
关闭当前数据库和其中的表,如果带ALL子句,则关闭所有打开的数据库。
若没有当前数据库,则关闭所有工作区内所有打开的自由表、索引和格式文件,并选择工作区1。
二、数据表和表结构的编辑、修改
1、建立数据表结构
CREATETablename
CREATE?
说明:
命令执行后,在屏幕上出现一个表设计器来,用户可以设计表的结构,即字段名、字段类型,字段宽度等。
例如:
CREATEXSB1
2、打开一个表:
USEtablename|?
[IN工作区号]
说明:
能在指定的工作区打开表,但不改变当前工作区。
引用非当前工作区表的字段必须冠以别名
例如:
SELECT1
USEXSCJ&&在当前工作区打开XSCJ表
?
USED(‘XSCJ’)&&测试一个表是否正在使用
USEXSDAIN2&&指定XSDA表指定到2号工作区中打开
?
B->姓名&&显示2号工作区当前记录的姓名字段的值
?
XSDA.性别&&显示2号工作区XSDA表当前记录的性别字段的值
SELECT2
LIST
3、关闭表
USE关闭当前工作区的表
CLOSETABLESALL关闭数据库表和自由表,数据库仍处于打开状态
CLOSETABLES关闭自由表
CLOSEALL关闭所有已打开的数据库、表和索引,并选择工作区1
例如:
USEXSDA
LIST
USE
4、数据表结构的查看
DISPLAYSTRUCTURE[TOPRINT]|[TOfilename]
LISTSTRUCTURE[TOPRINT]|[TOfilename]
说明:
TOPRINT:
将DISPLAYSTRUCTURE的结果输出到打印机
TOfilename:
将DISPLAYSTRUCTURE的结果定向输出到filename指定的文件中。
例如:
USEXSDA
LISTSTRUCTURE
DISPLAYSTRUCTURETOd:
\example\xsdastr
USE
5、数据表结构的修改(P87)
MODIFYSTRUCTURE
说明:
打开表设计器,用户对表结构进行交互式的修改、删除、插入、增加字段等操作。
例如:
USEXSDA&&在修改一个表之前先使用该表
MODIFYSTRUCTURE
6、打开记录浏览窗口(可在其中编辑数据表):
BROWSE(详细格式见P.82)
例如:
USEXSDA
BROWSE
7、打开并修改数据表中的字段:
(1)CHANGE[范围][FIELDS字段名列表][FOR条件1][WHILE条件2]
(2)EDIT[范围][FIELDS字段名列表][FOR条件1][WHILE条件2]
说明:
打开表记录浏览窗体,将光标定位到指定范围的记录上,用户对记录进行交互式的修改。
默认修改范围是当前记录及其后的记录。
例如:
USEXSDA
EDITallFOR入学总分>550FIELDS学号,姓名,出生日期,入学总分
USE
USEGZ
GO3
CHANGERESTFIELDS姓名,技能工资,岗位工资,补贴,扣款FOR‘100’$工号
USE
8、数据库表改名:
RENAMETABLEtablename1TOtablename2
说明:
只对数据库表起作用,对自由表不起作用。
数据表tablename1必须存在且未打开。
例如:
RENAMETABLExscjTOcj
9、选择工作区
SELECT<工作区号>|<别名>
说明:
在VFP中一个工作区只能打开一个表,前10个工作区的别名为A到J。
刚刚进入系统时,系统默认1号工作区为当前工作区。
其中的<别名>可以是工作区的别名,也可以是工作区打开表的别名,如没有给表定义别名,则可以用数据表名作为别名。
例如:
?
SELECT()&&返回当前工作区号
SELECT1&&第一种形式,以区号选择工作区
USEXSDAALIAAA
LIST
SELECTC&&第二种形式,以区号别名选择工作区
USEXSCJ
LISTSTRUCTURE
SELECT0&&第三种形式,选定当前尚未使用的最小号工作区为当前工作区。
?
SELECT()&&返回值为2
USEGZ
SELECTAA&&第四种形式,以工作区打开表的别名选择工作区
LIST
SELECTXSCJ&&第五种形式,以工作区打开的表名选择工作区
LISTSTRUCTURE
10、将当前表与另一表之间建立关联:
SETRELATIONTO[表达式1INTO工作区号1|表别名1];[,表达式2INTO工作区号2|表别名2][,…]
说明:
(1)以当前表为父表与其它一个或者多个子表建立关联.
(2)<表达式1>在父表和子表之间建立关系的表达式;为父表的字段表达式,子表按其关键字建立索引,<别名>表示子表或其所在的工作区。
(3)ADDITIVE保证在建立关联时不取消以前的关联。
注意:
两个表建立关联必需确定两个问题:
(1)关键字:
类型,宽度应相同,字段名可以不同的字段。
(2)父表:
•需要修改数据的表为父表
•按某个字段查询时,该字段所在的表为父表
•在多对一关系时,关键字表达式有重复记录的表为父表
例如:
SELECT1
USEXSDA
INDEXON学号TOXSDAIN&&子表必须以关键字段建立索引
SELECT2
USEXSCJ
SETRELATIONTO学号INTOB&&在主表的工作区建立关联
11、在当前表与另一表之间建立一对多关联:
SETSKIPTO表别名1[,表别名2]
功能:
用该命令说明关联性质为一对多关系。
即在父表的每条记录与子表中所有对应记录之间建立“一对多”的关联。
例如:
以练习册P43页(13)题为例。
*PROG201.PRG
CLEAR
SELE1
USE学费&&选一为子表。
INDEXON姓名TOZDIN
SELE2
USE住宿费 &&选多为主表,此时要浏览子表中的每条记录,必须用SETSKIPTO语句
SETRELATIONTO姓名INTO1
SETSKIPTO1&&对比使用这条语句与不使用这条语句的区别
SCANALL
?
姓名,A.学习班名称
ENDSCAN
CLOSETABLES
12、消除当前表与另一表之间的关联:
SETRELATIONOFFINTO工作区号|表别名
SETRELATIONTO
13、将当前数据表与另一数据表连接后建立一个新表:
(物理连接)
JOINWITH工作区号|表别名TOtablenameFOR条件[FIELDS字段名表]
说明:
连接当前工作区中打开的表和<工作区>/<别名>指定的表,生成<表文件名>规定的新的表文件。
例如:
*PROG202.PRG
SELECT2
USEXSCJALIASCJ
INDEXON学号TOXHSY
SELECT1
USEXSDA
JOINWITHCJTOXSBFOR性别='女'FIELDS学号,姓名,CJ.课程号,CJ.考试成绩
USEXSB
LIST
CLOSETABLES
三、数据表中数据操作(显示、查询、插入、删除和修改等)
1、显示数据表
LIST[范围][FIELDS字段名表][FOR条件1][WHERE条件2][OFF][TOPRINT]|[TO文件名]
DISPLAY[范围][FIELDS字段名表][FOR条件1][WHERE条件2][OFF][TOPRINT]|[TO文件名]
说明:
(1)显示输出当前数据表中的记录数据。
(2)OFF:
选择此项时,不显示记录号.
(3)[TOPRINT]|[TO文件名]:
将显示结果输出到打印机或指定文件中
区别:
(1)LIST---连续滚屏显示全部记录,DISPLAY----分屏显示当前记录
(2)不加FOR条件时,LIST显示完记录后,记录指针停在文件末尾,EOF()函数的返回值为.T.,DISPLAY只显示当前记录,记录指针不移动
(3)若加FOR条件,运行LIST和DISPLAY命令后,记录指针都在文件末尾.
例如:
USEXSDA&&刚刚打开表时,记录指针停在第一条
DISPLAY&&显示第一条记录
LIST&&显示所有记录
DISPLAYALL&&范围子句的使用
GO2
DISPLAYNEXT2
DISPLAYREST
DISPLAYRECORED3&&显示第3条记录
DISPLAYRESTFOR性别=’男’&&条件子句的使用
DISPLAYFORRECNO()=5&&显示第5条记录
2、更改数据表中的记录:
REPLACE[范围]字段1 WITH 表达式1[ADDITIVE];[,< [,<字段2>WITH<表达式2>[ADDITIVE],…]; [FOR条件1][WHILE条件2]
说明:
(1)在满足条件的记录中,对有规律变化的字段数据进行快速,准确,成批地替换修改.其中的ADDITIVE子句适用于备注字段,表示将表达式的值加在字段的末尾。
(2)该命令不进入全屏幕编辑状态,系统也不显示反馈信息
(3)缺省[范围],[FOR/WHILE条件]子句时,只对当前记录进行修改.
(4)对应字段和表达式的数据类型必须一致.
例如:
USEXSDA
REPLACEALL入学总分WITH入学总分+10
USEGZ
LIST
REPLACE技能工资WITH技能工资*1.2,岗位工资WITH岗位工资*1.3;
FOR补贴<165
DISPLAYALL
USEXSDA
GO3
REPLACE民族WITH‘白’,性别WITH‘女’&&修改第三条记录
3、用内存数组的值更新数据表中的记录:
REPLACEFROMARRAY数组名[FIELDS字段名列表]
例如:
*PROG301.PRG
DIMENA(10)
SELE1
USEGZ
SCATTERTOA
COPYSTRUTOGZ2
SELE2
USEGZ2
INSERTBLANK
REPLACEFROMARRAYA
LIST
CLOSETABLES
4、用一个表中的数据更新当前指定工作区中打开的表:
UPDATEONfieldnameFROMfilenameREPLACEfieldname1WITHexpr1[,fieldname2WITHexpr2[,...]]
说明:
从指定的文件中的当前记录来更新当前表的当前记录,并对指定字段的值进行修改。
例如:
SELE1
USEGZ
COPYSTRUTOGZ2
SELE2
USEGZ2
UPDATEON工号FROMGZREPLACEGZ2.工号WITH'1011'
5、给记录加删除标记:
DELETE[范围][FOR条件][WHILE条件][IN工作区号|表别名]
说明:
(1)对当前数据表在范围内满足条件的记录加上删除标记’*’.
(2)缺省[范围],[FOR/WHILE条件]子句时,只对当前记录进行删除.
例如:
DELETEFOR入学总分>550
DELERECORD3
GO2
DELE
DELERESTFOR性别=’男’
DELEFORRECNO()=5
6、永久删除加了删除标记的记录:
PACK
7、去掉删除标记(恢复)
RECALL[常用子句]
例如:
RECALLFOR入学总分>550
8、删除一个表中所有记录(保留表的结构):
ZAP [INtablename|alias]
9、为数据表文件追加记录:
APPEND[BLANK][IN工作区号|别名]
例如:
USEXSDA
APPEND&&在数据表的末尾追加一条记录,并在弹出记录窗体,进行交互式输入
APPENDBLANK&&在数据表的末尾追加一条记录,不弹出记录窗体.
10、从另一个文件中提取数据添加到当前数据表的尾部:
APPENDFROMfilename|?
[FIELDS字段名列表][FOR条件]
说明:
其中filename所指定的文件可以是数据表、EXCEL电子表格、文本文件等,如果不是数据表,需要其它子句指定格式(详见手册)。
例如:
USEXSXX
APPENDFROMXSDAFOR“2000”$学号
USEXSXX1
APPENDFROMXSDAFIELDS学号,姓名,性别,出生年月,民族,籍贯
11、用内存数组的值添加到当前数据表的尾部:
APPENDFROMARRAYarrayname[FOR条件][FIELDS字段名列表]
数据中的一行对应一个新记录,一列对应一个字段。
12、插入新记录(在当前记录之前或后插入):
INSERT[BLANK][BEFORE]
说明:
如不省略BLANK,则插入一个空白记录,且不显示输入窗口。
Insert---------在当前记录后插入,弹出记录窗体,进行交互式输入.
Insertbefore-----在当前记录前插入,弹出记录窗体
Insertblank------在当前记录后插入空白记录,不弹出记录窗体
13、清除当前记录中字段的数据:
BLANK[常用子句]
14、采用命令“Go”命令可以移动指针------绝对移动
GO[TO][[RECORD]<数值表达式>]|TOP|BOTTOM
例如:
USEXSDA
GOTO1&&文件的物理首记录
GO2
GORECORD2
GOTOP&&文件的逻辑首记录
GOBOTTOM&&文件的逻辑尾记录
GOTORECCOUNT()/2&&对RECCOUNT()/2取整
15、采用命令“SKIP”命令可以移动指针------相对移动
SKIP[n][IN工作区号|表别名]
例如:
SELE1
USEXSDA
GO4
SELE2
USEXSCJ
SKIP2
DISPLAY&&显示XSCJ表第2条记录
SKIP-1INA&&将XSDA表的记录指针向上移动一条
SELE1
DISPLAY&&显示XSDA表的第3条记录
16、设置过滤器
SETFILTERTO[<逻辑表达式>]
说明:
过滤记录,设置了过滤器后,对该表的操作只对通过过滤器的当前记录起作用。
例如:
USEXSDA
SETFILTERTO性别=“男”
LIST
SETFILTERTO入学总分>550
DELETALL&&删除通过过滤器的所有记录
SETFILTERTO
LIST
17、关闭过滤器:
SETFILTERTO
四、文件管理(文件和文件夹的复制、创建和删除)
1、从当前表复制出表或其它类型的文件(表须打开)
COPY TO filename[FIELDS字段名列表][常用子句][其它子句]
说明:
如果没有指定类型,则复制一个与当前的表相同的数据表。
例如:
USEXSDA
COPYXSBFOR籍贯=’重庆’FIELDS学号,姓名,籍贯,入学总分
USEXSB
LIST
2、复制表的结构
COPYSTRUCTURETOfilename[FIELDS字段名列表]
例如:
USEXSDA
COPYSTRUTOSTUDENTFIEL学号,姓名,籍贯,入学总分
USESTUDENT
LISTSTRU
3、复制任何文件:
COPYFILE源文件TO目的文件
如果用此命令复制表,表须关闭
说明:
(1)文件名必须是全称;
(2)源文件必须没有打开;
(3)在复制带有备注文件及索引文件的表文件时,必须再复制备注文件或索引文件后,才可使用。
例如:
(1)copyfiled:
\example.txttoe:
\exa.txt
(2)COPYFILEXSDA.DBFTOXSB.DBF&&复制文件内容
COPYFILEXSDA.FPTTOXSB.FPT&&复制备注文件
COPYFILEXSDA.IDXTOXSB.IDX&&复制索引文件
USEXSB&&使用XSB文件
4、从磁盘上删除任意文件:
(1)ERASEfilename|?
(2)DELETEFILE[filename|?
]
例如:
DELETEFILEd:
\example\xsb.*
5、任意文件改名(或文件移动到另一文件夹):
RENAMEfilename1TOfilename2
说明:
其中filename1和filename2都可以包含路径。
如二者不在同一文件夹,则将filename1移动到filename2所在的文件夹。
例如:
RENAMEd:
\example\xsb.dbfTOd:
\examplexsqkb.dbf
6、显示一个文件夹中的文件信息:
DIR|DIRECTORY [ONdrive]
例如:
DIR*.DBF
DIR*.PRG
DIRXSDA
DIR*.*
DIRd:
\*.*
7、在磁盘上建立一个文件夹:
MD|MKDIR文件夹名
例如:
MDD:
\Example\aa
8、从磁盘上删除一个文件夹
RD|REDIR文件夹名
例如:
RDD:
\EXAMPLE\AA
五、数据的复制与传送
1、单个记录与数组间的数据传送, 当前记录→数组或内存变量:
SCATTER[FIELDS字段名列表]TO数组名
说明:
例如:
USEXSDA
DIMEA(10),B(5)
SCATTERTOA
GO3
SCATTERFIELDS学号,姓名,入学总分,出生年月TOB
2、 单个记录与数组间的数据传送,数组或内存变量→当前记录
GATHERFROM 数组名|[FILEDS字段名列表]
说明:
用数组中的第一行置换当前记录,如果数组为多行的二维数组,也只用第一行。
要保证传送的数组元素和相应字段的数据类型是一致的。
若传送的类型不匹配,将显示错误信息
例如:
USEXSDA
DIMEA(10),B(5)
SCATTERTOA
A
(1)=’1999221024’
GOBOTTOM
APPENDBLANK
GATHERFROMA
3、成批记录与数组间的数据传送
(1) 表→数组:
COPYTOARRAYarrayname[常用子句]
说明:
将当前选定表中的数据复制到数组,而且默认的处理范围是所有记录。
(1)如果是一维数组,则将第一条记录按字段依次存入数组中。
(2)如果表中有逻辑字段,则逻辑字段将不被复制。
(3)如果数组的元素比表中字段少,则忽略多余字段。
(4)如果数组的元素比表中字段多,则将不改变多余元素的值。
(5)FOR、WHILE、范围子句的含义和其他命令相同
(6)如果是二维数组,则将N条记录按字段依次存入二维数组的N行中。
例如:
DIMEA(10),B(3,11)
USEXSDA
GO2
COPYTOARRAYA&&将第1条记录复制给数组A,记录指针也移到第一条记录
COPYNEXT2TOARRAYB
(2)数组→表:
APPENDFROMARRAYarrayname
说明:
用内存数