第 三 章
VFP的数据类型与存储类型
Visual FoxPro 6.0
§ 3.1 数据 类型数据是反映客观事物属性的记录。通常分为数值型和字符型两种基本类型。数据类型一旦被定义,就确定了其存储方式和使用方式。 Visual FoxPro系统将数据细化分为以下十三种类型。
( 1) 字符型 ( Character ) 字符型( C型)数据可以包含任何可显示的 ASCII码字符,包括字母、数字、
汉字、符号、空格等,长度范围是 0~ 254个字符,使用时必须用定界符单引号,双引号,方括号括起来。
‘’,,”,[ ]
( 2) 数值型 ( Numeric ) 数值型( N型)是由数字( 0~ 9)、
小数点和正负号组成。最大长度为 20位(包括+、-和小数点)。
( 3) 整型 ( Integer ) 整型( N型)表示整数,仅用于字段变量,数据占 4个字节。
( 4) 浮点型 ( Float ) 浮点型( N型)与数值型等价,为与其它软件的兼容而设。
( 5) 双精度型 ( Double ) 双精度型( N型)是更高精度的数值型数据,只用于字段变量,固定占用 8个字节,并采用固定长度浮点格式存储。
( 6) 货币型 ( Currency ) 货币型( Y型)用来表示货币值,
系统默认的货币符号是,$‖ 。
( 7) 日期型 ( Data ) 日期型( D型)用于表示日期,用默认格式 {mm/dd/yyyy}来表示,长度固定为 8位,yyyy表示年,占 4字节,
mm表示月,占 2字节,dd表示日,占 2字节。
( 8) 日期时间型 ( DataTime ) 日期时间型数据是描述日期和时间的数据。 其默认格式为 {mm/dd/yyyy hh:mm:ss}。
其中 yyyy代表年,前两个 mm代表月,dd代表日,hh代表小时,后两个 mm代表分钟,ss代表秒,长度固定为 8位。
( 9) 逻辑型 ( Logical )逻辑型数据( Logic)是描述客观事物真假的数据,用于表示逻辑判断结果。
逻辑型数据只有真(,T.)和假(,F.)两种值,长度固定为 1位 。
( 10) 备注型 ( Memo )备注型数据( Memo)用于存放较长的字符型数据类型。可以把它看成是字符型数据的特殊形式。
备注型字段固定占 4个字节,用来存储一个指向备注文件
(,FPT)的指针,实际数据长度仅受限于现有的磁盘空间。
( 11) 通用型 ( General ) 通用型( G型)用于存储 OLE对象,
可以是电子表格、文档、图片等。仅适用于表中的字段,固定占 4
个字节,实际数据长度仅受限于现有的磁盘空间。
( 12) 字符型 (二进制) 与字符类相似,但若代码页(不同语系代码)改变时,其值并不会随之改变,即 VFP不会自动转换成相应国家的语系。
( 13) 备注型 (二进制) 与字符型(二进制)一样,当代码页改变时,其值不会随之改变。
§ 3.2 数据 存储类型 (常量、变 量)
3.2.1常量在数据处理过程中其值不发生变化的量叫常量。
1.数值型 ( N型)
数值型常量是由数字 0—9、小数点、正负号和 E(科学计数法)
组成的数值。
如 整数,100,-35
小数,2.54358
科学计数法 如,1.2E+5 表示 1.2乘以 10的 5次方。
0.3926E1,2.7E02
2.字符型 ( C型)
字符型常量是由,,,‘ ’,[ ]括起来的字符或字符串。
例如,,ABCD‖,’ No_4‘,[北京 ],,I‘m a student‖等。
注意:引号和括号必须是英文字符
3.逻辑型 ( L型) 只有逻辑,真,值和逻辑,假,值两个值,
真,,T.,,t.,,Y.,,y,
假,,F.,,f.,,N.,,n,
4.货币型 ( Y型) 货币型常数是以,$‖作为前缀的数值,
如 $986.35,$1234.5678。
保留四位小数如,$231.12345,实际在计算机里存放的是,$231.1235
5.日期型 ( D型) 日期常量是用 { } 括起来的日期形式的常量。
如 {10/01/1992},{10/01/92},{10-01-92} 。
严格的日期格式 YMD(VFP默认 ){^yyyy-mm-dd}或 {^yyyy/mm/dd} 。
如 {^2000-09-20},{^2000/10/01} 。
6.日期时间型 ( T型) 日期时间型常量也用 { }括起来表示,
如 {10/01/92 8:45}
严格的日期时间格式为:
{^yyyy-mm-dd [hh[:mm[:ss]][a|p]]} 或
{^yyyy/mm/dd [hh[:mm[:ss]][a|p]]}
如 {^2000-09-20 8:45}
2.3.2 变 量在命令操作和程序运行过程中其值允许变化的量称为变量。
一,内存变量定义内存变量时应取名并赋初值,变量建立后存储于内存中,
并可以改变其值,直到清除该变量。
内存变量的命名规则,
变量名可以由字母、数字、下划线和汉字组成,但第一个字符不可以是数字,至多 128个字符,不可与系统保留字同名。
内存变量的定义和赋值在内存变量赋值同时,也定义了内存变量及数据类型。
[格式 1] STORE <表达式 > TO <内存变量表 >
[格式 2] <内存变量 >= <表达式 >
例,
NAME = "李华 "
STORE 5*4 TO A,B,C
NAME
A
NAME
'同志 '
'NAME=',NAME
结果:
李华
20
李华同志
NAME=李华二,数组变量数组:按一定顺序排列的一组内存变量。
,先定义后使用如定义,DIMENSION|DECLARE a(2,3),b(4)
赋值,a=4,b(1)=―foxpro‖
a(2,1)=3等价 a(4)=3
三,字段变量表的各个字段都是字段变量
use 学生表学号
go 5
姓名内存变量和字段变量同名时:字段变量优先,若要显示内存变量,
用?m.编号或?m->编号四,记录记录是表中的一行字段的集合。
五,对象对象是构成程序的基本单位和运行实体。
§ 3.3函 数函数是系统内部预先编制好的一组程序,分别实现某些特定的运算或操作。
函数的一般调用形式,< 函数名 > ([<参数 1>,<参数
2>,…… ])
其中函数名是系统规定的,参数可以是一个或多个,也可为空,
即:函数名 (),但圆括号不能省略。
VFP提供了 200余种函数,常用函数 P50表 2.7~表 2.11。
按功能可划分为:数学函数、字符串函数、日期和时间函数、类型转换函数、测试函数。
1、数学函数 (数值函数 )
(1) 求绝对函数 ABS
格式,ABS(〈 数值表达式 〉 )
ABS(- 4) 结果为4
(2) 求整函数 INT
格式,INT(〈 数值表达式 〉 )
INT( 4.8) 结果为4
(3) 四舍五入函数 ROUND
格式,ROUND(〈 数值表达式 〉,〈 保留小数位 〉 )
功能:按保留小数位指定的位数对 〈 数值表达式 〉 的数值进行四舍五入。
ROUND( 3.14159,3) → 3.142
ROUND( 3.14159,0) → 3
(4) 指数函数 EXP、平方根函数 SQRT、
格式,EXP| SQRT (〈 数值表达式 〉 )
EXP(2) → 7.39
SQRT (9) → 3
(5) 取模 (求余数 )函数 MOD
格式,MOD(〈 数值表达式 1〉,〈 数值表达式 2〉 )
功能:取 〈 数值表达式 1〉 除以 〈 数值表达式 2〉 的余数。
MOD(20,3) → 2
(6) 求最大值 MAX、最小值 MIN
格式,MAX| MIN (〈 表达式 1〉,〈 表达式 2〉 )
功能:求 〈 表达式 1〉 和 〈 表达式 2〉 中的大者、小者。
2、字符串函数
(1) 判子字符串位置 AT
格式,AT(〈 字符表达式 1〉,〈 字符表达式 2〉,〈 数值表达式 〉 )
功能:求 〈 字符表达式 1〉 在 〈 字符表达式 2〉 中第 〈 数值表达式 〉
次出现的起始位置。 〈 数值表达式 〉 默认值为 1。
说明:
①若 〈 字符表达式 2〉 中不包含 〈 字符表达式 1〉,则函数值为零;
②大小写字母在检索中视为不同。
AT("OK","COMPUTER OKOK ",2) → 12
AT("数据 ","计算机数据管理系统 ") → 7
AT("BOOK","COMPUTER") → 0
(2) 求子串函数 SUBSTR
格式,SUBSTR〈 字符表达式 〉,〈 起始位置 〉 [,〈 长度 〉 ]
功能:对 〈 字符表达式 〉 从给定的 〈 起始位置 〉 开始截取指定长度的字符,生成一个新的字符串;
SUBSTR("110102490217041",7,6) → 490217
(3) 取左、右子串函数格式,LEFT | RIGHT (〈 字符表达式 〉,〈 数值表达式 〉 )
功能,LEFT 从 〈 字符表达式 〉 左边截取由 〈 数值表达式 〉 的值指定的字符,生成一个新的字符串;
RIGHT 从 〈 字符表达式 〉 右边截取由 〈 数值表达式 〉 的值指定的字符,生成一个新的字符串;
LEFT('FOXPRO数据库管理系统 ',6) → FOXPRO
RIGHT('FOXPRO数据库管理系统 ',14) → 数据库管理系统
(4) ALLTRIM删除首部和尾部空格格式,ALLTRIM(〈 字符表达式 〉 )
功能,ALLTRIM删除字符串首部和尾部的空格
ALLTRIM(― man ‖) → man
(5) 构造空格函数 SPACE
格式,SPACE(〈 数值表达式 〉 )
功能:产生由 〈 数值表达式 〉 的值决定的空格数。
―姓名,+SPACE(3)+―李宁,→ 姓名 李宁
(6) 字符串长度函数 LEN
格式,LEN(〈 字符表达式 〉 )
功能:测定字符串的长度 (字符个数 )。
LEN('FOXPRO数据库管理系统 ') → 20
(7) 大小写字母转换函数 LOWER|UPPER
格式,(〈 字符表达式 〉 )
功能,LOWER把 〈 字符表达式 〉 中的大写字母转换为小写字母;
UPPER把 〈 字符表达式 〉 中的小写字母转换为大写字母。
LOWER([FoxPro]) → foxpro
UPPER([FoxPro]) → FOXPRO
3、日期和时间函数
(1)系统日期函数 DATE
格式,DATE()
? DATE() → 99/11/15
(2)系统时间函数 TIME
格式,TIME()
? TIME() → 08:50:43
(3)年、月、日函数 YEAR|MONTH|DAY
格式,YEAR|MONTH|DAY(〈 日期表达式 〉 )
功能:从 〈 日期表达式 〉 中求出年份、月份、日份的数值。
DATE() → 99/11/15
YEAR(DATE()) → 1999
MONTH(DATE()) → 11
DAY(DATE()) → 15
4、类型转换函数
(1) 字符转换为数值函数 VAL
格式,VAL(〈 字符表达式 〉 )
功能:将字符型数据转换为数值型数据。
说明:
①若 <字符表达式 >由数字字符和小数点组成,则转换成相应的数值,但只保留两位小数,其余小数四舍五入。
②若 <字符表达式 >由非数字字符打头,则转换为 0.00。
③若 <字符表达式 >由数字字符打头,且混有非数字字符时,则转换到第一个非数字字符。
? VAL("1234.5678") → 1234.57
VAL("FoxPro") → 0.00
VAL("1234FOX.5678") → 1234.00
(2) 数值转换为字符函数 STR
格式,STR(〈 数值表达式 〉 [,〈 长度 〉 ][,〈 小数位数 〉 ] ))
功能,把 〈 数值表达式 〉 的运算结果转换为指定长度的字符串。
STR(1234.5678,7,2) →? 1234.57‘
(3) 字符转换为日期函数 CTOD
格式,CTOD(〈 字符表达式 〉 )
功能,将符合 yy/mm/dd,mm/dd/yy日期格式的字符串转换为相应日期。
CTOD(?99/11/15‘) → 99/11/15
(4) 日期转换为字符函数 DTOC
格式,DTOC(〈 日期表达式 〉 )
功能:将 <日期表达式 >转换为相应的字符串。
说明:按 mm/dd/yy格式转换;
DTOC(DATE())→?99/11/15‘
(5) ASCII码值转换为字符函数 CHR
格式,CHR(〈 数值表达式 〉 )
功能:将 <数值表达式 >所表示的 ASCII码值转换为相应的字符。
CHR(65),CHR(97),CHR(48) → A a 0
(6) 字符转换成 ASCII码值函数 ASC
格式,ASC(〈 字符表达式 〉 )
功能:返回 <字符表达式 >最左边的一个字符的
ASCII码值。
ASC('A'),ASC('a'),ASC('0') → 65 97 48
5、测试函数
(1) 记录号测试函数 RECNO
格式,RECNO([数值型表达式] )
功能:给出 <数值表达式 >指定的工作区中打开的数据库的当前记录号。
(2) 文件起始测试函数 BOF
格式,BOF([数值型表达式] )
功能:测试 <数值表达式 >指定的工作区中库文件记录指针是否指向起始位置。是函数值为逻辑真(,T.),否则为假(,F.)。
(3) 文件结束测试函数 EOF
格式,EOF([数值型表达式] )
功能:测试 <数值表达式 >指定工作区中库文件记录指针是否指向结束位置。是函数值为逻辑真(,T.),否则函数值为假
(,F.)。
(4) 文件测试函数 FILE
格式,FILE(〈 文件名 〉 )
功能:测试 <字符表达式 >指定的磁盘文件是否存在,若存在,函数值为逻辑真(,T.),否则函数值为假 (.F.)。
(5) 记录测试函数 RECOUNT
格式,RECOUNT([数值型表达式] )
功能,测试 <数值表达式 >指定的工作区中数据库的记录个数。
(6) 数据类型测试函数 TYPE
TYPE(―〈 字符表达式 〉 ‖) 返回表达式类型,
如 N,C,D,L等
TYPE("date()")
TYPE(―[字符表达式 ]‖)
TYPE(".t.")
(7) 检索测试函数 FOUND
与 LOCATE,SEEK,FIND,CONTINUE等同用,查到返回,T.,否则,F.
(8) 库文件名测试函数 DBF
返回当前工作区打开的表名
§ 3.4 表达式常量、变量、函数通过运算符连接起来构成表达式。
VFP中的表达式有算术表达式、字符表达式、日期表达式、关系表达式、逻辑表达式。
1.算术表达式:
由常量、变量、函数和算术运算符构成。
运算符号:( ) 括号
**或 ∧ 乘方,例,3**2 或 3^2
*,/ 乘、除
% 取模(余数),例,15%4 结果是 3
+,- 加、减(单目运算为,+‖,,-‖号)
优先次序同数学相同如一元二次方程的一个根,(-b+sqrt(b**2-4*a*c))/(2*a)
2.字符表达式:
由常量、变量、函数和字符算术运算符构成。
字符运算符有两个:完全链接 ( +)和去空链接 ( -)
+,将几个字符串连接成一个新字符串。
例,?"ABCD" + "EFGH" + " 1234"
结果为:,ABCDEFGH 1234‖
-,将第一个字符串尾部空格移到后面一个字符串末尾后,连接成一个新字符串。
例,? "莆田 " –"学院 " + "机电系 "
结果为,―莆田学院 会计系,
"莆田 " -"学院 " - "机电系 "+"通信专业 "
3.日期表达式:日期及时间运算符有,+‖和,-‖
日期及日期时间型表达式的运算有三种情况:
( 1)两个日期(时间)型数据相减,表示两个日期相差天数。
例,?{^2000-10-01} - {^2000-09-01} 结果为 30,表示两个日期相距 30天。
( 2)一个日期(时间)型数据加一个表示天数的数值型数据,结果是一个向后推算的日期(时间)型数据。
例,?{^2000-09-01} + 60 结果为 {^2000-10-31}
{^2000-09-01 17:34}+60结果为 {^2000-09-01 17:35}
( 3)一个日期(时间)型数据减一个表示天数的数值型数据,结果是一个向前推算的日期(时间)型数据。
例,?{^2000-09-01} – 30 结果为 {^2000-08-02}
4.关系表达式:关系表达式对同一类型的数据进行比较运算,比较的结果符合逻辑,其值为,T.;否则为,F.。
关系运算符为:
=,<,>,<=,>=,<>或 #,= =,$
等于 小于 大于 小于等于 大于等于 不等于 全等于 子字符串比较运算规则
①数值型数据按数值的大小比较
②字符型数据按字符从左到右比较
③日期型数据按年、月、日顺序比较
④使用,=‖比较字符串时,系统默认为非精确比较,即当,=‖左边的字符串与右边的字符串的前半部分或全部相当时,系统均认为相等,
即,T,。
如,ABCDE‘=?ABC‘ →,T,
可以使用 SET EXACT ON | OFF命令设置精确比较或非精确比较。
例,? 2+3=6 →,F.
C1‘<?C2‘ →,T.
ABC‘= =?ABCDE‘ →,F.
' student ' > ' study' →,F.
' Student ' > ' study' →,F,
'CD'$'ABCDEF' →,T.
'BD'$'ABCDEF' →,F.
SET EXACT OFF (非精确比较)
ABCDE‘=?ABC‘ →,T,
ABC‘=?ABCDE‘ →,F.
SET EXACT ON (精确比较)
ABCDE‘=?ABC‘ →.F.
ABC‘=?ABCDE‘ →,F.
5.逻辑表达式:
两个或两个以上的关系表达式,及逻辑型常量、变量、函数,之间用逻辑运算符连接起来,构成逻辑表达式。
运算符,,NOT.,AND.,OR,圆点 可以省略。
运算规则,
逻辑非(,NOT.),对 (.NOT.)右边的 L型数据求反 ;
逻辑与(,AND.):当,AND.两边为真时,结果才为真(,T.);
逻辑或(,OR,):当,OR,两边至少一个为真时,结果为
(,T.)。
优先次序,逻辑非 → 逻辑与 → 逻辑或运算结果,,T,或,F,
6.运算的优先顺序:
课本 P49 表 3-8
算术运算 → 关系运算 → 逻辑运算
()括号最优先例:
3>2 AND 5+2>5 运算结果为,T,
―A‖>‖B‖,OR,4+3<4*3,AND,―D‖>‖d‖ 运算结果为,F,
―Ab‖>‖aB‖,OR..NOT.―Ab‖>‖aB‖ 运算结果为,T.
习题
1,以下数据那些不是字符型数据 ( )
A)01/01/98 B)‖01/01/97‖ C)‖12345‖ D)‖ASDF‖
2,备注型字段的长度固定为 ( )
A)8 B)1 C)4 D)10
3,STR( 109.87,7,3) 的值是 ( )
A)109.87 B)‖109.87‖ C)109.870 D)‖109.870‖
4,若要将字符串,莆田学院,按竖排显示,试用字符函数将其实现
5,在逻辑运算中,依照哪一个优先级进行运算? ( )
a)not-or-and b)not-and-or c)and-or-not d)or-and-not
6,xs表中有 10条记录,其中 2条已逻辑删除,在 VFP命令窗口输入
set dele on,在用 count命令数记录,问共有几条记录? ( )
a)2 b) 8 c)10 d)12
习题
7.在一对多关系中,表 A的一个记录在表 B中可以有多个记录与之对应,
表 B中的一个记录在表 A中( )记录与之对应。
A) 最多只能有一个 B) 可以有二个 C) 也可以有多个 D) 一般没有
8,执行下列操作中,不能获得 VFP帮助信息的是 ( ) 。
A) 单击 VFP工具栏上的 按钮
B) 在 Windows下执行 Foxhelp.chm文件
C) 在 VFP下执行 help命令
D) 从,开始,菜单上选择,帮助,选项
9,在 VFP主菜单上,每个菜单项右侧括号内带有下划线的字母称为
( ) 。
A) 快捷键 B) 组合键 C) 访问键 D) 菜单
10,实现,打开,文件功能的快捷键是 ( ) 。
A) Alt+F B) Ctrl+N C) Ctrl+O D) Shift+Open
11,关闭 VFP主窗口的命令是 ( ) 。
A) clear B) close C) qiut D ) close
box
1,在桌面上创建 VFP6.0快捷方式 ( 分别从,开始,菜单和
VFP6.EXE创建 ) 。
2,启动 VFP 6.0,并打开数据库设计器工具栏 。
3,在 VFP命令窗口中依次执行 list status和 clear命令 。
4.隐藏 VFP命令窗口,再显示它。
1,执行 A1=―计算机,命令后,再执行? type(,A1‖) 命令,结果显示 ( ) 。
A) A1 B) 计算机 C) C D) 6
2,下面各数中,属于常量的是 ( ) 。
A) –203.75 B) 计算机 C) T D) 9/3/01
3,依次执行 Ab=12和 aB=―VFP‖命令后,再执行?Ab+aB命令的结果是 ( ) 。
A) 12 B) VFP C) 12VFP D) VFPVFP.
4,系统变量有 70多个,这些变量名都是以 ( ) 开始 。
A) 字母 B) 汉字 C) 下划线 D) 数字
5,执行 dimension a( 5) 命令后,再执行? a( 5) 命令,结果显示 ( ) 。
A) 0 B) 1 C) a( 5) D),F.
6,执行? len(,VFP课程,) 命令后的结果显示 ( ) 。
A),VFP课程,B) VFP课程 C) 5 D) 7
7,执行? left(,VFP课程,,3) 命令的结果显示是 ( ) 。
A) VFP B) VFP课程 C) 3 D) 5
8,执行? round( 135.246,1) + 2%3命令的结果显示 ( ) 。
A) 135.25 B) 135.9 C) 137.2,D) 显示出错信息
9,执行? mod( 100,3) 命令的结果显示 ( ) 。
A) 1 B) 100 C) 3 D) 33.333
10,执行? str( 1234.56,8,len(,abc‖)) 命令的结果显示 ( ) 。
A) 1234.56 B) abc C) 1234D) 1234.560
11,执行? val(,12+34‖) 命令的结果显示 ( ) 。
A) 12+34 B) 12.00,C) 46 D) 0
12,找出团员男生 ( 团员 L型,性别 C型 ) 的逻辑表达式是 ( ) 。
A) 团员 =.T,or 性别 = 男 B) 团员 or 性别 =男
C) 团员 =.T,and 性别 =―男,D) 团员 and 性别 =―男,