780 likes | 1.03k Views
第 2 章 自由表的基本操作. 2.1 Visual FoxPro 的语言基础 2.2 自由表的建立与修改 2.3 自由表的维护 本章要点. 2.1 Visual FoxPro 的语言基础. 2.1.1 数据类型 数据类型一旦被定义,就确定了其存储方式和使用方式。 1 .字符型 字符型数据描述不具有计算能力的文字数据类型。
E N D
第2章 自由表的基本操作 • 2.1 Visual FoxPro的语言基础 • 2.2 自由表的建立与修改 • 2.3 自由表的维护 • 本章要点
2.1 Visual FoxPro的语言基础 • 2.1.1 数据类型 • 数据类型一旦被定义,就确定了其存储方式和使用方式。 • 1.字符型 • 字符型数据描述不具有计算能力的文字数据类型。 • 字符型数据(Character)是由汉字和英文字符、数字字符、空格及其他专用字符,使用时必须用定界符双引号(“”),单引号(‘’) 或中括号( [ ] )括起来。这里的单引号、双引号或方括号都是西文的标点符号,称为定界符。
2.数值型 • 数值型数据用来表示一个数量的大小,数值型数据通常可细分为数值型,浮点型,双精度型,整型和货币型五种类型。 • 浮点型数据(Float)是数值型数据的一种,与数值型数据完全等价。浮点型数据只是在存储形式上采取浮点格式。 • 双精度型数据(Double)是更高精度的数值型数据。它只用于数据表中的字段类型的定义,并采用固定长度浮点格式存储。 • 整型数据(Integer)是不包含小数点部分的数值型数据。它只用于数据表中的字段类型的定义。整型数据以二进制形式存储。 • 货币型(Currency)数据用来表示货币值,其书写格式与数值型数据类似,但要加上一个前置的符号($)。货币数据在存储和计算时,采用4位小数。
3.日期型 • 日期型数据(Date)是用于表示日期的数据,用默认格式{mm/dd/yyyy}来表示。其中mm代表月,dd代表日,yyyy代表年,存储长度固定为8位。 • 4.日期时间型 • 日期时间型数据(DateTime)是描述日期和时间的数据,其默认格式为{mm/dd/yyyy hh:mm:ss}。 • 其中yyyy代表年,前两个mm代表月,dd代表日,hh代表小时,后两个mm代表分钟,ss代表秒,存储长度固定为8位。 • 5.逻辑型 • 逻辑型数据(Logic)是描述客观事物真假的数据,用于表示逻辑判断结果。逻辑型数据只有真(.T.)和假(.F.)两个值,存储长度固定为1位。 • 6.备注型 • 备注型数据(Memo)用于存放较长的字符型数据类型,可以把它看成是字符型数据的特殊形式。 • 7.通用型 • 通用型数据(General)是用于存储OLE对象的数据。通用型数据中的OLE对象可以是电子表格、文档、图片等。它只用于数据表中的字段类型的定义。
2.1.2 数据存储 • 数据输入、输出是通过数据的存储设备完成的。数据可以存入到字段、记录和对象中。我们把这些供数据存储的常量、变量、数组、字段、记录和对象称为数据存储容器。常量、内存变量、函数以及表达式的类型包括字符型、数值型、货币型、逻辑型、日期型和日期时间型等6种。
1.常 量 • 在数据处理过程中其值不发生变化的量叫常量。 • (1) 数值型常量 • 数值型常量也就是常数,用来表示一个数量的大小,由数字0~9、小数点和正负号构成。例如:112、3.145、-6.22。 • (2) 货币型常量 • 货币型常量用来表示货币值,其书写格式与数值型常量类似,但要加上一个前置的符号($)。例如,常量$123.456789。 • (3) 字符型常量 • 字符型常量也称为字符串,许多常量都有定界符。 • 注意,不包含任何字符的字符串(" ")叫空串。空串与包含空格的字符串(" ")不同。
(4) 日期型常量 • 日期型常量的定界符是一对花括号。 • ① 传统的日期格式 • 系统默认的日期型数据为美国日期格式“mm/dd/yy”(月/日/年),如{09/01/03}、{09/01/2003}等。 • 语句SET DATE TO ymd把日期设置成(年/月/日)格式,命令SET CENTURY on把年份设置成4位数字格式。 • ② 严格的日期格式 • 严格的日期格式为{^yyyy-mm-dd},它不受SET DATE等语句设置的影响。 • 严格的日期格式可以在任何情况下使用,而传统的日期格式只能在执行如下命令: • SET STRICTDATE TO 0 • 后才可以使用。 • SET STRICTDATE TO 1 • 把系统设置为严格的日期格式。另外,命令 SET MARK TO是设定日期分隔符。
(5) 日期时间型常量 • 日期时间型常量包括日期和时间两部分内容:{<日期>,<时间>}。 • <日期>部分与日期型常量相似,也有传统的和严格的两种格式。<时间>部分的格式为:[hh[:mm[:ss]][a | p]]。 • SET MARK TO • ? {^2003-09-01 11:10:10}, {^2003-09-01 15:10:10} • (6) 逻辑型常量 • 逻辑型数据只有逻辑真和逻辑假两个值。逻辑真的常量表示形式有:.T. ,.t. ,.Y.和.y.。逻辑假的常量表示形式有:.F. ,.f. ,.N.和.n.。
2.变 量 • 变量是在命令操作、程序运行过程中其值可以变化的量。变量分为字段变量和内存变量两大类。 • 内存变量:1. 以字母、汉字、下划线开头;2. 由字母、汉字、数字、下划线组成;3. 至多128个字符;4. 不可与系统保留字同名。 • 字段变量:1. 以字母、汉字开头;2. 由字母、汉字、数字、下划线组成;3. 至多10个字符;4. 不可与系统保留字同名。
内存变量又分为简单内存变量和系统内存变量,系统内存变量是Visual FoxPro系统运行时自动建立、使用的,其名字都是以下划线开头,例如 _dos,_pwait等。 • (1) 简单内存变量 • 每一个变量都有一个名字,可以通过变量名访问变量。简单内存变量赋值不必事先定义,例如: • X=10
(2) 数组 • 数组是内存中连续的一片存储区域,是按一定顺序排列的一组内存变量,数组中的各个变量称为数组元素,每个数组元素可通过数组名及相应的下标来访问。每个数组元素相当于一个简单变量,可以给各个元素分别赋值。在Visual FoxPro中,一个数组中各个元素的数据类型可以不同。 • 创建数组的两种命令格式为: • DIMENSION <数组名> ( <下标上限1> [, <下标上限2> ] [,……] ) • DECLARE <数组名> ( <下标上限1> [, <下标上限2> ] [,……]) • 例如: • DECLARE aa(5),bb(2,3)
3.内存变量常用命令 • (1) 内存变量的赋值 • 格式1:STORE<表达式>TO<变量名表> • 格式2:<内存变量名>=<表达式> • 功能:格式1计算表达式的值并赋给一个或多个内存变量;格式2只能给一个变量赋值。
(2) 内存变量的显示 • 格式1:LIST MEMORY [LIKE<通配符>] [TO PRINTER ︳TO FILE <文件名> ] • 格式2:DISPLAY MEMORY [LIKE<通配符>] [TO PRINTER ︳TO FILE <文件名> ] • (3) 内存变量的清除 • 格式1:CLEAR MEMORY • 格式2:RELEASE <内存变量名表> • 格式3:RELEASE ALL [EXTENDED] • 格式4:RELEASE ALL [LIKE<通配符> ︳EXCEPT<通配符>]
(4) 内存变量的保存 • 格式:SAVE TO <文件名> ALL [LIKE<通配符> ︳EXCEPT<通配符>] • 功能:将指定范围的内存变量保存在内存变量文件中,内存变量文件的扩展名为.men 。 • (5) 内存变量的恢复 • 格式:RESTORE FROM <文件名> [ADDITIVE] • 功能:把内存变量文件中的变量送回内存,不选ADDITIVE则送回之前先清除内存中的内存变量。
4.字段变量 • 字段变量就是指数据表中已定义的任意一个字段。字段变量的数据类型与该字段定义的类型一致。 • 字段变量的类型有数值型、浮点型、整型、双精度型、字符型、逻辑型、日期型、时间日期型、备注型和通用型等。
2.1.3 函数 • 函数名(自变量表) • 自变量表可以是一个变量或多个自变量,也可以为空,即:函数名(),此时函数名后面的一对圆括号不能省略。 • 函数按功能可划分为:数学函数、字符串函数、日期和时间函数、类型转换函数、测试函数。
1.数学函数(数值函数) • (1)求绝对值函数ABS • 格式:ABS( <数值表达式> ) • (2)求整函数INT • 格式:INT( <数值表达式> ) • (3)四舍五入函数ROUND • 格式:ROUND( <数值表达式> , <保留小数位> ) • (4) 指数函数EXP、自然对数函数LOG、平方根函数SQRT、 • 格式:EXP| LOG | SQRT ( <数值表达式> ) • (5)取模 (求余数)函数MOD • 格式:MOD( <数值表达式1> , <数值表达式2> ) • 功能:取 <数值表达式1> 除以 <数值表达式2> 的余数。 • (6)求最大值MAX、最小值MIN • 格式:MAX| MIN ( <表达式1> , <表达式2>, … , <表达式n>)
2.字符串函数 • (1)判子字符串函数AT • 格式:AT( <字符表达式1> , <字符表达式2> ) • 功能:求 <字符表达式1> 在 <字符表达式2> 的起始位置数值。 • 说明: • 若 <字符表达式2> 中不包含 <字符表达式1> ,则函数值为零; • 若 <字符表达式2> 的值含有两个以上的 <字符表达式1> 的值,则函数给出第一个值的位置。 • 大小写字母在检索中视为不同。
(2)取子串函数SUBSTR • 格式:SUBSTR (<字符表达式> , <起始位置> [, <长度> ]) • 功能:对 <字符表达式> 从给定的 <起始位置> 开始截取指定长度的字符,生成一个新的字符串; • 说明: • 若无<长度>或<长度>大于后面剩余的字符个数,则截至末尾。 • 若 <起始位置> 大于字符串表达式长度,则输出空串。 • (3)取左子串函数LEFT • 格式:LEFT ( <字符表达式> , <数值表达式> ) • 功能:LEFT 从 <字符表达式> 左边截取由 <数值表达式> 的值指定的字符,生成一个新的字符串。 • (4) 取右子串函数RIGHT • 格式:RIGHT ( <字符表达式> , <数值表达式> )
(5) 宏代换函数 & • 格式:&<字符型内存变量>[.] • 功能:替换出<字符型内存变量>的值。即将<字符型内存变量>值的定界符去掉,使其可能代表一个变量名、文件名、命令、表达式等。 • 说明:在表达式中使用该函数时,如果函数中的字符型内存变量名与其后面的字符无明显分界时,应使用圆点将它们隔开。例如: • A="北京" • B="中国" • ?"&A.是&B.首都" • 主屏幕显示: 北京是中国首都
(7) 删除首部和尾部空格的函数LTRIM ,TRIM(RTRIM) 和ALLTRIM • 格式:LTRIM|TRIM |RTRIM |ALLTRIM ( <字符表达式> ) • 功能:LTRIM是删除字符串首部的空格,TRIM 和RTRIM是删除字符串尾部的空格,ALLTRIM则可删除字符串首部和尾部的空格。 • (8) 构造空格函数SPACE • 格式:SPACE( <数值表达式> ) • 功能:产生由 <数值表达式> 的值决定的空格数。 • (9) 生成重复字符串函数REPLICATER • 格式:REPLICATER( <字符表达式> , <数值表达式> ) • 功能:把 <字符表达式> 的值(字符串)重复由 <数值表达式> 的值指定的次数,生成新的字符串。
(10) 大小写字母转换函数LOWER|UPPER • 格式:LOWER|UPPER ( <字符表达式> ) • 功能:LOWER把 <字符表达式> 中的大写字母转换为小写字母;UPPER把 <字符表达式> 中的小写字母转换为大写字母。 • (11) 字符串替换函数STUFF • 格式:STUFF(<字符表达式1>,<起始位置>,<字符个数>,<字符表达式2>) • 功能:从指定位置开始,用<字符表达式2>替换<字符表达式1>中<字符个数>指定的字符串。 • 说明: • <字符表达式2>中的字符个数与<字符表达式1>中的字符个数可以不等。 • 如果<字符个数>为0,则插入<字符表达式2>。 • 如果<字符表达式2>为空字符串,则删除<字符表达式1>中指定字符。
3.日期和时间函数 • (1)系统日期和时间函数DATE| TIME|DATeTIME • 格式: • DATE () • TIME() • DATETIME( ) • 功能:DATE()返回当前系统日期,函数值为日期型;TIME()以24小时制格式返回当前系统时间,函数值为字符型;DATeTIME( )返回当前系统日期,函数值为日期型。 • (2)年、月、日函数YEAR|MONTH|DAY • 格式:YEAR|MONTH|DAY( <日期表达式> ) • 功能:从 <日期表达式> 中求出年份、月份、日份的数值。 • (3)星期函数DOW|CDOW • 格式1:DOW ( <日期表达式> ) • 格式2:CDOW ( <日期表达式> ) • 功能:格式1给出 <日期表达式> 指定的日期是一星期的第几天。1表示星期日,2表示星期一,……,7表示星期六;格式2给出星期几的英文名称。
4.类型转换函数 • (1) 字符转换为数值函数VAL • 格式:VAL( <字符表达式> ) • 功能:将字符型数据转换为数值型数据。 • 说明: • 若<字符表达式>由数字字符和小数点组成,则转换成相应的数值,但只保留两位小数,其余小数四舍五入。 • 若<字符表达式>由非数字字符打头,则转换为0.00。 • 若<字符表达式>由数字字符打头,且混有非数字字符时,则转换到第一个非数字字符。 • 例如: • ?VAL("1234.5678") ,VAL("FoxPro") , VAL("1234FOX.5678") • 主屏幕显示:1234.57 0.00 1234.00
(2) 数值转换为字符函数STR • 格式:STR( <数值表达式> [, <长度>[, <小数位数> ]]) • 功能:把 <数值表达式> 的运算结果转换为指定长度的字符串。 • 说明: • <长度>应包括小数点在内,不指定长度时,系统默认整数位10位。 • 若指定<长度>小于<数值表达式>整数位数,则用一串"*"号表示数据溢出;若<长度>为0,则返回空字符串。 • 若省略<小数位>,则只转换整数位;若指定小数位,则对下一位四舍五入。 • 例如: • ?STR(1234.5678,7,2) ,STR(1234.5678,4) ,STR(1234.5678) • 主屏幕显示:1234.57 1235 1234
(3) 字符转换为日期函数CTOD • 格式:CTOD( <字符表达式> ) • 功能:将符合yy/mm/dd 、mm/dd/yy日期格式的字符串转换为相应日期。 • (4) 日期转换为字符函数DTOC • 格式:DTOC( <日期表达式> [,1]) • 功能:将<日期表达式>转换为相应的字符串。 • 说明:不选用1时,按mm/dd/yy格式转换;选用,1时,按yyyymmdd格式转换。 • (5) ASCII码值转换为字符函数CHR • 格式:CHR( <数值表达式> ) • 功能:将<数值表达式>所表示的ASCII码值转换为相应的字符。 • (6) 字符转换成ASCII码值函数ASC • 格式:ASC( <字符表达式> ) • 功能:返回<字符表达式>最左边的一个字符的ASCII码值。
5.测试函数 • 与数据表有关的测试函数,见 “2.3 自由表的维护”。 • (1) 值域测试函数BETWEEN • 格式:BETWEEN(<表达式1>,<表达式2>,<表达式3>) • 功能:判断一个表达式的值是否介于另外两个表达式的值之间。当<表达式1>值大于等于<表达式2>且小于等于<表达式3>时,函数值为逻辑真(.T.),否则函数只为逻辑假(.F.)。
(2) 数据类型测试函数VARTYPE • 格式:VARTYPE(<表达式>) • 功能:测试<表达式>的类型,返回一个大写字母,函数值为字符型。若<表达式>是一个数组,则根据第一个数组元素的类型返回字符串。 • (3) 条件测试函数IIF • 格式:IIF(<逻辑表达式>,<表达式1>,<表达式2>) • 功能:测试<逻辑表达式>的值,若为逻辑真.T.,函数返回<表达式1>的值,若为逻辑假.F.,函数返回<表达式2>的值。<表达式1>和<表达式2>的类型不要求相同。
2.1.4 表达式 • 表达式是由常量、变量和函数等通过特定的运算符连接起来的式子。 • 1.数值表达式
2.字符表达式 • 字符表达式由字符串运算符将字符型数据连接起来形成,其运算结果仍然是字符型数据。字符串运算符有以下两个,它们的优先级相同: • +:前后两个字符串首尾连接形成一个新的字符串。 • -:连接前后两个字符串,并将前字符串的尾部空格移到合并后的新字符串尾部。
3.日期时间表达式 日期时间表达式中可以使用的运算符也有+和-两个。
4.关系表达式 • 关系表达式通常也称为比较表达式,其运算结果为逻辑型常量。关系成立时,表达式的结果为.T. ,反之,表达式结果为.F. 。格式为: • <表达式1><关系运算符><表达式2> 运算符==和$仅适用于字符型数据。其他运算符适用于任何类型的数据。 SET EXACT ON/OFF 【工具】-【选项】菜单
5.逻辑表达式 • 逻辑表达式由逻辑运算符将逻辑型数据连接起来而形成,其运算结果仍然是逻辑型数据。逻辑运算符有三个:.NOT.或!(逻辑非)、.AND.(逻辑与)以及.OR.(逻辑或)。也可以省略两端的点(省略时逻辑运算符两边必须有空格),写成NOT、AND、OR。 • 优先级顺序为:NOT,AND,OR。
6. 运算符优先级 • 在每一类运算符中,各个运算符有一定的运算优先级。而不同类型的运算也可能出现在同一个表达式中,这时它们的运算优先级顺序为:先执行算术运算符,字符串运算符和日期时间运算符,其次执行关系运算符,最后执行逻辑运算符。
2.2 自由表的建立与修改 • 数据表简称表,在Visual FoxPro系统中,把包含在数据库中的表称为数据库表,并把不包含在数据库而独立存在的表称为自由表。自由表可以添加在数据库中而成为数据库表,数据库表也可以从数据库中移出而成为自由表。
2.2.1 表结构的建立 • 1.设计表结构 • (1) 字段名 • (2) 字段类型和宽度 Xsqk.dbf
Xk.dbf cj.dbf
2.利用表设计器创建表结构 • 用表设计器定义表结构的操作方法常有下面三种。 • (1)使用菜单方法 • 从Visual FoxPro 系统的主菜单开始,打开“文件”菜单,选择“新建” • (2)使用命令的方法 • 建立数据表的命令是: • CREATE [ <表文件名> |[.dbf]] • 例如要建立数据表xsqk.dbf时可使用命令: • CREATE XSQK • 命令执行后弹出表设计器,其它操作与 “使用菜单方法”相同。 • (3)在项目管理器中创建
2.2.2 表数据的输入 • (1)使用APPEND命令的方法 • APPEND命令是在表的尾部增加记录,它有两种格式: • APPEND或APPEND BLANK。 • 执行一次APPEND BLANK命令后在表中添加一条空记录; • 执行APPEND命令需要立刻交互输入新的记录值,一次可以连续输入多条新的记录。然后按<CTRL>+<W>或单击窗口的“关闭”按钮结束并保存输入的新记录;按<ESC>结束并不保存输入的新记录。 • (2)使用菜单方法 • 可选【显示】-【浏览···】菜单,出现 “浏览”窗口,再执行【显示】-【追加方式】菜单或执行【表】-【追加记录】菜单(也可以按<Ctrl>+<Y>键),即在浏览器尾部会增加一条空白记录。
2.2.3 备注字段和通用型字段数据的输入和修改 • 备注型数据显示为“Memo”或“memo”,其中“Memo”表示对应的记录的备注字段已经输入了数据,而“memo”表示该字段中没有备注内容。要为某记录的备注字段输入数据或修改其中的内容,可双击该记录的备注字段,进入备注字段的编辑窗口,编辑完后按<CTRL>+<W>或单击窗口的“关闭”按钮结束并保存输入的新内容;按<ESC>结束并不保存输入的新内容。
2.2.4 表结构的修改 • (1)使用菜单方法 • 执行【显示】-【表设计器】菜单命令 • (2)使用命令方法 • 打开表设计器的命令是: • MODIFY STRUCTURE
2.3 自由表的维护 • 2.3.1 VISUAL FOXPRO命令结构及常用子句 • VFP命令格式: • <命令动词> [<功能子句1>] [<功能子句2>] [...] && 注释部分 • 例如显示命令LIST的格式: • LIST [<范围>] [[<FIELDS>] <字段名表达式表>] [FOR<条件>] [WHILE<条件>] [OFF] [TO <设备名|文件名|内存变量名>] && 注释
1.命令动词 • 表示命令执行的操作,是命令中必不可少的部分。 • 2.语句体 • 语句体由一系列短语构成,可使用的常用子句(短语)如下所示: • (1) FIELDS <字段名表> • 用于指定操作的字段,<字段名表>中有多个字段时,字段名之间用逗号分隔。 例如命令: • use xsqk • list fields 姓名,身高 && 显示xsqk.dbf表的“姓名”和“身高”两列数据 • (2) FOR <条件> • 对满足条件的所有记录进行操作。例如命令: • use xsqk • list for 身高>1.7 && 显示xsqk.dbf表中身高大于1.7米的所有记录 • (3) WHILE <条件> • 对满足条件的记录进行操作。从表中的当前正在使用的记录开始向下顺序判断,当遇到第一个不满足条件的记录时,停止命令执行,而不管其后是否还有满足条件的记录。
(4) <范围> • 表示记录的执行范围,可以是ALL, NEXT <n> ,RECCORD <n>, REST几项中之一,其中的<n>是数值型表达式。系统对表中的记录是逐条进行处理的。Visual FoxPro为每一个打开的表设置了一个内部使用的记录指针,指向正在被操作的记录,该记录称为当前记录。记录指针的作用是标识表的当前记录。 • ALL:表示全部记录; • NEXT <n>:表示从当前记录开始的以下n条记录; • RECORD <n>:表示第n号记录; • REST:表示从当前记录到最后一条记录。 • (5) TO <设备名|文件名|内存变量名> • 表示操作结果的输出去向。
3.命令书写格式说明 • 在书写命令格式时,还用到一些符号,这些符号只是在书写时使用,实际操作时并不输入。这些符号以及它们所表示的意义如下: • < >:表示其中内容为必选项; • [ ]:表示其中内容为可选项; • | :表示其两侧项目只能任选一项; • …:表示同类项的多次重复。
4.命令的书写与使用规则 • 在输入命令时,应注意下面规则: • 每条命令以命令动词开始,以回车键结束,命令中各短语的顺序是任意的。 • 命令动词、短语中的英文单词及函数名均可缩写为前四个字符,大小写可混用。 • 命令动词、语句体及其各短语之间均以空格相隔。 • 一行只能写一个命令,不能将两个命令写在同一行。 • 命令一行写不下时,可以由系统自然换行或在行尾加分号(;),回车强制换行。命令行的长度小于或等于2048个字符。
2.3.2 表的打开与关闭 • (1) 表的打开 • 可以通过选【文件】-【打开】菜单(或工具栏上的“打开”按钮)打开表,也可以用以下命令打开表: • Use [ <表名>.dbf ] • (2) 表的关闭 • 常常使用下面命令关闭表: • use && 关闭当前使用的表 • close tables && 关闭当前数据库中所有打开的表 • close tables all && 关闭所有打开的表 • close all && 关闭所有打开的表、程序文件及表单等 • clear all && 关闭所有的表、程序文件及表单等,清除内存变量
2.3.3 表数据的浏览和修改 • 1.同时进行数据浏览和修改的操作 • 打开浏览器的方法有多种,常用的方法有: • 首先打开要操作的表,再执行菜单【显示】-【浏览···】。 • 在项目管理器中选择要操作的表,然后单击“浏览”命令按钮。 • 在命令方式下,首先用USE命令打开要操作的表,然后键入BROWSE命令。BROWSE命令的格式如下: • Browse [<范围>] [Fields <字段名表>] [For <条件表达式>] • [<NOAPPEND>] [<NOMODIFY>] • 交互式地对当前表记录进行编辑的命令: • CHANGE | EDIT [<范围>] [Fields <字段名表>] [For <条件表达式>]
2. 数据的选择显示 • 数据的显示常常使用LIST 和DISPLAY命令,命令格式如下: • List | Display [<范围>] [[Fields] <字段名表达式表>] [For <条件表达式>] [WHILE <条件表达式>] [To Printer] [To File <文件名>] [off]