VFP-数据-表达式-函数_第1页
VFP-数据-表达式-函数_第2页
VFP-数据-表达式-函数_第3页
VFP-数据-表达式-函数_第4页
VFP-数据-表达式-函数_第5页
已阅读5页,还剩112页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第2章数据表的基本操作段云娜1、掌握六种常量的特点及书写规则。2、掌握变量的分类及如何向变量赋值。3、了解一维数组及二维数组的定义及赋值语句。4、熟记表达式的概念及分类,掌握运算符的优先级。5、掌握函数的组成、分类及意义、熟记常用函数的拼写。6、熟练掌握如何建立和修改数据表的表结构。7、熟练掌握表数据的输入方法。8、掌握数据表的维护方法。9、掌握VF命令的格式及书写规则教学重点2.1.1数据类型

数据是计算机程序处理的对象,也是运算的结果。数据的类型决定了其在计算机中的存储方式和使用方式。在VisualFoxPro中,将数据分为七种类型:

2.1VisualFoxPro的语言基础1、字符型(Character)2、数值型(N)3、日期型(Date)4、日期时间型(DateTime)5、逻辑型(Logic)6、备注型(Memo)7、通用型(General)1、字符型(Character)

字符型数据是通常表示文本类型的信息。它由中/英文字符、数字、空格和各种专用符号组成,长度是0—254个字符。用定界符括起来的字符串为字符型常量。如:“123”、‘文化’、[%%abc]。2、数值型(N)数值型数据用来表示数量的大小,包括五种类型:数值型(Numeric):最大长度20位,包括数字、正负号和小数点,可以使用科学记数法形式书写。浮点型(Float):与数值型数据等价,以浮点格式存储双精度型(Double):高精度数值型数据,只用于表中类型。 浮点格式存储整型(Interger):不包含小数部分的数值型数据,以二进制形式存储货币型(Currency):用来表示货币值,格式与数值型类似 但数值前要加$符号。以4位小数存储3、日期型(Date)

表示日期,默认格式[mm/dd/yy],存储长度固定8位。例如:09/05/064、日期时间型(DateTime)

存储长度固定为8位,默认格式[mm/dd/yyyyhh:mm:ss]

例如:09/05/200612:22:545、逻辑型(Logic)

描述客观事物的真假,表示逻辑判断结果。逻辑数据只有真(.t.)和假(.f.)两个值,存储长度为1位6、备注型(Memo)

用于存放较长的字符型数据。 只用于表中字段,字段长度固定为4位,备注型数据没有长度限制,仅受限于现有的磁盘空间,它的数据内容存放在与数据表同名的备注文件中。表中只存放一个指向这个备注文件的指针。7、通用型(General)

存储OLE对象,可以是电子表格、文档、图片等,只能用于数据表中,数据存储方式同备注型数据相同。OLE(ObjectLinkingandEmbedding对象连接与嵌入)2.1.2数据存储数据容器:用户存放数据的地方,包括常量、变量、数组、记录、对象。

1、常量(6种数据类型) (1)数值型常量:由0-9、小数点和正负号构成。 例:112、3.14125、-7.34、5.123E12(2)货币型常量:数值前加“$”符号。

如:$123.473(3)字符型常量:即字符串。定界符不能是全角;左右必须匹配;同一种定界符不能嵌套。 例:“计算机”、‘“123”’、[]、[](空串)(4)日期型常量:包括年、月、日三部分,用一对花括号括起来,各部分之间用分隔符分隔,系统默认分隔符为“/”,其它还有“-”、“.”和空格。 日期型常量有传统和严格两种格式:传统的日期格式月、日各2位,年份2位或4位,命令setcenturyon/off控制;系统默认美国日期格式mm/dd/yy,由命令setdateto控制

例如:setdatetoymd{06/02/27} setdatetodmy {27/02/06}

例如:setcenturyon{09/01/2006}setcenturyoff

{09/01/06}2003/09/01setcenturyoffsetmarkto“.”setdatetomdy?{^2003-09-01}严格的日期格式格式:{^yyyy-mm-dd}说明:①不受setdate影响,必须有脱字符^、年份必须4

位,年月日顺序不能改变;②在任何情况下使用,而传统格式只能在执行如下

命令后才能使用:

setstrictdateto0 ③若只使用严格日期格式,则执行如下命令:

setstrictdateto1 ④可用命令setmarkto设定日期分隔符例:setcenturyonsetmarkto(默认分隔符)setdatetoymd?{^2003-09-01}09.01.03(5)日期时间型常量格式:{<日期>,<时间>}。说明:日期部分也有传统和严格两种格式

时间部分的格式为:[hh[:mm[:ss]][a|p]]。例:SETMARKTO ?{^2003-09-0111:10:10},{^2003-09-0115:10:10}(6)逻辑型常量

逻辑型数据只有逻辑真和逻辑假两个值。 逻辑真的常量:.T.

,.t.,.Y.和.y.。 逻辑假的常量:.F.

,.f.

,.N.和.n.

举例:?34>45 ?123=12309/01/0311:10:10AM09/01/033:10:10PM.F..T.2.变量

分为字段变量和内存变量两大类。

1)内存变量可以存不同类型数据。命名规则以字母、汉字、下划线开头后跟字母、汉字、下划线、数字,长度不超过128个字符变量命名一般不与系统保留字同名建议第一个字母采用小写并能表明该变量的类型 例:cName、n工资、nVal、dtime、c姓名分类:简单内存变量和系统内存变量。

简单内存变量直接赋值,不必事先定义。 例:X=10给变量X赋值为10

系统内存变量由VFP系统运行时自动建立、使用,名字都以下划线开头,例:_dos,_screen等。说明:内存变量可与字段变量重名,这时访问变量时,系统会优先认为是字段变量,因此若访问内存变量时,必须在内存变量前加前缀M.或M->。2)数组数组元素可通过数组名及相应的下标来访问。

例:a(4)

每个数组元素相当于一个简单内存变量,可以给各个元素分别赋值。在VisualFoxPro中,一个数组中各个元素的数据类型可以不同。

例:a(1)=34

a(2)=“数组的概念”

数组在使用前必须先定义,说明是一维还是二维数组,以及数组名和数组大小(下标从1开始)。数组定义后,每个数据元素的初值自动为.F.。定义数组:①DIMENSION<数组名>(<下标上限1>[,<下标上限2>][,……])②DECLARE<数组名>(<下标上限1>[,<下标上限2>][,……])

使用数组元素应注意下列问题:一切使用简单内存变量的地方,均可使用数组元素;数组元素的数据类型由所赋值的数据类型决定;一个数组中各元素的数据类型可以相同,也可以不同;可以使用一维数组方式访问二维数组;例:bb(1)—bb(1,1)、bb(4)—bb(2,1)例:DECLAREaa(5),bb(2,3)

创建两个数组aa和bbaa有5个数组元素:aa(1)、aa(2)、aa(3)、aa(4)、aa(5)bb有6个数组元素:bb(1,1)、bb(1,2)、bb(1,3)bb(2,1)、bb(2,2)、bb(2,3)3.内存变量常用命令(1)内存变量的赋值格式1:STORE<表达式>TO<变量名表>格式2:<内存变量名>=<表达式>功能:格式1计算表达式的值并赋给一个或多个内存变量 格式2只能给一个变量赋值说明:给变量赋值时,如变量不存在,则自动建立 可以通过对内存变量重新赋值来改变其内容和类型举例:aa=10 bb=‘word’ ?aa,bb store100tocc,dd,bb?aa,bb,cc,dddimensionarray(10)array=20?array(1)?array(2)array(1)=.f.?array(1)2020.F.10word10100100100(2)内存变量的显示格式1:LISTMEMORY[LIKE<通配符>][TOPRINTER|TOFILE<文件名>]格式2:DISPLAYMEMORY[LIKE<通配符>][TOPRINTER|TOFILE<文件名>]功能:显示内存变量的当前信息,包括变量名、作用域、类型、取值。说明:通配符*表示任意多个字符,?表示任意一个字符

list命令滚动显示内存变量信息;而display则分屏显示变量信息,超过一屏会停顿等待。例:listmemorylikea*displaymemory(3)内存变量的清除格式1:CLEARMEMORY

清除所有内存变量格式2:RELEASE<内存变量名表>

清除指定的内存变量格式3:RELEASEALL[EXTENDED]

清除所有内存变量,包括程序中的公共变量格式4:RELEASEALL[LIKE<通配符>︳EXCEPT<通配符>]

清除与LIKE匹配或与EXCEPT不匹配的内存变量例:RELEASEALLLIKEa?bRELEASEALLEXCEPTa*(4)内存变量的保存格式:SAVETO<文件名>ALL[LIKE<通配符>︳EXCEPT<通配符>]功能:将指定范围的内存变量保存在内存变量文件中,内存变量文件的扩展名为.mem。例:savetovarnamealllikea*(5)内存变量的恢复格式:RESTOREFROM<文件名>[ADDITIVE]功能:把内存变量文件中的变量送回内存,不选ADDITIVE则送回之前先清除内存中已有的内存变量。例:restorefromvarnameadditive4.字段变量

字段变量的类型:数值型、浮动型(浮点型)、整型、双精度型、字符型、逻辑型、日期型、日期时间型、货币型、备注型和通用型等当表打开时,字段变量就可以进行访问,字段变量的值就是表中某个记录中的属性值。字段变量的命名规则:以字母、汉字开头由字母、汉字、数字、下划线组成,长度不超10个字符不可与系统保留字同名说明:函数名是系统规定的,函数名与括号间不能有空格自变量表可以是一个或多个以逗号分隔的自变量自变量表也可以为空,但括号不能省略函数调用后有一个运算结果,称为函数值或返回值2.1.3函数函数的概念函数就是针对一些常见问题预先编好的一系列子程序。当要解决此类问题时,就可以调用相应的函数即执行该子程序,得到结果。函数调用的格式:函数名(<自变量表>)

MAX(27.4,98.9,-7) DATE() ABS(-78.6)1.数学函数(数值函数)求绝对值函数ABS

格式:ABS(<数值表达式>)

举例:x=abs(-5) y=-3.6?abs(45)

?x

?abs(y)求整函数INT,不进行四舍五入 格式:INT(<数值表达式>)

举例:?int(12.9) m=int(-13.7) 四舍五入函数ROUND

格式:ROUND(<数值表达式>,<保留小数位>)

举例:?round(12345.6789,2) ?round(12345.6789,0) ?round(12345.6789,-1)

说明:保留小数位可以是负数,此时从小数点向前数位数指数函数EXP、自然对数函数LOG、平方根函数SQRT、 格式:EXP|LOG|SQRT(<数值表达式>)

举例:a=exp(0)x=1?sqrt(2) ?a?log(x)?sqrt(4)取模(求余数)函数MOD

格式:MOD(<数值表达式1>,<数值表达式2>)

功能:取<数值表达式1>除以<数值表达式2>的余数,符号与数值表达式2符号一致。 举例:?mod(20,3)?mod(20,-3)?mod(-20,3)?mod(-20,-3) 2-11-2求最大值MAX、最小值MIN

格式:MAX|MIN(<表达式1>,<表达式2>,…,<表达式n>)

举例:a=34b=65 ?max(a,b,30)?min(a,b)2.字符串函数(1)判断子字符串函数AT格式:AT(<字符表达式1>,<字符表达式2>)功能:求<字符表达式1>在<字符表达式2>的起始位置数值。说明:<字符表达式2>中不包含<字符表达式1>,函数值为零若<字符表达式2>的值含有两个以上的<字符表达式1>的值,则函数给出第一个值的位置。大小写字母在检索中视为不同。举例:?at(“数据”,“计算机数据管理”)

?AT(“book”,“computer”),at(“a”,“Iamateacher”) ?at(“th”,“Thisisatable”)

(2)取子串函数SUBSTR格式:SUBSTR(<字符表达式>,<起始位置>[,<长度>])功能:对<字符表达式>从给定的<起始位置>开始截取指定长度的字符,生成一个新的字符串;说明:若无<长度>或<长度>大于后面剩余的字符个数,则截至末尾;若<起始位置>大于字符串长度,则输出空串

(3)取左子串函数LEFT格式:LEFT(<字符表达式>,<数值表达式>)功能:LEFT从<字符表达式>左边截取由<数值表达式>的值指定的字符,生成一个新的字符串。

(4)取右子串函数RIGHT格式:RIGHT(<字符表达式>,<数值表达式>)功能:从<字符表达式>右边截取由<数值表达式>的值指定的字符,生成一个新的字符串。

(5)宏代换函数&格式:&<字符型内存变量>[.]功能:替换出<字符型内存变量>的值。即将<字符型内存变量>值的定界符去掉,使其可能代表一个变量名、文件名、命令、表达式等。说明:在表达式中使用该函数时,如果函数中的字符型内存变量名与其后面的字符无明显分界时,应使用圆点将它们隔开。例如:A="北京"B="中国"

?"&A.是&B.首都"

(6)字符串长度函数LEN格式:LEN(<字符表达式>)功能:测试字符表达式的结果中包含多少个字符例如:?LEN(“FOXPRO数据库管理系统!”)(7)删除首部和尾部空格的函数格式:LTRIM|TRIM|RTRIM|ALLTRIM(<字符表达式>)功能:LTRIM是删除字符串首部的空格;TRIM或RTRIM是删除字符串尾部的空格;ALLTRIM删除字符串首部和尾部的空格。

(8)构造空格函数SPACE格式:SPACE(<数值表达式>)

功能:产生由<数值表达式>的值决定的空格数。(9)生成重复字符串函数REPLICATE格式:REPLICATE(<字符表达式>,<数值表达式>)功能:把<字符表达式>的值(字符串)重复由<数值表达式>

的值指定的次数,生成新的字符串。(10)大小写字母转换函数LOWER|UPPER格式:LOWER|UPPER(<字符表达式>)功能:LOWER把<字符表达式>中的大写字母转换为小写字母

UPPER把<字符表达式>中的小写字母转换为大写字母(11)字符串替换函数STUFF格式:STUFF(<字符表达式1>,<起始位置>,<字符个数>,<字符表达式2>)功能:从指定位置开始,用<字符表达式2>指定的字符串替换

<字符表达式1>中<字符个数>指定的字符串。说明:<字符表达式2>中的字符个数与<字符表达式1>中的字符个数可以不等;如果<字符个数>为0,则插入<字符表达式2>;如果<字符表达式2>为空字符串,则删除<字符表达式1>中指定字符。举例:?stuff(’热烈欢迎各位来我校参观指导!’,9,4,[各校领导])3.日期和时间函数(1)系统日期和时间函数DATE|TIME|DATETIME格式:DATE()|TIME()|DATETIME()功能:DATE()返回当前系统日期,函数值为日期型;

TIME()以24小时制返回当前系统时间,值为字符型;

DateTime()返回当前系统日期时间,为日期时间型。(3)星期函数DOW|CDOW格式1:DOW(<日期表达式>)格式2:CDOW(<日期表达式>)功能:格式1给出<日期表达式>指定的日期是一星期的第几天。1表示星期日,2表示星期一,……,7表示星期六;格式2给出星期几的英文名称,函数值为字符型。(2)年、月、日函数YEAR|MONTH|DAY格式:YEAR|MONTH|DAY(<日期表达式>)功能:从<日期表达式>中求出年份、月份、日份的数值。4.类型转换函数(1)字符转换为数值函数VAL格式:VAL(<字符表达式>)功能:将字符型数据转换为数值型数据。说明:若<字符表达式>由数字字符和小数点组成,则转换成相 应的数值,但只保留两位小数,其余小数四舍五入。若<字符表达式>由非数字字符打头,则转换为0.00。若<字符表达式>由数字字符打头,且混有非数字字符时则转换到第一个非数字字符为止。例:?VAL("1234.567"),VAL("Fox"),VAL("1234FOX.5678")主屏幕显示:1234.570.001234.00(2)数值转换为字符函数STR格式:STR(<数值表达式>[,<长度>[,<小数位数>]])功能:把<数值表达式>的运算结果转换为指定长度的字符串。

STR(345.678,5,2)345.7说明:<长度>应包括小数点在内,不指定长度时,系统默认整数位10位。

STR(123456789.56)123456790若指定<长度>小于<数值表达式>整数位数,则用一串“*”号表示数据溢出,“*”的个数为长度值;若<长度>为0,则返回空字符串。

STR(123.456,2)**STR(123.567,0)转换时要四舍五入(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.测试函数(1)值域测试函数BETWEEN格式:BETWEEN(<表达式1>,<表达式2>,<表达式3>)功能:判断一个表达式的值是否介于另外两个表达式的值之间。当<表达式1>值大于等于<表达式2>且

小于等于<表达式3>时,函数值为逻辑真(.T.),否则函数只为逻辑假(.F.)。举例:?between(34,78,96).F.(2)空值(NULL值)测试函数ISNULL格式:ISNULL(<表达式>)功能:判断一个表达式的运算结果是否为NULL值,是则返回逻辑值.T.,否则返回逻辑值.F.。举例:store.NULL.tox/storeNULLtox ?x,ISNULL(x)(3)“空”值测试函数EMPTY格式:EMPTY(<表达式1>)功能:测试表达式的运算结果是否为空,返回逻辑真.T.

或逻辑假.F.说明:空值对C型指空串、空格、制表符、回车、换行,

D和T型是指空值,如ctod(‘’),其它型是指0值。(4)数据类型测试函数VARTYPE格式:VARTYPE(<表达式>)功能:测试<表达式>的类型,返回一个大写字母,函数值为字符型。若<表达式>是一个数组,则根据第一个数组元素的类型返回字符串。举例:?vartype("AAA"),vartype(234),vartype($200)(5)条件测试函数IIF格式:IIF(<逻辑表达式>,<表达式1>,<表达式2>)功能:测试<逻辑表达式>的值,若为逻辑真.T.,函数返回

<表达式1>的值,若为逻辑假.F.,函数返回<表达式2>

的值。<表达式1>和<表达式2>的类型不要求相同。

举例:x=15?iif(x>10,x+10,x+5),iif(x<10,x+10,x+5)2.1.4表达式表达式是由常量、变量和函数等通过特定的运算符连接起来的式子。表达式包括两种形式:单一的对象(例如:123,X,date())由运算符将运算对象连接起来形成的式子(例如:x+5)表达式按运算规则能计算出一个结果,称表达式的值 表达式的值可以赋给变量,屏幕显示,或参加运算。按表达式运算结果的不同,表达式可分为以下几类数值表达式字符表达式日期时间表达式关系表达式和逻辑表达式1.数值表达式由算术运算符和数值型的常量、变量、数组元素、字段、函数组成。运算结果是数值型数据。算术运算符及运算优先级如下:函数的优先级仅次于括号2.字符表达式字符表达式由字符串运算符将字符型数据连接起来形成,其运算结果仍然是字符型数据。字符串运算符有以下两个:+:前后两个字符串首尾连接形成一个新的字符串-:连接前后两个字符串,并将前字符串的尾部空格移到合并后的新字符串尾部。字符串运算符的优先级相同举例:a=“长春”

b=“信息经济学院”

?a+b,“aa”?a-b,“aa”3.日期时间表达式日期时间表达式中可以使用的运算符也有+和-两个。4.关系表达式关系表达式由关系运算符和字符表达式、算术表达式、时间日期表达式组成,其运算结果为逻辑型常量。关系成立时,表达式的结果为.T.,反之,表达式结果为.F.。关系表达式格式:<表达式1><关系运算符><表达式2>关系运算符的优先级相同举例:?2+3=6,10>-11,$10>$15 ?{^2003-01-01}>{^2002-12-28}?.T.<.F.子串包含测试

store"计算机"tos1 store"微型计算机"tos2 ?s1$s2,s2$s1字符串精确比较与EXACT设置

“==”比较两个字符串时,只有当两个字符串完全相同时(包括空格及各字符的位置),运算结果才为.T.

“=”比较两个字符串时,运算结果与setexacton/off有关,默认设置是SETEXACTOFF,此时,只要等号右边的字符串与左边字符串的前面部分内容相同,结果为.T.

设置SETEXACTON后,比较前会在较短字符串尾部加上若干空格,使两个字符串相等,然后再比较。5.逻辑表达式逻辑表达式由逻辑运算符将逻辑型数据连接起来而形成,运算结果仍是逻辑型数据。逻辑运算符有三个:

.NOT.或!(逻辑非):对后面的逻辑值求反

.AND.(逻辑与):只两个逻辑值都为真,运算结果为真

.OR.(逻辑或):只要有一个逻辑量为真,运算结果为真

也可以省略两端的点(省略时逻辑运算符两边必须有空格)优先级顺序为:NOT、AND、OR。举例:身高=1.8

体重=130 ?身高>1.7and体重>110 ?身高>1.7and体重>200?not身高>1.7and体重>200?not(身高>1.7and体重>200)?身高>1.7or体重>200?not身高>1.7or体重>2006.运算符优先级在每一类运算符中,各个运算符有一定的运算优先级。而不同类型的运算也可能出现在同一个表达式中,这时它们的运算优先级顺序从高到低为:

*括号

*函数

*算术运算、字符串运算和日期时间运算

*关系运算

*逻辑运算一、赋值语句、显示语句、表达式

a=3.14?a=4.68

姓名=“王大力”?姓名

str1=“thisisatable”?“Word”

生日={^1898-08-23}?Substr(str1,4,2)二、赋值号与比较运算符(=)

x=23?x=3 y=46?y=46 z=x=y&&先进行x、y的比较,将结果赋给z

?x=y=z&&比较x,y,再将比较的结果与z比较

e1=not3>4.and.y=46

?e1=not3>4.and.Y=46&&将e1与not3>4比较,再将结果与y=46的比较结果进行求逻辑与。上机题1、指出以下左边各变量的值及类型

A=10*2**3+100B=(10*2)**3+100 C=A=BD=A<BE1=A=B.AND.A<B E2=A=B.OR.A<BE3=.NOT.A=B.AND.A<BE4=.NOT.(A=B.AND.A<B) E5=.NOT.(A=B.OR.A<B)E6=“ABC”$BDABCD”.AND.A=B.OR.(10+5)<>10*5E7=E6.AND.“C”+”A”$“A”上机题2、在命令窗口中输入如下命令:A=“Thisisacomputer”B=“It’smine”写出满足下列要求的命令:取A的第8个字符赋给C取A的左边7个字符赋给D取A的右边4个字符赋给E求出字符A、B的长度判断A中是否包含D及E(两种方法)上机题3、上机执行下列命令,熟悉函数的功能(1)B=DTOC(DATE(),1)?“今天是:”+left(B,4)+“年”;+iif(subs(B,5,1)=“0”,subs(B,6,1),subs(b,5,2));+“月”+right(B,2)+“日”/*日子也可按月份处理方法处理(2)X=STR(12.4,4,1)(3)X=“奔腾586”Y=RIGHT(X,3)Y=“个人计算机”

Z=“&x+&y”?LEN(X),RIGHT(X,3)+Y?Z,&Z?”&X.&Y”,X+Y(4)?AT(“人民”,“中华人民共和国”)?VAL(SUBSTR(‘668899’,5,2))+1?SUBSTR(‘668899”,3)-’1’(5)DD=DATE()?str((year(dd),4)+”年”+str(month(dd,2)+”月“+str(day(dd),2)+”日”上机题数据表的概念 在VisualFoxPro中,一张二维表对应一个数据表,称为表文件,它是扩展名为.dbf的文件数据表的分类

*数据库表:包含在数据库中的表

*自由表:不包含在任何数据库中而独立存在的表

自由表可以添加在数据库中而成为数据库表,数据库表也可以从数据库中移出而成为自由表。2.2.1创建数据表结构

2.2创建数据表1)数据库的概念把有关系的表存放在同一数据库中,确定它们的关联关系,数据库中的数据才能被更充分的利用。数据库是一个逻辑上的概念和手段,通过一组系统文件将相互联系的数据表及其相关的数据库对象进行统一组织和管理。数据库实际是一个扩展名为dbc的文件,与之相关的还会自动建立一个扩展名为dct的数据库备注(memo)文件和一个扩展名为dcx的数据库索引文件。1.创建数据库2)建立数据库的三种方法:在项目管理器中建立数据库通过“新建”对话框建立数据库使用命令建立数据库CREATEDATABASE[数据库文件名|?]建立数据库需注意的几点:如果指定的数据库已经存在,可能覆盖已经存在的数据库。

setsafetyon(默认值),出现警告对话框请用户确认;

setsafetyoff则直接覆盖同名数据库。命令方式建立的数据库不显示数据库设计器,而另两种方式建立的数据库会立即打开数据库设计器。数据表的构成表名(文件名)数据表的结构(字段名、字段类型、字段宽度、索引)数据表的记录字段类型和宽度

C、Y、N、F、B、I、D、T、L、M、G字段名:字段名就是关系的属性名或表的列名。数据表中字段名的命名规则如下:自由表字段名最长10个字符数据库表的字段名最长为128个字符必须以字母或汉字开头、后跟字母、汉字、数字和下划线字段名中不能包含空格2.创建数据表1)设计表结构编号名称启用日期价格部门主要设备备注商标016-1车床03/05/9062044.6121.T.memogen016-2车床01/15/9227132.7321.T.memogen037-2磨床07/21/90241292.1222.T.memogen038-1钻床10/12/895275.0023.F.memogen100-1微机08/12/978810.0012.T.memogen101-1复印机06/01/9210305.0112.F.memogen210-1轿车05/08/95151000.0011.F.memogen表结构实例:设备清单表(P33)字段名类型宽度小数位数编号字符型5名称字符型6启用日期日期型8价格数值型92部门字符型2主要设备逻辑型1备注备注型4商标通用型4设备表的结构(SB.DBF)创建方法:(启动表设计器后创建) 2)利用表设计器创建表结构(1)

使用命令的方法

格式:CREATE[<表文件名>|[.dbf]] 例:建立数据表SB.DBF时可使用命令:

CREATE[盘符\路径\]SB(2)

在项目管理器中创建

在项目管理器中选择自由表或数据库表,单击“新建”按钮,打开自由表或数据库表的表设计器.表设计器的使用说明(1)数值型数据总最大长度20位,包括小数位(2)有些数据类型的宽度是固定的,不需指定:

双精度数固定8个字节,整数固定4个字节

货币型数固定8个字节,逻辑型固定1个字节

日期型和日期时间型固定8个字节

通用型和备注型固定4个字节(3)NULL值的确定

.NULL.表示是否充许字段值为空值,它与空串和0具有不同的意义,空值就是缺值或该值还没确定,而不是任何意义的数据。关键字段不允许设为空值。空值不是一种数据类型,只是一个值,输入空值时Ctrl+0(4)设计表结构时,不能随便按回车键,否则会退出表结构的设计状态,而应使用光标移动键。索引前:索引文件索引后:(按身高建立升序索引)索引文件示例索引值记录号

1.62 41.63 91.65 51.67 101.7321.75 71.78 81.80 11.80 31.82 6(1)索引的基本概念一个记录号与关键字索引值的列表,不改变表中所存储记录的顺序,只改变VFP系统读取记录的顺序。建立在索引文件中,一个表可建立多个索引,每一索引代表一种处理记录的顺序。分为复合索引和单索引,其对应的索引文件的扩展名分别是.CDX和.IDX;复合索引又分为结构复合索引和非结构复合索引,结构复合索引的索引文件名与表同名,而非结构复合索引需另外起名。索引(2)功能角度VFP系统的索引类型:主索引:指定字段或表达式中不允许出现重复值的索引,确保字段中输入值的唯一性。一个表只能建立一个主索引(自由表没有主索引)候选索引:与主索引类似,索引值的记录唯一的。一个表允许建立多个候选索引。普通索引:允许表中有重复索引值的记录。在一个表中可以加入多个普通索引。唯一索引:允许表中索引值的记录不唯一,但索引文件中不能有相同的索引值,即对于索引值相同的记录,只有记录号最小的记录号才能存于索引文件中。这是为兼容旧版本而保留的一种形式。建立结构复合索引:(3)创建索引表设计器中建立将生成与表同名的索引文件,扩展名为CDX格式:INDEXON

索引表达式TAG索引名[FOR条件表达式]

[ASCENDING│DESCENDING][UNIQUE│CANDIDATE]功能:建立一个结构复合索引,该索引保存在CDX文件中。使用命令建立说明:索引表达式可以是字段名或包含字段名的表达式,但只能是N、C、D、L四种类型。涉及多个字段时,索引排序是按表达式中字段从左到右进行的。一个命令只建立一个索引;ASCENDING:升序;DESCENDING:降序。默认升序。UNIQUE:唯一索引;CANDIDATE:候选索引。默认普通索引。新建立的索引成为逻辑排序的依据,称为当前索引(主控索引),每个表都可以指定一个当前索引,而且只能是一个。结构复合索引文件在打开表时自动打开,只有表关闭时才会关闭;文件中可包括多个索引;当索引文件打开时,在添加、更改或删除记录时自动维护索引.如修改表中内容时索引文件没有打开,则需用reindex重新索引或重新建立索引。例:usesbindexon价格tagjgdescendingindexon部门+str(价格,9,2)tagbmjgindexon-价格/1000000tagjg1candidate生成shebei.cdx文件,其中包含3个索引。设置字段属性(1)格式用于键入格式表达式,从整体格式角度约束,确定字段值在浏览窗口或输入时采用的格式。格式设置对已有记录不做检查。3)设定数据库表的完整性举例:

1、对“编号”字段设置格式属性为:AT2、对“名称”字段设置格式属性为:M钻床,磨床,机床,微机

3、对“价格”字段设置格式属性为:^格式代码含义说明A只允许是字母符号,禁止汉字、空格或标点E以英国日期格式编辑日期型数据L将数值型数据前面的空格位用零添充M以列表的方式为字符型字段预置多个可选项,当输入或修改时用空格进行选择T删除字段中的的前导空格和尾部空格!将字段中的小写字母转换为大写字母^使用科学记数法显示数值型字段的值格式代码列表(2)输入掩码

用于“按位”指定字段的输入格式,限制输入数据的范围,控制输入的正确性,不符合规则的数据不能输入,对已有记录不验证该规则。

掩码含义说明X可输入任何字符9可输入数字和正负号#可输入数字、空格、正负号$在指定位置显示当前的货币符号.用来指定小数点的位置,用来分隔小数点左边的整数部分,通常作为千分位隔点例:1、在“编号”字段的输入掩码文本框中输入“999-9”;

2、将‘$’显示在“价格”字段的前面。(3)标题

显示区的标题文本框用于为浏览窗口、表单或报表中的字段标签键入表达式。例:将“价格”字段的标题文本框中输入设备价格;(4)字段有效性规则文本框用于输入对指定字段数据有效性进行检查的规则,它实际上是一个条件。用条件验证该字段数据合法性。信息文本框用于指定出错提示信息,当该字段输入的数据违反条件时,出错信息将照此显示。信息内容要定界。默认值文本框用于指定字段的默认值。值类型与字段一致例:(设置“启用日期”字段)1、在有效性规则输入启用日期<=date()2、在信息规则中输入“输入日期错误!”3、在默认值中输入date()说明:

光标离开字段时引起字段有效性的检验,如不符合规则,必须加以改正。该规则对已有记录也要验证。(5)字段注释字段注释信息需用双引号定界。当在项目管理器中选择字段时,字段注释信息显示在项目管理器的底部。

设置记录规则(在“表”选项卡中设置)(1)记录验证规则:用于指定记录级有效性检查规则。信息:用于指定出错提示信息。出错提示信息内容必须用西文引号括起。说明:记录级有效性检查规则用来检查同一记录中不同字段之间的逻辑关系。记录验证规则是当记录的值被改变后,记录指针准备离开该记录时被激活的。记录规则设置后对已经存在的记录也要验证。(2)触发器

触发器是一个在插入、删除或更新表中记录时被激活的表达式,用于验证插入、删除或更新的记录是否符合规则。触发器有下面三种:插入触发器:用于指定一个规则,每次向表中插入或追加记录时该规则被触发,据此检查插入的记录是否满足规则。更新触发器:用于指定一个规则,每次更新记录时触发该规则。删除触发器:用于指定一个规则,每次向表中删除记录(打上删除标记)时触发该规则。说明:触发器设置对已经存在的记录不做检查。例如:将删除触发器设置为“RECNO()>10”,表示只有记录号大于10的记录才可以被逻辑删除。(3)长表名和表注释 长表名最多128个字符,它出现在浏览窗口中 表注释出现在项目管理器的底部。表数据的输入时机:

表数据就是表记录,可以在创建表结构时直接输入表的数据;也可以建立完成后追加记录,追加记录前必须用use命令先打开表,然后使用下面方法追加记录。2.2.2输入表数据输入记录的两种方法(1)

使用APPEND命令

格式:APPEND|APPENDBLANK

执行一次APPENDBLANK命令后在表尾添加一条空记录

(2)

使用菜单方法

打开表【显示】-【浏览···】菜单,出现“浏览”窗口(或用brow命令)【显示】-【追加方式】可一次追加多条记录 或【表】-【追加新记录】增加一条空白记录。记录数据输入说明(1)对于日期型字段,只需输入月份、日期、两位年份,不需输入“/”.如setcenturyon,则输入两位或四位年份都可以。两位时56以下认为是’20--’年,以后认为是’19--’年。(2)逻辑型字段输入内容时,只需输入T或F,且不分大小写(3)在输入记录的字段值时,只能输入对字段类型有效的值。如果输入了无效数据,则在屏幕的右上角弹出一个信息框显示出错信息,在更正错误之前,无法将光标移动到其它字段上去。(4)记录输入完毕后,关闭当前窗口(也可按组合键Ctrl+W),保存添加的记录信息到表文件中。若欲放弃对当前记录的编辑修改,可按Esc键。(5)备注型字段和通用型字段有特殊的输入方法。两字段的实际内容保存在一个扩展名为.FPT的文件中,在定义通用型和备注型字段时,字段宽度都只有4个字节,这4个字节只存放一个指针,指向存储实际内容的.FPT的文件中,因此要确保.dbf和.fpt文件永远在一起。备注型数据显示为“Memo”或“memo”,其中“Memo”表示对应的记录的备注字段已经输入了数据,而“memo”表示该字段中没有备注内容。要为某记录的备注字段输入数据或修改其中的内容,可双击该记录的备注字段,进入备注字段的编辑窗口,编辑完后按<Ctrl>+<W>或单击窗口的“关闭”按钮结束并保存输入的新内容;按<ESC>结束并不保存输入的新内容。通用型字段数据显示为Gen或gen,Gen表示该字段有内容,gen表示没有内容。双击字段进入编辑窗口,可通过剪贴板或执行“编辑”—“插入对象”菜单命令来插入图形或其他对象,也可通过Ctrl+X删除内容。保存或放弃方法与备注型数据相同。(6)备注字段和通用型字段数据的输入和修改

表结构的修改范围

表结构修改包括:增加、删除字段,修改字段名、字段类型、字段宽度,建立、修改删除索引。数据库表还可以建立、修改、删除有效性规则等。2.2.3表结构的修改

利用表设计器修改表结构的两种方法首先用use命令打开表,然后命令:MODIFYSTRUCTURE2.3.1VISUALFOXPRO命令结构及常用子句命令的构成:命令动词、语句体(若干个子句)、注释VFP命令格式:

<命令动词>[<功能子句1>][<功能子句2>][...]&&注释部分例:显示命令LIST的格式:

LIST[<范围>][[<FIELDS>]<字段名表达式表>] [FOR<条件>][WHILE<条件>][OFF] [TO<设备名|文件名|内存变量名>]&&注释2.3数据表的维护

1.命令动词

表示要执行的操作,是一个命令中必不可少的部分。2.语句体

语句体由一系列短语(子句)构成,可使用的常用子句如下所示:

(1)FIELDS<字段名表>

用于选定操作的“字段”,<字段名表>中有多个字段时,字段名之间用逗号分隔。例:

usesblistfields名称,部门

&&显示表中“名称”“部门”两列数据(2)FOR<条件>

只对表中满足“条件”的所有记录进行操作。例:

usesb listfor价格>100000

&&显示表中价格大于10万元的

&&所有设备记录(3)WHILE<条件>

对满足条件的记录进行操作。从表中当前正在使用的记录开始向下顺序判断,当遇到第一个不满足条件的记录时,停止命令执行,而不管其后是否还有满足条件的记录。例:listfields名称,部门for价格>100000while主要设备=.t.

当命令中同时有for和while子句时,要优先满足while条件(4)<范围>

表示记录的执行范围。

VFP系统对表中的记录是逐条进行处理的。VFP为每一个打开的表设置了一个内部使用的记录指针,指向正在被操作的记录,该记录称为当前记录。记录指针的作用是标识表的当前记录。 范围可以是以下四种参数之一:

ALL:表示全部记录;

NEXT<n>:表示从当前记录开始的以下n条记录;

RECORD<n>:表示第n号记录;

REST:表示从当前记录到最后一条记录。

(5)TO<设备名|文件名|内存变量名>

表示操作结果的输出去向。3.命令书写格式说明

在书写命令格式时,还用到一些符号,这些符号只是在书写时使用,实际操作时并不输入。这些符号以及它们所表示的意义如下:

<>:表示其中内容为必选项,实际命令中不包括它;

[]:表示其中内容为可选项,即可以省略该子句;

|:表示其两侧项目只能任选一项;

…:表示同类项的多次重复。

4.命令的书写与使用规则每条命令以命令动词开始,以回车键结束,命令中各短语的顺序是任意的。命令动词、短语中的英文单词及函数名均可缩写为前四个字符,大小写可混用。命令动词、语句体及其各短语之间均以空格相隔。一行只能写一个命令,不能将两个命令写在同一行。命令一行写不下时,可以由系统自然换行或在行尾加分号(;),回车强制换行。命令行的长度小于或等于2048个字符。1、表的打开打开:将表从外存调入内存,以便显示或对其操作菜单:【文件】-【打开】(或工具栏上的“打开”按钮)命令:Use<表名>[.dbf]&&打开默认路径下的表说明:USE命令打开一个新表的同时会自动关闭先打开的表2.3.2表的打开与关闭2、表的关闭use

&&关闭当前使用的表closetables&&关闭当前数据库中所有打开的表closetablesall&&关闭所有打开的表closeall&&关闭所有打开的表、程序文件及表单等clearall&&关闭所有的表、程序文件及表单等,清

&&除内存变量1.同时进行数据浏览和修改的操作使用浏览器来浏览和修改数据表,打开浏览器的常用方法有以下几种:首先打开要操作的表-【显示】-【浏览···】。在项目管理器中选择要操作的表,然后单击“浏览”按钮。在命令方式下,首先用USE命令打开要操作的表,然后键入BROWSE命令。BROWSE命令的格式如下:

BROWSE[<范围>][Fields<字段名表>] [For<条件表达式>][<NOAPPEND>][<NOMODIFY>]2.3.3表数据的浏览和修改交互式地对当前表记录进行编辑的命令:

CHANGE|EDIT[<范围>][Fields<字段名表>] [For<条件表达式>][while<条件表达式>]2.数据的选择显示数据的显示也可使用LIST和DISPLAY命令,命令格式如下:

List|Display[<范围>];

[[Fields]<字段名表达式表>];

[For<条件表达式>][WHILE<条件表达式>];

[ToPrinter][ToFile<文件名>][off]

说明:(1)Display命令分屏显示数据,面List命令不分屏显示(2)没有For和While子句时,如省略<范围>子句,则List命令认为是All,而Display命令默认为是当前记录。有For和While子句时,则都默认为All。(3)OFF参数表示不显示记录号1.指定主控索引(1)命令方式格式:SETORDERTO[<数值表达式>|[TAG]索引名];

[ASCENDING|DESCENDING]]2.3.4索引文件的使用主控索引一个表可以建立或打开一个或多个索引,但同一时刻只有一个索引起作用,称为当前索引或主控索引。此时表的逻辑顺序以主控索引的顺序排列。主控索引可随时指定。说明:

数值表达式指出索引列表中第几个索引为主控索引指定主控索引时可以重新指定索引的升、降序

setorderto[0]取消主控索引新打开的结构索引对表的逻辑顺序不起控制作用如果某个索引不再使用了可删除在表设计器中的“索引”选项卡删除,先打开索引文件,然后使用下面命令删除:

DELETETAGALL|<索引名列表>

其中,选择ALL时表示删除打开的所有索引。2.删除索引表的逻辑结构:VFP命令对表中记录逐条处理,一个表刚打开时,指针指向第一条记录,此时第一条记录是当前记录。表第一条记录记为TOP;最后一条记录记为BOTTOM。在TOP之前有一个文件起始标识,称为文件首BOF(BeginningofFile,简称BOF);在BOTTOM后有一个文件结束标识,称为文件尾(EndofFile,简称EOF)。记录指针可以移动,移动指针就是要把指针定位在某个记录上。2.3.5记录指针的移动BeginningofFile(BOF)EndofFile(EOF)TOPBOTTOM1.命令方法移动指针(1)GO命令

绝对定位命令,它将记录指针定位于指定位置。GO命令有如下两种格式:格式1:GO[TO]TOP|BOTTOM

格式2:[GO[TO]]<数值表达式>说明:GOTOP指针定位首记录;GOBOTTOM指针定位末记录;

<数值表达式>的值是正整数,指针定位在指定记录(2)SKIP命令

相对定位命令,是相对于当前记录进行定位的命令。格式:SKIP[<数值表达式>]说明:<数值表达式>的值取正/负整数,表示指针从当前记录开始移动多少个记录:值大于零时指针往文件尾移动;小于零时指针往文件头移动;当<数值表达式>缺省时表示1。LIST、DISPLAY、LOCATE和REPLACE等命令执行后会移动记录指针。

usesblistnext3//如没有到结尾,则为当前记录dispnext3disprest//最后一条记录之后list//最后一条记录之后(1)文件结束测试函数EOF格式:EOF([<数值表达式>]│<表别名>])功能:测试<数值表达式>指定工作区中表文件记录指针是否指向文件结束位置(表文件尾。若指向,函数值为逻辑真(.T.),否则函数值为假(.F.)。3.与指针及表相关的测试函数举例:usesbgobottom?eof()skip ?eof()go4 list?eof()(2)文件起始测试函数BOF格式:BOF([<数值表达式>]│<表别名>])功能:测试<数值表达式>指定的工作区中表文件记录指针是否指向起始位置。若指向,函数值为逻辑真(.T.),否则为假(.F.)。举例:usesbgotop ?eof(),bof()skip-1?eof(),bof()(3)记录号测试函数RECNO格式:RECNO([<数值表达式>│<表别名>])功能:给出<数值表达式>指定的工作区中打开的数据表的当前记录号;无参数时,给出当前表当前记录号;没有打开的表时,返回值为0;如果指针指向文件尾,函数值为表文件中的记录数加1,如果记录指针指向文件首,函数值为最上面记录的记录号举例:usesb ?recno()skip–1 ?recno() gobottom ?recno() skip ?recno()(4)记录数测试函数RECCOUNT格式:RECCOUNT([<数值表达式>|<表别名>])功能:测试<数值表达式>指定的工作区中数据表的记录个数 无参数时,测试当前工作区中数据表中的记录个数;若没有打开的数据表,返回值为0(5)文件测试函数FILE格式:FILE(<字符表达式>)功能:测试<字符表达式>指定的磁盘文件是否存在,若存在,函数值为逻辑真(.T.),否则函数值为假(.F.)。例如:?file(‘f:\sb.dbf’)

&&文件全名,可是任意类型

(6)记录大小测试函数RECSIZE格式:RECSIZE([<数值表达式>|<表别名>])功能:测试<数值表达式>指定的工作区中数据表记录的长度说明:记录长度为各字段长度之和再加1(用于存放删除标记),若设计表结构时定义了充许空值,长度再加1(7)数据类型测试函数TYPE格式:TYPE(<表达式>)功能:测试<表达式>的数据类型。表达式需用定界符定界举例: aa=10 ?type(‘aa’)说明:type函数判断前先做宏替换操作,而vartype直接判断(8)检索测试函数FOUND格式:FOUND()功能:测试执行LOCATE、CONTINUE、SEEK和FIND等定位命令的定位是否成功,定位成功则FOUND()的函数值为.T.,否则为.F.。举例:locatefor名称=“轿车”

?found()(9)记录删除测试函数DELETE格式:DELETED([<表的别名>∣<工作区号>])功能:测试指定的表,或在指定工作区中所打开的表,记录指针所指的当前记录是否有删除标记“*”。若有删除标记,函数值为真,否则为假。若缺省自变量,则测试当前工作区中所打开的表。(10)表文件名测试函数DBF格式:DBF([<表的别名>∣<工作区号>])功能:测试指定的表,或在指定工作区中所打开的表在磁盘的位置。若缺省自变量,则测试当前工作区中所打开的表。举例: ?dbf()

(11)字段数测试函数FCOUNT格式:FCOUNT([<表的别名>∣<工作区号>])功能:测试指定的表,或在指定工作区中所打开的表的字段数,若缺省自变量,则测试当前工作区中所打开的表。1.只复制表文件结构COPYSTRUCTURETO<文件名>[FIELDS<字段名表>]

功能:按指定的字段表复制表结构到一个新文件,若不指定字段表,则复制与当前表相同的结构。说明:复制时被复制的表必须是打开的;当被复制的表有对应的.FTP文件时,对应的.FTP文件会

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论