第 2章 表的基本操作
2.1 表的建立与修改设备表编号 名称 启用日期 价格 部门 主要设备 备注 商标
016-1 车床 03/05/90 62044.61 21,T,Memo gen
016-2 车床 01/15/92 27132.73 21,T,memo gen
037-2 磨床 07/21/90 241292.12 22,T,memo gen
038-1 钻床 10/12/89 5275.00 23,F,Memo gen
100-1 微机 08/12/97 8810.00 12,T,memo Gen
101-1 复印机 06/01/92 10305.01 12,F,memo gen
210-1 轿车 05/08/95 151000.00 11,F,memo Gen
有关命令
创建设备表 create sb
打开设备表 Use sb
浏览、修改记录 browse
修改结构 Modify structure
关闭当前表 use
设备表的结构
Browse命令的 浏览窗口
,SB.商标,通用型字段窗口
2.2 表达式常量数值型常量 例如 10,-100,2.81828,
字符型常量 例如 "微机 ",'PC机 ',"3.14159"
日期型和日期时间型常量 例如 {06/30/1999},{9/15/99 8:45},
{^2001/08/30}
设置通常的日期格式,命令 SET STRICTDATE TO 0,
设置严格的日期格式,命令 SET STRICTDATE TO 1
逻辑型常量 真和假两种值,.T.,F,
变量内存变量
s='VFP'
STORE 2*4 TO n1,n2,n3
'S=',s && 显示 S= VFP
DIMENSION x(3),a(2,3) &&定义数组
a(1,3) =5 &&数组元素赋值字段变量
USE sb
名称 && SB.DBF打开后记录指针指向第 1个记录,显示车床
GO 5 && 将记录指针指向第 5个记录 (GO命令参阅 2.3.1节 )
名称系统变量表 2.6 VFP算术、关系、逻辑运算符运算 优先级 运 算 符 意 义 运算举例 (注解表示显示结果 )
算术 8 ( ) 圆括号
7 ^ 或 ** 乘方?3^2 &&9
6 × 乘
/ 除
% 取模:取两数相除的余数?15%4 &&3
5 + 加
- 减关系 4 < 小于?63<54 &&.F.
<= 小于等于?{01/01/92}<={01/01/92} &.T.
> 大于?"ABC">"AAAA" &&.T.
>= 大于等于?"大专 ">="大学 " &&.T.
= 相等:串比较时串首同就得真?"ABC"="AB" &&.T.
= = 完全相等:两串全同才得真?"ABC"=="AB,&&.F.
<>,#或 != 不相等?.T.<>.F,&&.T.
$ 包含:左串是右串子串才得真?"BC"$"ABCD" &&.T.
逻辑 3 NOT 或 ! 非:结果是右边逻辑值的反?NOT"BC"$"ABCD" &&.F.
2 AND 与:两边都真才得真?.T.AND"ABC">"AB" &&.F.
1 OR 或:两边有一为真就得真?.T.OR4=5 &&.T.
表 2.8 字符处理函数函 数 功 能 例子 (注解表示结果 )
SUBSTR(<字符表达式 >,<数值表达式 1>[,<数值表达式 2>])
返回 <字符表达式 >中第 <数值表达式 1>
位起的长度为 <数值表达式 2>的子串
SUBSTR("ABCD",2,2)&&"BC"
LEFT(<字符表达式 >,<数值表达式 >)
返回 <字符表达式 >左起 <数值表达式 >
个字符的子串
LEFT("ABCD",2) &&"AB"
RIGHT(<字符表达式 >,<数值表达式 >)
返回 <字符表达式 >右起 <数值表达式 >
个字符的子串
RIGHT("ABCD",2) &&"CD"
LEN(<字符表达式 >) 返回字符串的长度?LEN("ABCD") && 4
AT(<字符表达式 1>,<字符表达式 2>[,<数值表达式 >])
返回字符串 <字符表达式 1>在 <字符表达式 2>中第 <数值表达式 >次出现的位置
AT("BC","ABCD",1) && 2
ALLTRIM(<字符表达式 >) 删除字符串前导和末尾的空格?ALLTRIM(" ABCD ")&&"ABCD"
SPACE(<数值表达式 >) 返回 <数值表达式 >个空格?SPACE(4) &&" "
UPPER(<字符表达式 >) 将小写字母转换为大写?UPPER("aBc") &&"ABC"
LOWER(<字符表达式 >) 将大写字母转换为小写?LOWER("aBc") &&"abc"
VAL(<字符表达式 >) 将字符串转换为数值?VAL("3.14") && 3.14
STR(<数值表达式 1>[,<数值表达式 2>[,<数值表达式 3>]])
将数值 <数值表达式 1>转换为长度为 <
数值表达式 2>位,具有 <数值表达式 3>
位小数的字符串
STR(3.14,5,1) &&" 3.1"
CHR(<数值表达式 >) 从 <数值表达式 >表示的 ASCII码返回字符
CHR(65) &&"A"
ASC(<字符表达式 >) 返回字符的 ASCII码值?ASC("A") &&65
VFP命令常用子句命令格式:
LIST|DISPLAY [[FIELDS] <表达式表 >][<范围 >][FOR <条件 >][WHILE <条件 >]
[OFF][ TO PRINT [PROMPT]|TO FILE <文件 >]
范围子句,
ALL 所有记录
NEXT <N> 从当前记录起的 N个记录
RECORD <N> 第 N个记录
REST 从当前记录起到最后一个记录止的所有记录例:
USE sb
GO 2 && 记录指针指向第 2个记录
LIST NEXT 5 FOR 价格 >10000 && 显示第 2,3,6等 3个记录
LIST RECORD 5 FIELDS 编号,名称,价格
USE sb
LIST NEXT 3 && (1)
LIST 部门,编号,名称,备注 FOR 部门 ="21" && (2)
LIST 编号,名称,价格 *0.9,启用日期 FOR YEAR(启用日期 )<1995 OFF && (3)
2.3 表的维护命令复制 命令:
COPY FILE <文件名 1> TO <文件名 2>
COPY TO <文件名 > [<范围 >][FOR <条件 >][WHILE <条件 >]
[FIELDS <字段名表 >| FIELDS LIKE <通配字段名 > | FIELDS EXCEPT <通配字段名 >]
[[TYPE][SDF|XLS|DELIMITED[WITH <定界符 >|WITH BLANK|WITH TAB]]]
COPY STRUCTURE TO <文件名 > [FIELDS <字段名表 >]
例:
USE && 若 SB.DBF是打开的,则须关闭它
COPY FILE SB.DBF TO SB1.DBF && 复制得 SB1.DBF
COPY FILE SB.FPT TO SB1.FPT && 复制得 SB1.FPT
USE sb
COPY TO a1 && 对 sb.dbf原样复制,同时生成 A1.DBF与 A1.FPT
COPY TO a2 FIELDS 名称,编号 FOR LEFT(部门,1)=“2”
LIST && 显示 SB.DBF的记录数据
USE a2
LIST && 显示 A2.DBF的记录数据
USE sb
COPY TO b1 NEXT 3 SDF && 以系统数据格式复制,产生文本文件 B1.TXT
COPY STRUCTURE TO sb2 FIELDS 名称,价格,编号,备注例,USE SB && 当前记录为第 1个记录
RECNO() && 显示,1
GO BOTTOM && 记录指针指向第 7个记录,当前记录为第 7个记录
RECNO() && 显示,7
GO 4 && 当前记录为第 4个记录
SKIP -1 && 当前记录为第 3个记录命令:
INSERT [BLANK] [BEFORE]
INSERT INTO 表名 [(字段名 1 [,字段名 2,...])] VALUES(表达式 1 [,表达式,...])
APPEND [BLANK]
REPLACE <字段名 1> WITH <表达式 1> [ADDITIVE]
[,<字段名 2> WITH <表达式 2> [ADDITIVE]],..[<范围 >][FOR <条件 >][WHILE <条件 >]
例,USE sb
APPEND FROM a1 FIELDS 名称,价格 && A1.DBF中 7个记录的 2个字段值追加到 SB.DBF的末尾
APPEND FROM b1 SDF && B1.TXT是系统数据格式的文本文件
DELETE FOR NOT 主要设备 && 为所有的非主要设备记录加上删除标记
PACK && 物理上删除带有删除标记的记录
REPLACE 价格 WITH 价格 -1000,部门 WITH "11" FOR 主要设备 ;
&& 主要设备的价格都减少 1000,部门均改为 11
APPEND BLANK && 追加 1个空白记录
GO 4
SCATTER TO A MEMO && 第 4个记录 (包括备注型字段 )的数据传送给数组 A
a(1),a(2),a(4),a(7) && 显示,038-1 钻床 5275.00 1997年 12月封存
a(4)=6000
GATHER FROM a
DISPLAY && 显示第 4个记录,价格已由 5275.00改变为 6000.00
SET FILTER TO YEAR(启用日期 )>=1990 AND YEAR(启用日期 )<=1995
LIST && 只显示 1990年至 1995年的记录
SET FILTER TO && 取消过滤器
LIST && 显示全部记录关于记录建立或修改表结构的命令命令:
CREATE TABLE <表名 >
(<字段名 1> <字段类型 >[(<字段宽度 > [,<小数位数 >])][,<字段名 2>...])
ALTER TABLE <表名 >
ADD | ALTER [COLUMN] <字段名 > <字段类型 > [(<字段宽度 > [,<小数位数 >])]
ALTER TABLE <表名 > DROP [COLUMN] <字段名 1>|RENAME COLUMN <字段名 2> TO <字段名 3>
例:
CREATE TABLE dx(编号 c(5),年月 c(4),费用 n(6,1))
LIST STRUCTURE && 主屏幕显示 DX.DBF的结构
INSERT INTO dx VALUES("016-1","8911",2763.5)
INSERT INTO dx VALUES("016-1","9112",3520.0)
INSERT INTO dx VALUES("037-2","9206",6204.4)
INSERT INTO dx VALUES("038-1","8911",2850.0)
LIST OFF && 主屏幕显示所有记录主屏幕所显示 DX.DBF的记录数据如下:
编号 年月 费用
016-1 8911 2763.5
016-1 9112 3520.0
037-2 9206 6204.4
038-1 8911 2850.0
ALTER TABLE dx ADD 摘要 m(4)
ALTER TABLE dx DROP 摘要
2.1 表的建立与修改设备表编号 名称 启用日期 价格 部门 主要设备 备注 商标
016-1 车床 03/05/90 62044.61 21,T,Memo gen
016-2 车床 01/15/92 27132.73 21,T,memo gen
037-2 磨床 07/21/90 241292.12 22,T,memo gen
038-1 钻床 10/12/89 5275.00 23,F,Memo gen
100-1 微机 08/12/97 8810.00 12,T,memo Gen
101-1 复印机 06/01/92 10305.01 12,F,memo gen
210-1 轿车 05/08/95 151000.00 11,F,memo Gen
有关命令
创建设备表 create sb
打开设备表 Use sb
浏览、修改记录 browse
修改结构 Modify structure
关闭当前表 use
设备表的结构
Browse命令的 浏览窗口
,SB.商标,通用型字段窗口
2.2 表达式常量数值型常量 例如 10,-100,2.81828,
字符型常量 例如 "微机 ",'PC机 ',"3.14159"
日期型和日期时间型常量 例如 {06/30/1999},{9/15/99 8:45},
{^2001/08/30}
设置通常的日期格式,命令 SET STRICTDATE TO 0,
设置严格的日期格式,命令 SET STRICTDATE TO 1
逻辑型常量 真和假两种值,.T.,F,
变量内存变量
s='VFP'
STORE 2*4 TO n1,n2,n3
'S=',s && 显示 S= VFP
DIMENSION x(3),a(2,3) &&定义数组
a(1,3) =5 &&数组元素赋值字段变量
USE sb
名称 && SB.DBF打开后记录指针指向第 1个记录,显示车床
GO 5 && 将记录指针指向第 5个记录 (GO命令参阅 2.3.1节 )
名称系统变量表 2.6 VFP算术、关系、逻辑运算符运算 优先级 运 算 符 意 义 运算举例 (注解表示显示结果 )
算术 8 ( ) 圆括号
7 ^ 或 ** 乘方?3^2 &&9
6 × 乘
/ 除
% 取模:取两数相除的余数?15%4 &&3
5 + 加
- 减关系 4 < 小于?63<54 &&.F.
<= 小于等于?{01/01/92}<={01/01/92} &.T.
> 大于?"ABC">"AAAA" &&.T.
>= 大于等于?"大专 ">="大学 " &&.T.
= 相等:串比较时串首同就得真?"ABC"="AB" &&.T.
= = 完全相等:两串全同才得真?"ABC"=="AB,&&.F.
<>,#或 != 不相等?.T.<>.F,&&.T.
$ 包含:左串是右串子串才得真?"BC"$"ABCD" &&.T.
逻辑 3 NOT 或 ! 非:结果是右边逻辑值的反?NOT"BC"$"ABCD" &&.F.
2 AND 与:两边都真才得真?.T.AND"ABC">"AB" &&.F.
1 OR 或:两边有一为真就得真?.T.OR4=5 &&.T.
表 2.8 字符处理函数函 数 功 能 例子 (注解表示结果 )
SUBSTR(<字符表达式 >,<数值表达式 1>[,<数值表达式 2>])
返回 <字符表达式 >中第 <数值表达式 1>
位起的长度为 <数值表达式 2>的子串
SUBSTR("ABCD",2,2)&&"BC"
LEFT(<字符表达式 >,<数值表达式 >)
返回 <字符表达式 >左起 <数值表达式 >
个字符的子串
LEFT("ABCD",2) &&"AB"
RIGHT(<字符表达式 >,<数值表达式 >)
返回 <字符表达式 >右起 <数值表达式 >
个字符的子串
RIGHT("ABCD",2) &&"CD"
LEN(<字符表达式 >) 返回字符串的长度?LEN("ABCD") && 4
AT(<字符表达式 1>,<字符表达式 2>[,<数值表达式 >])
返回字符串 <字符表达式 1>在 <字符表达式 2>中第 <数值表达式 >次出现的位置
AT("BC","ABCD",1) && 2
ALLTRIM(<字符表达式 >) 删除字符串前导和末尾的空格?ALLTRIM(" ABCD ")&&"ABCD"
SPACE(<数值表达式 >) 返回 <数值表达式 >个空格?SPACE(4) &&" "
UPPER(<字符表达式 >) 将小写字母转换为大写?UPPER("aBc") &&"ABC"
LOWER(<字符表达式 >) 将大写字母转换为小写?LOWER("aBc") &&"abc"
VAL(<字符表达式 >) 将字符串转换为数值?VAL("3.14") && 3.14
STR(<数值表达式 1>[,<数值表达式 2>[,<数值表达式 3>]])
将数值 <数值表达式 1>转换为长度为 <
数值表达式 2>位,具有 <数值表达式 3>
位小数的字符串
STR(3.14,5,1) &&" 3.1"
CHR(<数值表达式 >) 从 <数值表达式 >表示的 ASCII码返回字符
CHR(65) &&"A"
ASC(<字符表达式 >) 返回字符的 ASCII码值?ASC("A") &&65
VFP命令常用子句命令格式:
LIST|DISPLAY [[FIELDS] <表达式表 >][<范围 >][FOR <条件 >][WHILE <条件 >]
[OFF][ TO PRINT [PROMPT]|TO FILE <文件 >]
范围子句,
ALL 所有记录
NEXT <N> 从当前记录起的 N个记录
RECORD <N> 第 N个记录
REST 从当前记录起到最后一个记录止的所有记录例:
USE sb
GO 2 && 记录指针指向第 2个记录
LIST NEXT 5 FOR 价格 >10000 && 显示第 2,3,6等 3个记录
LIST RECORD 5 FIELDS 编号,名称,价格
USE sb
LIST NEXT 3 && (1)
LIST 部门,编号,名称,备注 FOR 部门 ="21" && (2)
LIST 编号,名称,价格 *0.9,启用日期 FOR YEAR(启用日期 )<1995 OFF && (3)
2.3 表的维护命令复制 命令:
COPY FILE <文件名 1> TO <文件名 2>
COPY TO <文件名 > [<范围 >][FOR <条件 >][WHILE <条件 >]
[FIELDS <字段名表 >| FIELDS LIKE <通配字段名 > | FIELDS EXCEPT <通配字段名 >]
[[TYPE][SDF|XLS|DELIMITED[WITH <定界符 >|WITH BLANK|WITH TAB]]]
COPY STRUCTURE TO <文件名 > [FIELDS <字段名表 >]
例:
USE && 若 SB.DBF是打开的,则须关闭它
COPY FILE SB.DBF TO SB1.DBF && 复制得 SB1.DBF
COPY FILE SB.FPT TO SB1.FPT && 复制得 SB1.FPT
USE sb
COPY TO a1 && 对 sb.dbf原样复制,同时生成 A1.DBF与 A1.FPT
COPY TO a2 FIELDS 名称,编号 FOR LEFT(部门,1)=“2”
LIST && 显示 SB.DBF的记录数据
USE a2
LIST && 显示 A2.DBF的记录数据
USE sb
COPY TO b1 NEXT 3 SDF && 以系统数据格式复制,产生文本文件 B1.TXT
COPY STRUCTURE TO sb2 FIELDS 名称,价格,编号,备注例,USE SB && 当前记录为第 1个记录
RECNO() && 显示,1
GO BOTTOM && 记录指针指向第 7个记录,当前记录为第 7个记录
RECNO() && 显示,7
GO 4 && 当前记录为第 4个记录
SKIP -1 && 当前记录为第 3个记录命令:
INSERT [BLANK] [BEFORE]
INSERT INTO 表名 [(字段名 1 [,字段名 2,...])] VALUES(表达式 1 [,表达式,...])
APPEND [BLANK]
REPLACE <字段名 1> WITH <表达式 1> [ADDITIVE]
[,<字段名 2> WITH <表达式 2> [ADDITIVE]],..[<范围 >][FOR <条件 >][WHILE <条件 >]
例,USE sb
APPEND FROM a1 FIELDS 名称,价格 && A1.DBF中 7个记录的 2个字段值追加到 SB.DBF的末尾
APPEND FROM b1 SDF && B1.TXT是系统数据格式的文本文件
DELETE FOR NOT 主要设备 && 为所有的非主要设备记录加上删除标记
PACK && 物理上删除带有删除标记的记录
REPLACE 价格 WITH 价格 -1000,部门 WITH "11" FOR 主要设备 ;
&& 主要设备的价格都减少 1000,部门均改为 11
APPEND BLANK && 追加 1个空白记录
GO 4
SCATTER TO A MEMO && 第 4个记录 (包括备注型字段 )的数据传送给数组 A
a(1),a(2),a(4),a(7) && 显示,038-1 钻床 5275.00 1997年 12月封存
a(4)=6000
GATHER FROM a
DISPLAY && 显示第 4个记录,价格已由 5275.00改变为 6000.00
SET FILTER TO YEAR(启用日期 )>=1990 AND YEAR(启用日期 )<=1995
LIST && 只显示 1990年至 1995年的记录
SET FILTER TO && 取消过滤器
LIST && 显示全部记录关于记录建立或修改表结构的命令命令:
CREATE TABLE <表名 >
(<字段名 1> <字段类型 >[(<字段宽度 > [,<小数位数 >])][,<字段名 2>...])
ALTER TABLE <表名 >
ADD | ALTER [COLUMN] <字段名 > <字段类型 > [(<字段宽度 > [,<小数位数 >])]
ALTER TABLE <表名 > DROP [COLUMN] <字段名 1>|RENAME COLUMN <字段名 2> TO <字段名 3>
例:
CREATE TABLE dx(编号 c(5),年月 c(4),费用 n(6,1))
LIST STRUCTURE && 主屏幕显示 DX.DBF的结构
INSERT INTO dx VALUES("016-1","8911",2763.5)
INSERT INTO dx VALUES("016-1","9112",3520.0)
INSERT INTO dx VALUES("037-2","9206",6204.4)
INSERT INTO dx VALUES("038-1","8911",2850.0)
LIST OFF && 主屏幕显示所有记录主屏幕所显示 DX.DBF的记录数据如下:
编号 年月 费用
016-1 8911 2763.5
016-1 9112 3520.0
037-2 9206 6204.4
038-1 8911 2850.0
ALTER TABLE dx ADD 摘要 m(4)
ALTER TABLE dx DROP 摘要