Ⅰ 谁能列表告诉我Visual FoxPro的一些常用命令
Visual FoxPro常用命令分类表
数据库文件及记录命令
ADD TABLE 在当前数据库中添加一个自由表
APPEND 在表的末尾添加一个或多个新记录
APPEND FROM ARRAY 由数组添加记录到表中
APPEND FROM 从一个文件中读入记录,追加到当前表的尾部
APPEND GENERAL 从文件中导入OLE对象并将其放入通用字段中
APPEND MEMO 将文本文件的内容复制到备注字段中
APPEND PROCEDURES 将文本文件中的存储过程追加到当前数据库中
AVERAGE 计算数值表达式或字段的算术平均值
BLANK 清除当前记录中所有字段的数据
BROWSE 打开浏览窗口,显示当前或选定表的记录
CALCULATE 对表中的字段或包含字段的表达式进行财务和统计操作
CHANGE 显示要编辑的字段
CLOSE 关闭各种类型的文件
CLOSE MEMO 关闭一个或多个备注编辑窗口
COMPILE DATABASE 编译数据库中的存储过程
CONTINUE 继续执行先前的LOCATE命令
COPY MEMO 复制当前记录中的指定备注字段的内容到文本文件
COPY PROCEDURES 将当前数据库中’的存储过程复制到文本文件
COPY STRUCTURE 用当前选择的表结构创建一个新的空自由表
COPY STRUCTURE EXTENDED 创建新表,它的字段包含当前选定表的结构信息
COPY TO ARRAY 将当前选定表中的数据复制到数组
COPY TO 用当前选定表的内容创建新文件
COUNT 统计表中记录数目
CREATE 生成一个新的VisualFoxPro表
CREATE CONNECTION 创建一个命名连接并把它存储在当前数据库中
CREATE DATABASE 创建并打开一个数据库
CREATE TRIGGER 创建表的删除、插入或更新触发器
CREATE VIEW 从VisualFoxPro环境创建视图文件
DELETE 给要删除的记录做标记
DELETE CONNECTION 从当前数据库中删除一个命名连接
DELETE DATABASE 从磁盘上删除数据库
DELETE TRIGGER 从当前数据库的表中删除“删除”、“插入”或“更新”触发器│
DELETE VIEW 从当前数据库中删除一个SQL视图
DISPLAY 在VisualFoxPro主窗口或用户自定义窗口中显示与当前表有关的信息
DISPLAY CONNECTIONS 显示当前数据库中与命名连接有关的信息
DISPLAY DATABASE 显示有关当前数据库的信息,或当前数据库中的字段、命名连接、表或视图的信息
DISPLAY MEMORY 显示内存变量和数组的当前内容
DISPLAY PROCEDURES 显示当前数据库中存储过程的名称
DISPLAY STRUCTURE 显示一个表文件的结构
DISPLAY TABLES 显示包含在当前数据库中所有的表和表的信息
DISPLAY VIEWS 显示当前数据库中关于SQL视图的信息以及SQL视图是否基于本地或远程表的信息
DROP TABLE 把一个表从数据库中移出,并从磁盘中删除它
DROP VIEW 从当前数据库中删除指定的SQL视图
EDIT 显示要编辑的字段
FoxPro的命令结构一般由命令动词、语句体和注释几部分构成。
如:LIST [范围] [[FIELDS 字段名列表] [FOR 条件][WHILE 条件] [OFF] [TO PRINT]
常用子句
范围:表示记录的执行范围,可以是下面几项其中之一:
ALL 表示全部记录;
NEXT n 表示从当前记录开始的以下n条记录;
RECORD n 表示第n号记录;
REST 表示从当前记录到最后一条记录。
FIELDS 字段名表:用于指定操作的字段,多个字段时用逗号分隔。
FOR条件:对满足条件的记录进行操作。
WHILE 条件:当遇到第一个不满足条件的记录时,停止命令执行。
以下命令中,大写的英文词为关键词,必须原样照写。
“常用子句”指以下几个可选子句:
[范围] [FIELDS 字段名表] [FOR 条件] [WHILE 条件]
命令中的“列表”,指用“,”分隔的各项。如“字段名列表”就是将各个字段名用逗号分隔。
部分英文词的意义:Databasename 数据名 tablename 数据表名 filename 文件名 Viewname 视图名 arrayname 数组名
提示:加下划线的为本课程要求掌握的命令。
一、数据库的建立、打开、关闭和删除
建立数据库:
CREATE DATABASE [databasename|?]
从磁盘中删除数据库:
DELETE DATABASE databasename|?
打开数据库:
OPEN DATABASE [EXCLUSIVE|SHARED][NOUPDATE]
打开数据库设计器(允许用户按交互方式编辑当前数据库):
MODIFY DATABASE [databasename|?]
指定的数据库databasename为当前数据库。
指定当前的数据库:
SET 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, ...])]VALUES (eExpression1 [, eExpression2, ...])
或
INSERT INTO tablename FROM ARRAY ArrayName | FROM MEMVAR
如带有FROM MEMVAR子句,则用同名的内存变量给字段赋值。
清除当前记录中字段的数据:
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] | MEMVAR [BLANK]
其中[BLANK]表示建立一个空元素的数组。如果用MEMVAR子句,则表示将各字段的值复制到同名同类型的内存变量。
如果包含MEMO子句,则备注字段一起复制。
数组或内存变量 → 当前记录
GATHER FROM 数组名 | MEMVAR [FILEDS字段名列表] [MEMO]
用同名的内存变量或数组中的第一行置换当前记录,如果数组为多行的二维数组,也只用第一行。
成批记录与数组间的数据传送
表 → 数组:
COPY TO ARRAY arrayname [常用子句]
数组 → 表:
(1) APPEND FROM ARRAY arrayname [ FOR 条件][FIELDS字段名列表]
用内存数组的值加在数据表的尾部,数据中的一行对应一个新记录,一列对应一个字段。
(2) REPLACE FROM ARRAY数组名 [常用子句]
用内存数组的值更新数据表中符合条件的记录。
查询结果 → 数组:
SELECT …… 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][DESCENDING]
删除索引
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 数组名]
求平均值:
AVERAGE [表达式列表];
[范围] [FOR 条件] [WHILE 条件][TO内存变量名|TO ARRAY 数组名]
对当前表中数值型字段进行分组求和:
TOTAL TO tablename ON 字段名[常用子句]
其中tablename为存放结果的表文件名,字段名为确定求和分组的字段。
计算:
CALCULATE 表达式列表;
[范围] [FOR 条件] [WHILE 条件][TO内存变量名|TO ARRAY 数组名]
其中表达式列表可以是如下函数的任意组合:
AVG(nExpr), CNT(), MAX(eExpr), MIN(eExpr), NPV(nExpr1, nExpr2,…),
STD(nExpr),SUM(nExpr),VAR(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) [,…]]
定义私有变量
PRIVATE变量名列表
PRIVATE ALL[LIKE | EXCEPT 通配符]
定义局部变量
LOCAL 变量名列表
LOCAL [ARRAY] 数组名1(行1,列1)[, 数组名2(行2,列2) [,…]]
显示各种信息:
LIST … (格式见有关手册)
DISPLAY … (格式见有关手册)
输出提示信息:
WAIT [<提示信息>] [TO <内存变量>];
[WINDOW[AT[<行>,< 列>] [NOWAIT]];
[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 VALUE | REFERENCE
如设置为TO VALUE,表示按值传递。
执行一个外部命令或程序:
RUN 命令或程序
在指定的位置显示或打印:
@行,列 SAY …
在指定的位置显示表达式的值,并等待用户输入,将输入值赋给一变量:
@行,列 SAY 表达式 GET 变量名 [DEFAULT 表达式]
READ
例:
@2,2 say "请输入金额: " get nMoney default 50
Read
此例先在第2行、第2列显示"请输入金额: ",等待用户输入一个数值,将用户输入值赋给变量nMoney,如果用户不输入数值(直接按回车),则将50赋给nMoney。请注意在下一行不能漏掉“Read”。
Ⅱ VF中如何建立索引,用命令。从建表到用命令建立索引
建表命令:CREAT 表名建立索引步骤及命令:USE 要建立索引的表名INDEX ON 索引关键字 TO 索引文件名索引关键字:是表中的一个字段,也就是你要以哪个字段为关键字进行索引索引文件名:建立的索引文件的文件名,可以和表的文件名相同,也可以不同。
Ⅲ 请总结一下表的排序和表索引有什么不同
建索引是在系统中建立一个索引表,在查找记录的时候可以通过这个表迅速找到。
排序是将表在系统中按一个键值的进行的,改变了记录的物理顺序。
Ⅳ VF中索引和排序的区别是什么
排序是将文件按排序后的格式重新写回磁盘,而索引并不改变文件中记录的物理顺序,只是用一个索引文件通过其它一些方法使文件中记录在内存中有序。
从这一点来说,索引比排序快。
Ⅳ 索引排序vb算法原理
快速从一个大数据集中找出某个字段等于确定值的记录。
vb内部排序7大算法:1、冒泡排序2、直接选择排序(StraightSelectSort)(BubbleSort)3、直接插入排序(StraightInsertionSort)4、希尔排序(ShellSort)5、快速排序(QuickSort)6、归并排序(MergeSort)7、堆排序(HeapSort)。
索引是一种利用某种规则的数据结构与实际数据的关系加快数据查找的功能;索引数据节点中有着实际文件的位置,因为索引是根据特定的规则和算法构建的,在查找的时候遵循索引的规则可以快速查找到对应数据的节点,从而达到快速查找数据的效果;其实宏观来说索引其实是一种概念而不是具体的某项技术,只是我们在某个技术中运用得比较广泛和鲜明(比如说数据库)渐渐的有了特定领域的标签,其实在生活中索引的使用无处不在,比如说:书本里的目录;读书时的座位号,考试编号都有类似索引的功能。
Ⅵ sort命令排序与索引文件排序的区别在哪里(考虑优缺点)
少儿的命令排序和索引文件排序的区别,可以从他们的六七点考虑
Ⅶ Visual Foxpro 5.0怎样建立索引及排序
创建一个索引文件,利用该文件可以按某种逻辑顺序显示和访问表记录。
INDEX ON eExpression TO IDXFileName | TAG TagName
[ COLLATE cCollateSequence ] [OF CDXFileName] [FOR lExpression]
[COMPACT] [ASCENDING | DESCENDING] [UNIQUE | CANDIDATE] [ADDITIVE]
参数
eExpression
指定一个索引表达式,该表达式中可以包含当前表中的字段名。在索引文件中,按索引表达式给每一个表记录都创建一个索引关键字,Visual FoxPro 使用这些关键字来显示和访问表中的记录。
注意 不要使用变量, 数组元素, 或另一个工作区中的字段或字段表达式作为 eExpression。如果你访问一个包含变量或不再存在或不能找到的字段的索引, Visual FoxPro 产生一条错误信息。
备注字段不能单独用于索引文件的表达式; 它们必须与其它字符表达式组合使用。如果你包含前缀是表别名或工作区的字段到索引表达式中, Visual FoxPro 产生一条错误信息。
虽然在包含别名字段的情况下,可以用 Rushmore 技术优化 FOR 子句,但在创建索引时最好避免使用别名字段。在有些情况下(USE ... AGAIN、SQL 查询等等),Visual FoxPro 会自动给表指定一个不同的别名,这时可能不能正确更新或使用索引。有关 Rushmore 技术的详细内容,请参阅 用 Rushmore 查询优化数据访问速度。
如果要建立一个具有可变长度关键字的索引,关键字会被空格填充。Visual FoxPro 不支持可变长度的索引关键字。
索引关键字的长度可以为 0。例如,当索引表达式是空备注字段的一个子字符串时,所创建的索引关键字长度就为 0。当 Visual FoxPro 创建索引时,它检验表中第一个记录的字段,如有一个字段为空,可能需要向第一个记录中这样的字段内填入一些临时数据,以免产生长度为 0 的索引关键字。
.idx 索引的索引关键字长度必须在 1 到 100 个字符之间。 .cdx 索引的索引关键字必须在 1 到 240 字符之间。
TO IDXFileName
创建 .IDX 索引文件。索引文件的默认扩展名为 .IDX,可以使用一个与之不同的扩展名,也可以在 Visual FoxPro 配置文件内改变索引文件的这个默认扩展名。创建索引文件时,必须遵循标准 MS-DOS 的文件命名规则。
TAG TagName [COLLATE cCollateSequence] [OF CDXFileName]
创建一个复合索引文件。复合索引文件是一种可包含任意数量的独立标识(索引项)的单个索引文件,每一个标识都由其唯一标识名确定。标识名必须以字母或下划线开头,最多可由 10 个字母、数字或下划线组成。复合索引文件中的标识数目仅受可用内存和磁盘空间的限制。
多项复合索引文件一般是压缩的。创建复合索引文件时不必包含 COMPACT 。复合索引文件的扩展名为 .CDX。
COLLATE cCollateSequence 子句指定一个非默认设置 MACHINE 的比较序列。cCollateSequence 参数必须是可用的 Visual FoxPro 比较序列。关于设置比较序列的详细信息, 参见 优化国际化应用程序 和 set collate 命令。
可创建的复合索引文件有两种类型:结构复合索引文件的和非结构复合索引文件。
在 TAG TagName 参数中不包含可选的 OF CDXFileName 子句,便可以创建结构复合索引文件。结构复合索引文件的基本名(不含扩展名的文件名)总是与表的基本名相同,并且自动与表同时打开。
如果一个表的复合索引文件不能被定位、已被删除,或者已被重命名,则在打开该表时会显示一个对话框。这时如果在对话框中选择默认的“取消”按钮,则不打开表;如选择“忽略”按钮,则打开该表,并且删除表头中的标记。表头表明该表与结构复合索引文件相关联。
提示 如果一个结构复合索引已经与它的表脱离关系,则用下面的命令可以使它重新和表相关联:
USE TableName INDEX CDXFileName
在 TAG TagName 参数之后包含 OF CDXFileName,便可以创建非结构复合索引文件。与结构复合索引不同的是,必须明确使用 SET index 命令或 USE 命令中的 INDEX 子句打开非结构复合索引文件。
如果一个复合索引文件已经创建并打开, 发出 INDEX 带 TAG TagName 添加一个标识到复合索引文件中。
CDXFileName 的名字与结构复合索引是非关联的。确信在表被修改后重新索引它 如果是非关联的结构复合索引。
FOR lExpression
指定一个条件,只显示或访问满足这个条件表达式 lExpression 的记录,索引文件只为那些满足条件表达式的记录创建索引关键字。
如果 lExpression 是一个可优化表达式,Rushmore 将优化 INDEX ... FOR lExpression 命令。
详细信息, 参见SET OPTIMIZE 和 用 Rushmore 查询优化数据访问速度。
COMPACT
创建一个压缩的 .IDX 文件。
ASCENDING
指定 .CDX 文件为升序。在默认情况下,按升序创建 .CDX 标识(包含 ASCENDING 参数可以将索引文件的排序方式明确指示出来)。同样,包含 DESCENDING 可按降序索引一个表。
DESCENDING
指定 .CDX 文件为降序。在创建 .IDX 文件时不能包含 DESCENDING 参数,但可以用 SET INDEX 或 SET ORDER 命令将 .IDX 索引文件指定为降序。
UNIQUE
对于一个索引关键字值,只有第一个满足该值的记录包含在 .IDX 文件或 .CDX 标识中。利用 UNIQUE 子句可以避免显示或访问记录的重复值。所有添加到表中的记录,如果与表中原有记录有重复的索引关键字值,则不包含在索引文件之内。使用 index 命令的 UNIQUE 选项,与在执行 INDEX 或 REindex 命令之前执行 SET UNIQUE ON 命令完全等效。
在 UNIQUE 索引或索引标识处于激活状态时,如果更改了一个有重复索引关键字值的记录,则同时需要更新索引或索引标识。但在重新用 REindex 命令重索引该文件之前,仍然不能访问下一个有相同索引关键字值的记录。
CANDIDATE
创建候选结构索引标识。只有在创建结构索引标识时才能包含关键字 CANDIDATE;否则,Visual FoxPro 会产生错误信息。
使用候选索引标识可以避免索引表达式 eExpression 指定的字段或字段组合有重复值。Candidate(候选)一词是指索引类型;因为候选索引中不同的记录没有重复值,所以它们可以作为主索引的“候选”索引。
如果一个字段或字段组合已包含重复值,那么为它创建候选索引标识时,Visual FoxPro 会产生错误信息。
有关候选索引标识和主索引标识的详细内容,请参阅 设置主索引或候选索引。
ADDITIVE
所有先前已打开的索引文件保持打开状态。如省略 ADDITIVE 子句,则在用 index 命令创建索引文件或表时,关闭所有先前已打开的索引文件(结构复合索引文件除外)。
备注
在具有索引文件的表中,可以按索引表达式所规定的顺序显示或访问记录,但并不按索引文件更改表的物理存储顺序。
如果 SET TALK 设置成 ON,则在索引过程中,Visual FoxPro 会报告已建立索引的记录数目。索引过程中显示记录的计数器间隔可由 SET ODOMETER 指定。
使用 DISPLAY STATUS 命令可以显示打开的索引文件的许多内容,其中包括所有打开的索引文件的文件名、类型(结构、非结构的 .CDX、.IDX)、索引表达式、排序序列以及主控索引文件名或主控标识名。
可以打开的索引文件(.CDX 或 .IDX)数目只受内存或系统资源的限制。在 Visual FoxPro、FoxPro for Windows 和 FoxPro for MS-DOS 中,能打开的文件总数目由 MS-DOS 的配置文件 CONFIG.SYS 中的 FILES 设置决定。有关 FILES 设置的详细内容,请参阅 MS-DOS 手册。
索引类型 Visual FoxPro 允许创建两种类型的索引文件:
包含多个索引标识项(索引名)的 .CDX 复合索引文件
包含一个索引项的 .IDX 单项索引文件
也可以创建结构复合索引文件,这种索引文件在打开表时自动打开。
提示 因为结构复合索引文件随表的打开而自动打开,所以这种类型比较常用。
包含 COMPACT 子句可创建压缩的 .IDX 索引文件,复合索引文件总是压缩的。
索引的顺序与更新 表的显示或访问顺序只由一个索引文件(主控索引文件)或标识(主控标识)控件。有一些命令(如 SEEK 命令)使用主控索引文件或标识搜索记录,但是在修改表时,所有已打开的 .IDX 和 .CDX 索引文件都将被更新。使用 USE 命令的 INDEX 子句或 SET INDEX 和 SET ORDER 命令可以指定主控索引文件或标识。
注意 替换关键字段修改当前记录在索引中的相对位置。因此你在执行 REPACE ALL 或 SCAN...ENDSCAN 修改一个范围的索引时应该小心。这也适用于在使用了 FOR 子句创建的索引上的 REPLACE 操作。
用户定义函数 索引表达式中虽然可以包含用户自定义函数,但最好不要这样做,因为索引表达式中使用用户自定义函数会增加创建或更新索引所需的时间。另外,如果索引表达式中使用了用户自定义函数,有可能不更新这个索引。
如果索引表达式中使用了用户自定义函数,则应该保证 Visual FoxPro 能够找到这个函数。当 Visual FoxPro 创建索引时,索引表达式存储在索引文件中,但用户自定义函数并不存储在索引文件中,索引文件中只保存指向用户自定义函数的引用。
示例
在例 1 中,打开 customer 表,并创建一个名为 complist 的索引文件,该索引文件按 company 字段的字母顺序显示和处理记录。
在例 2 中,再一次打开 customer 表,并创建名为 citycomp 的索引文件,其索引表达式由 city 字段的前 5 个字母和 company 字段的前 6 个字母组成。在使用该文件时,表记录先根据 city 字段排列顺序,然后才按 company 字段排序。
在例 3 中,创建了一些索引标识:第一个是 address1 的结构复合索引标识,第二个是在名为 custcdx 的非结构索引文件中创建的,最后一个也是在非结构索引文件 custcdx 中创建的,但按照递减顺序。
* 示例 1
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'Data\testdata')
USE Customer && 打开 customer 表
INDEX ON company TO complist
CLEAR
DISPLAY STATUS
* 示例 2
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'Data\testdata')
USE Customer && 打开 customer 表
INDEX ON SUBSTR(city,1,5) + SUBSTR(company,1,6) TO citycomp
CLEAR
DISPLAY STATUS
* 示例 3
CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'Data\testdata')
USE Customer && 打开 customer 表
INDEX ON address TAG address
INDEX ON company TAG company OF custcdx
CLEAR
DISPLAY STATUS
Ⅷ 数据库VF中排序与索引相比各有什么优缺点
一般使用索引,索引可以建立多个,想用哪个用哪个,特别是当数据特别多、特别大的情况下,排序一次需要很多时间,而索引就非常快速。
补充:
可以这样说,现在的数据库都没有排序的的概念,排序是早期FOXBASE的产品,你不要去学习什么排序,除非你想考古。
一、排序(物理排序)
通常记录是按输入的顺序(物理顺序)存放在数据表中的,排序是指表的所有记录按指定字段的值的大小顺序进行重新排列到新的数据表文件中。
二、索引(逻辑排序)
与排序相比,索引是一种逻辑排序方法,它不改变记录在物理上的排列顺序,而是建立一个与原文件相对应的索引文件,索引文件中存储了一组记录指针,它指向原文件的记录。
Ⅸ vfp中排序命令和索引命令的区别
排序:对表进行物理性的排序,记录位置发生变化。
索引:对表进行索引,建立索引文件,不改变记录位置。
Ⅹ VF索引排序命令 求
1 .
index on 10000-入学成绩 to sy1
go top
list next 5
2.
index on dtoc(出生日期,1) to sy2 for year(出生日期)>=1983 tag sy3
(这题答案是按出生日期升序排列的。按出生日期降序我不会)
3.
index on 籍贯 tag sy3 unique
4.
index on 性别+str(10000-入学成绩)+dtoc(出生日期,1) tag sy4
5.
index on 性别+学号 tag abc of sy5 &&生成sy5.cdx非结构复合索引文件