二合计算机二级visual foxpro_第1页
二合计算机二级visual foxpro_第2页
二合计算机二级visual foxpro_第3页
二合计算机二级visual foxpro_第4页
二合计算机二级visual foxpro_第5页
已阅读5页,还剩386页未读 继续免费阅读

下载本文档

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

文档简介

数据库FoxPro应用基础

主讲教师:胡自权第一章数据库系统基础知识一、数据库的基本概念1、数据库(DB)

数据库管理系统(DBMS)

数据库系统(DBS)数据库(DB:DataBase)

——就是以文件形式存储在介质上的相关数据的集合。数据库管理系统(DBMS:DatabaseManagementSystem)

——是数据描述语言、编译程序和数据管理子程序组成,实现对数据的定义、管理和维护,接受和完成用户访问数据库的各种请求的系统软件。它是用户管理和使用数据库的工具。数据库系统(DBS:DatabaseSystem)

——是由硬件系统、软件系统和负责管理、维护数据库系统的数据库管理员(DBA:DatabaseAdministrator)三部分组成的一个复杂的计算机系统。二、数据模型数据模型是指对数据的格式和存放规律的描述。学号姓名0101王小平0102张强0103刘雨学生信息表1.实体间的联系①一对一联系:如果对于实体集A中的每一个实体,实体集B中至多有一个实体与之联系,反之亦然,则称实体集A与实体集B具有一对一联系。(一对一联系)学号课程0101数学0102计算机0101生物学生选课表②一对多联系:如果对于实体集A中的每一个实体,实体集B中有n(n≥0)个实体与之联系,反之,对于实体集B中的每一个实体,实体集A中至多有一个实体与之联系,则称实体集A与实体集B具有一对多联系。(一对多联系)01010102数学计算机生物学号课程学号教师0101王小波0102刘阳0101刘阳学生选课表③多对多联系:如果对于实体集A中的每一个实体,实体集B中有n(n≥0)个实体与之联系,反之,对于实体集B中的每一个实体,实体集A中也有m(m≥0)个实体与之联系,则称实体集A与实体集B具有多对多联系。(多对多联系)01010102刘阳王小波学号教师例:如果一个班只能有一个班长,而且一个班长不能同时担任其它班的班长,班级和班长两个实体之间的关系属于()(A)一对一联系 (B)一对二联系(C)多对多联系 (D)一对多联系答案:A2.常用数据模型层次模型(HierarchicalModel)网状模型(NetworkModel)关系模型(RelationalModel)数据模型VisualFoxPro是一个采用关系模型的数据库管理系统。概念关系

——一个关系就是一张二维表,它有一个关系名。记录

——二维表中的一行叫一个元组(不包括表头),又叫记录(Record)。字段

——二维表中的一列叫一个属性,每个属性有一个属性名,属性又叫字段(Field)。三、关系数据库的操作1.选择(Select)运算:从关系中找出满足给定条件的记录形成一个新的关系。姓名数学计算机王小平8390张强6581刘雨7289数学≥70姓名数学计算机王小平8390刘雨7289Listfor

数学>=702.投影(Project)运算:从关系中选出若干字段组成一个新的关系。姓名数学计算机王小平8390张强6581刘雨7289姓名数学王小平83张强65刘雨72姓名、数学Listfields姓名,数学3.连接(Join)运算:从两个关系中各选出若干字段来组成一个新的关系。姓名数学计算机王小平8390张强6581刘雨7289姓名数学王小平83张强65刘雨72姓名计算机王小平90张强81刘雨89姓名、数学、计算机Usecj1Usecj2in2JoinwithBtocjfields姓名,数学,b.计算机CJ1.DBFCJ2.DBFCJ.DBF例:在命令“LISTRESTFOR姓名=‘李一’WHILE学号=‘9908’FIELDS学号,姓名”中不是选择操作的短语是()(A)REST (B)FOR姓名='李一'(C)WHILE学号='9908‘ (D)FIELDS学号,姓名.答案:D第三章VisualFoxPro基础§3.1数据类型

数据类型是数据的基本属性,不同的数据类型有不同的存储方式和运算规则。

VFP的基本数据类型:数值型(N)、字符型(C)、逻辑型(L)、日期型(D)、备注型(M)。

其它数据类型:整型(I)、浮点型(F)、双精度型(B)、货币型(Y)、日期时间型(T)、通用型(G)等。§3.2变量和常量一、常量

常量是指在命令操作或程序运行的过程中其值始终保持不变的量。1.数值型常量(N)表示方法:①日常计数法,如:225,3.14,-0.03,.003。②科学计数法,格式:尾数E阶数如:0.32e2表示32,-0.32e+2表示-32,0.32e-2表示0.0032。数据宽度:数值的数字个数(包括.和±)。2.字符型常量(C,字符串)表示方法:用定界符""或''或[]括起来的一串字符。例:"abc",'abc',[abc]"中国","123","英语abc"数据宽度:字符串中字符的个数(不包括定界符)。表示字符串的定界符必须成对使用。思考1:"abc'是一个字符串吗?答:不是!当",',[,]作为字符串的内容而不是定界符时,可用不相同的其他定界符来表示字符串。思考3:如何表示字符串,我叫"金三顺"?答:[我叫"金三顺"]字符串中的英文字母区分大小写,英文字母的大小写形式不同,表示的字符串也不相同。思考2:字符串"ABC"与"abc"是否相同?答:不相同!3.逻辑型常量(L)逻辑型常量只有两种值,逻辑“真”和逻辑“假”。表示方法:逻辑“真”——.T.(.t.)或.Y.(.y.)逻辑“假”——.F.(.f.)或.N.(.n.)数据宽度:固定为1。4.日期型常量(D)日期的格式:美国格式——mm/dd/yy(默认)欧洲格式——dd/mm/yy中国格式——yy/mm/dd(日期的年月日必须使用分隔符“/”、“-”或“.”分隔开。)数据宽度:固定为8。改变日期格式的命令:setdateto[ymd/mdy/dmy]表示方法:用函数CTOD()表示日期:CTOD("MM/DD/YY")例:1998年3月12日表示为:ctod("3/12/98")用{}表示日期:{MM/DD/YY}例:1998年3月12日表示为:{^3/12/98}思考:若使用命令setdatetoymd将日期格式设置为中国式,则上述日期如何表示?答:ctod("98/3/12")或{^98/3/12}。日期的使用格式应该与当前系统的日期格式保持一致。5.备注型(Memo),简称M型

它是用来存放记录中较大的文本,以弥补C型数据不能超过254个字符的缺陷。其在数据库结构中宽度固定为4个字符,用于存放指向具体数据的指针。姓名数学计算机备注王小平8390Memo张强6581memo刘雨7289Memo表文件(.DBF)王小平的备注…刘雨的备注……备注文件(.FPT)二、变量变量:指在命令操作或程序运行过程中其值可以改变的量。1.字段变量(N、C、D、L、M、G型等)

表中的每一个字段都是一个字段变量,字段变量名长度不超过10个字符。只有一个表被打开后,系统才会建立该表的字段变量,没打开的表不建立字段变量。字段变量的数据类型是在设计表文件结构的时候确定的,它的值随着当前记录的变化而变化。姓名数学计算机王小平8390张强6581刘雨7289CJ.DBF例:分析下列操作的结果。Usecj?姓名Skip?姓名答:第一次显示的姓名为:王小平,第二次显示的姓名为:张强。记录指针记录指针2.内存变量(N、C、D、L、G型)

内存变量是内存中用于存放数据的临时工作单元,与数据库和表文件独立。

内存变量的数据类型由它存放的数据的数据类型决定,当内存变量存放的数据的数据类型发生变化时,内存变量的数据类型随之改变。例:x=10&&变量x的数据类型为数值型,其值是10。

x=“计算机”&&变量x的数据类型为字符型,其值是“计算机”。3.系统变量——以下划线开头,它是全局变量(Public)变量是按名访问的,如果当前表中存在与内存变量同名的字段变量,在访问内存变量时,必须在变量名前加上M.或M->,否则系统将优先访问同名的字段变量。姓名数学计算机王小平8390张强6581刘雨7289CJ.DBFusecj姓名="ABC"?姓名&&显示:王小平?M->姓名&&显示:ABC三、内存变量1.内存变量赋值内存变量赋值既可定义一个新的内存变量,也可改变已有内存变量的值或数据类型。格式一:STORE<表达式>TO<内存变量表>命令功能:计算<表达式>的值并赋值给各个内存变量。说明:<内存变量表>:用逗号分隔的多个内存变量组成一个内存变量表。格式二:<内存变量>=<表达式>功能:计算<表达式>的值并赋值给指定的一个内存变量。使用赋值命令给变量赋值,若变量不存在,则先建立该变量然后赋值;若变量已存在则直接赋值。每个变量只能存储一个值,重新赋值后新的值将取代变量原来的值。2.

内存变量的显示输出①显示内存变量格式:DISPLAY/LISTMEMORY[LIKE<通配符>] [TOPRINTER/TOFILE<文件名>]功能:显示内存变量的当前内容,可选择打印或者存入文本文件中。说明:①通配符“?”表示该位置上可以是任意的0-1个字符。②通配符“*”表示该位置上可以是任意的多个(包括0)字符。例:显示内存变量的值a=0a1="abc"a12=.f.listmemorylikea?listmemorylikea*APubN0(0.00000000)A1PubC"abc"显示结果:APubN0(0.00000000)A1PubC"abc"A12PubL.F.显示结果:②?/??输出命令格式:?/??[<表达式1>[AT<列号1>]][,<表达式2>[AT<列号2>],……]功能:计算表达式的值,并在屏幕上指定列显示输出表达式的值。?:

先回车换行,再计算并输出表达式的值;??:在屏幕上当前位置,计算并直接输出表达式的值;说明:AT<列号>:指定表达式值从指定列开始显示输出。

例:显示表达式的值

?"*"?"*","*"??"!"??"!"at4,"!"at5***!!!VFP工作区窗口思考:命令?"123"at2,"abc"at0的输出结果是什么?答:abc23③格式输出命令@<行,列>Say<表达式>[Picture<格式符>][Function<功能符>]功能:在指定位置输入或输出数据。例:格式输出

@0,1say"*"@1,0say"***"@2,1say"*"*****VFP工作区窗口3.

内存变量的保存当退出vfp系统后,用户所建立的内存变量将不会存在,但可以使用命令将用户所建立的有用的内存变量保存到内存变量文件中。格式:SAVETO<内存变量文件名>[ALLLIKE<通配符>/ALLEXCEPT<通配符>]功能:将当前内存中的内存变量存放到内存变量文件中。ALLLIKE<通配符>:只保存符合通配符条件的所有变量;ALLEXCEPT<通配符>:只保存不符合通配符条件的所有变量。4.内存变量的恢复命令格式:RESTOREFROM<内存变量文件名>[ADDITIVE]功能:重新使用已保存在内存变量文件中的内存变量ADDITIVE:省略此项,清除内存所有变量后再恢复文件中变量的信息;加选此项,将变量文件中的变量信息追加到内存现有变量信息中。5.内存变量的删除格式一:CLEARMEMORY格式二:RELEASE<内存变量名表>格式三:RELEASEALL[LIKE/EXCEPT<通配符>]功能:格式1删除内存中所有内存变量;格式2删除内存变量名表中指定的内存变量;格式3利用通配符选择删除内存变量。四、内存变量的分类及作用域:x=“a”do程序2?x程序1x=“b”程序2x=“a”?xx=“b”程序2程序1x=“a”?yy=“b”程序1程序2y为程序2定义的局部变量,程序2运行结束后会释放该变量,不能在程序1中引用。x=“a”?xx=“b”程序2程序1x为程序1定义的局部变量,能作用到下级程序中,程序2可以引用、修改变量x的值,值为“b”。1.局部变量——在程序中用赋值命令store、=、input、accept、wait以及数组命令dimension等定义的变量,它可以在下层各级被调用的子程序中引用,局部变量在定义它的程序运行结束后被系统释放。2.全局变量——它可以在整个应用程序的运行过程中存在,并能被应用程序的不同过程和函数调用。格式:Public<内存变量名表>说明:①Public定义的全局变量的初始值为.F.。②在命令窗口中定义的变量都是全局变量。x=“a”?ypublicyy=“b”程序2程序1y为程序2定义的全局变量,它在整个程序中存在,可以在程序1中引用,值为“b”。3.本地变量——只能在定义它的程序中使用,不能在下层被调用的子程序中使用。格式:Local<内存变量名表>说明:Local定义的本地变量的初始值为.F.localxx=“a”?x?xx=“b”?x程序2程序1x为程序2定义的局部变量,值为“b”。x为程序1定义的本地变量,值为“a”。试图调用程序1定义的本地变量x,禁止访问。4.变量屏蔽——在当前程序中隐藏上层调用程序的同名内存变量,变量屏蔽后,可以在程序中定义新的同名的局部变量。格式:Private<内存变量名表>x=“a”?x程序1privatexx=“b”程序2程序2屏蔽了上级程序中的变量x,并重新定义了一个同名变量x,值为“b”。x为程序1定义的局部变量,值为“a”。*MAIN.PRGPUBLICX,YSETPROCTOKKX=20Y=50DOA1?X,YSETPROCTORETU*过程文件KK.PRGPROCA1PRIVATEXX=30LOCALYDOA2?X,YRETU***************PROCA2X=”KKK”Y=”MMM”RETU例1:第一次显示X,Y的值是()(A)KKKMMM(B)KKK.F.(C)KKK50(D)30.F.答案:B例2:第二次显示X,Y的值是()(A)2050(B)20MMM(C)3050(D)30MMM答案:B1.数组的定义格式:DIMENSION|DECLARE<数组名1>(<数值表达式1>[,<数值表达式2>])[,<数组名2>(<数值表达式3>[,<数值表达式4>])……]说明:①数组必须先定义后使用,定义数组是向系统申请数组元素在内存中的存储空间。②下标可以是常数、变量或表达式,下标值的最小值为1。如:A(5),A(i+3)。③定义数组时,数组中元素的初始值为.F.。五、数组(1)一维数组的建立①定义一个名字为a,具有5个数组元素的一维数组。

dimensiona(5)②一维数组a(5)的逻辑结构图:③一维数组a(5)的存储结构图:a(1)a(2)a(3)a(4)a(5)a(1)a(2)a(3)a(4)a(5)2.数组的建立(2)二维数组的建立①定义一个名字为b,具有6个数组元素(2行3列)的二维数组。

dimensionb(2,3)②二维数组b(2,3)的逻辑结构图:③二维数组b(2,3)的存储结构图:b(1,1)b(1,2)b(1,3)b(2,1)b(2,2)b(2,3)b(1,1)b(1,2)b(1,3)b(2,1)b(2,2)b(2,3)在VFP中,可以用一维数组的格式来访问二维数组,其对应关系如下:b(1,1)=b(1)b(1,2)=b(2)……b(2,3)=b(6)3.数组的赋值(1)定义数组时赋值

Dimensiona(5),b(2,3)数组a,b中所有元素被初始化为.F.,数组的存储状态如下所示:.F..F..F..F..F.a(1)a(2)a(3)a(4)a(5)数组ab(1,1)b(1,2)b(1,3)数组b.F..F..F..F..F..F.b(2,1)b(2,2)b(2,3)(2)用store或=命令给数组赋值。①给数组的所有元素赋值◆用store命令给数组a,b赋值store0toa,b◆用=命令给数组a,b赋值a=0b=0数组的存储状态如下所示:00000a(1)a(2)a(3)a(4)a(5)数组ab(1,1)b(1,2)b(1,3)数组b000000b(2,1)b(2,2)b(2,3)②给数组的个别元素赋值◆用store命令给数组a,b的元素赋值store0toa(2),a(3),b(1,2),b(2,1),b(2,3)◆用=命令给数组a,b的元素赋值a(2)=0a(3)=0b(1,2)=0b(2,1)=0b(2,3)=0数组的存储状态如下所示:.F.00.F..F.a(1)a(2)a(3)a(4)a(5)数组ab(1,1)b(1,2)b(1,3)数组b.F.0.F.0.F.0b(2,1)b(2,2)b(2,3)§3.3表达式一、运算符运算符的优先级:高括号()

算术运算符^或***、/、%+、-

字符运算符+、-

关系运算符>、>=、<、<=、!=或#或<>、=、==

、$。低逻辑运算符.not.或!.and..or.二、表达式

1.数值表达式例:x=6/3 &&x的值为:2。

2.字符表达式例:C1=“中国”+“人民”&&C1的值为:“中国人民”。

C2=“中国”-“人民”&&C2的值为:“中国人民”。3.日期表达式4.关系表达式①若为数值型或日期型数据则按数值的大小进行比较②若为字符型数据则按字符的ASCII码的大小进行比较(1)“=”的用法“=”可以用于数值、字符、日期和逻辑型等数据的相等比较。对于字符型数据的比较,当比较方式为“模糊比较”(默认方式,可用命令setexactoff设置模糊比较)时,如果“=”左边的字符串左包含右边的字符串,则结果为.T.。

例:setexactoff

?“ABC”=“AB”&&结果:.T.?“AB”=“ABC”&&结果:.F.对于字符型数据的比较,当比较方式为“精确比较”(可用命令setexacton设置精确比较)时,只有“=”两边的字符串完全相等时,结果为.T.。

例:setexacton?“ABC”=“AB”&&结果:.F.75T王刚82F吴红梅90T王小平成绩性别姓名CJ.DBF例:字符串的比较SetexactoffListfor姓名=“王”&&结果:查找姓“王”的学生。SetexactonListfor姓名=“王”&&结果:查找姓名是“王”学生。(2)“==”的用法“==”为严格比较,只有“==”两边的字符串完全相等时,结果为.T.。“==”只能用于字符型数据的比较。

例:?“ABC”==“AB”&&结果:.F.

?“ABC”==“ABC”&&结果:.T.(3)“$”的用法“$”为包含运算,当“$”左边的字符串完全包含在右边的字符串中时,结果为.T.。

例:?“ABC”$“AB”&&结果:.F.

?“AB”$“ABC”&&结果:.T.?“AB”$“DABC”&&结果:.T.思考:x=3与?x=3有什么区别?区别:①x=3是赋值命令,即对变量x赋值3。②?x=3是显示命令,即显示变量x与3的比较结果。5.逻辑表达式ABA.AND.BA.OR.B.NOT.A.T..T..T..T..F..T..F..F..T..F..F..T..F..T..T..F..F..F..F..T.75T张雨82F吴红梅90T王小平成绩性别姓名CJ.DBF例:条件的表示①显示性别为“男”并且“成绩>=80”的记录。Listfor性别=.t..and.成绩>=80②显示性别为“男”或者“成绩>=80”的记录。Listfor性别=.t..or.成绩>=80§3.4常用函数函数:是数据运算的特殊形式,用于实现某些特定的运算,它能实现用命令无法完成的许多功能。函数的三大特征:函数名、参数、函数值。函数调用的格式:函数名(参数1,参数2,…)1.取绝对值函数ABS(N)功能:返回N的绝对值。例:?ABS(-3) &&结果:32.取整函数INT(N)功能:返回N的整数部分。例:?INT(-3.8) &&结果:-3一、数值函数(N表示数值型表达式)例:读程序fori=0to10ifint(i/3)=i/3?iendifendfor&&结果:0369。3.求平方根函数SQRT(N)功能:返回N的平方根。例:?SQRT(9) &&结果:34.四舍五入函数ROUND(N1,N2)功能:对N1进行四舍五入,N2指明四舍五入的位置。例:?

round(3.14159,3) &&结果为:3.142?

round(3.14159,-1) &&结果为:05.指数函数EXP(N)功能:计算以e为底的指数幂,e=2.71828……5.指数函数LOG(N)功能:计算以e为底的自然对数。6.求余数函数MOD(N1,N2)功能:返回两个数值相除后的余数,N1是被除数,N2是除数。

例:?mod(10,3) &&结果为:1?mod(-10,-3) &&结果为:-1?mod(10,-3) &&结果为:-2?mod(-10,3) &&结果为:2说明:同号商正、异号商负;余数的符号与N2的符号相同;余数的绝对值比N2的绝对值小。例:读程序fori=0to10ifmod(i,3)=0?iendifendfor&&结果:0369。7.求最大值函数MAX(N1,…,Nm)功能:返回多个N1,…,Nm中数据值最大的数据。例:?max(-10,3.14,8/2) &&结果为:48.求最小值函数MIN(N1,…,Nm)功能:返回多个N1,…,Nm中数据值最小的数据。例:?min(-10,3.14,8/2) &&结果为:-101.求字符串的长度LEN(C)功能:返回C中字符的个数。例:?len(“英语ABC”) &&显示结果为:72.删除字符串尾部空格TRIM(C)

或RTRIM(C)功能:去掉C尾部(右端)的所有空格。例:x=trim(“英语ABC”) &&x的值为:“英语ABC”3删除字符串首部空格LTRIM(C)功能:去掉C首部(左端)的所有空格。例:x=ltrim(“英语ABC”) &&x的值为:“英语ABC”二、字符函数(C表示字符型表达式)4.删除字符串首尾部空格

ALLTRIM(C)功能:去掉C首尾部的所有空格。例:x=alltrim(“英语ABC”) &&x的值为:“英语ABC”5.产生空格SPACE(N)功能:返回由多个空格组成的字符串。例:x=ltrim(“英语ABC”) &&x的值为:“英语ABC”6.取子字符串SUBSTR(C,N1,N2)

功能:取C中子串,从N1开始截取N2个字符。说明:N1为取子串的起始位置,大于C的长度,则出错;N2为取子串的长度,省略N2则取到串的尾部。例:x=substr(“computer”,4,3) &&x的值为:“put”computer123456787.取左子串LEFT(C,N)功能:从C左端(首部)取长度为N的子串。例:x=left(“computer”,4) &&x的值为:“comp”8.取右子串RIGHT(C,N)功能:从C右端(尾部)取长度为N的子串。例:x=right(“computer”,4) &&x的值为:“uter”9.子串位置

AT(C1,C2,N)功能:查找C1右在C2中第N次出现的起始位置,缺省N为1。例:x=at(“put”,“computer”) &&x的值为:410.产生空格SPACE(N)功能:返回N个空格组成的字符串。例:x=space(3) &&x的值为:“”11.字符重复REPLICATE(C,N)功能:返回C复制N次后形成的字符串。例:x=replicate(“ab”,2) &&x的值为:“abab”12.替换函数

STUFF(C1,N1,N2,C2)功能:从C1的第N1个字符开始,用C2替换C1中N2个字符。例:x=stuff(“computer”,4,3,“123”)&&x的值为:“com123er”13.宏替换函数&C型内存变量[.]功能:代换一个字符型内存变量的内容,说明:“.”用于终止C型内存变量的名字。例1:x=1

a=“x”?&a &&显示结果为:

1思考:执行命令?&x的结果是什么?例2:x=1

a=“x”?&a1 &&错误:找不到变量a1例3:x=1

a=“x”?&a.1 &&错误:找不到变量x1例4:x=1x1=2

a=“x”?&a.1 &&显示结果为:2例5:盘上有表文件a1.dbf、a2.dbf、a3.dbf,请编写程序随机显示表文件的记录。***P1.PRG***Usea1list***P.PRG***Accept“请输入表文件名:”tofnUse&fnlist三、转换函数1.大写转换为小写LOWER(字符串)功能:将字符串中所有的大写字母转换为小写字母。例:lower(“CoMpuTer”) &&结果为:“computer”2.小写转换为大写UPPER(字符串)功能:将字符串中所有的小写字母转换为大写字母。例:upper(“CoMpuTer”) &&结果为:“COMPUTER”3.字符串转日期CTOD(日期字符串)功能:将字符型数据转换成日期型数据。例:?ctod(“5/21/98”)+4 &&显示结果为日期:5/25/984.日期转字符串DTOC(日期表达式)功能:将日期型数据转换成字符型数据。例:dt={^5/21/98}?dtoc(dt)+“时间” &&显示结果为:5/25/98时间5.数值转换成字符串函数

STR(数值表达式[,<长度>[,<小数位数>]])功能:将数值表达式的值转换成字符串,转换时数值表达式根据需要进行四舍五入处理。说明:①长度指转换后数据的总长度,其中包括符号位、小数点及小数点后的小数位数。 ②小数位数表示转换后的数据小数点后的小数位数,若省略,则表示忽略数据中的小数位,并四舍五入。

例:str(123.56,5,1) &&结果为:“123.6”str(-123.56) &&结果为:“-124”6.字符串转换成数值函数

VAL(字符表达式)功能:将由数字符号组成的字符表达式转换成相应的数值型数据。说明:如果字符串中出现非数字字符,则只转换前面部分;若字符串的首字符为非数字字符(可以是空格),则返回数值0。例:?

val(“-3.14”) &&结果为:-3.14?

val(“-3a14”) &&结果为:-3四、日期时间类1.TIME()功能:返回系统当前时间,函数值为字符型。2.DATE()

功能:返回系统当前日期,函数值为日期型。

3.YEAR(日期型表达式)功能:从日期表达式中返回4位的年份值。

例:?year(date())+2 &&显示结果为:20094.MONTH(日期型表达式)功能:从日期表达式中返回月份值。5.DAY(日期型表达式)功能:从日期表达式中返回当月中的天数值。五、测试函数1.测试文件开始BOF()功能:测试指定表文件中的记录指针是否指向文件首,是返回逻辑真,否则返回逻辑假。2.测试文件末尾EOF()功能:测试指定表文件中的记录指针是否指向文件尾,是返回逻辑真,否则返回逻辑假。3.测试记录号RECNO()功能:返回表文件的当前记录号。4.测试记录数RECCOUNT()功能:返回当前表文件的记录数。5.查询测试FOUND()功能:测试SEEK、FIND或LOCATE是否找到符合条件的记录。6、编程控制函数

INKEY([数值表达式])

功能:返回一整数值,是用户击键所对应的ASCII码。此函数规定运行至此等待。

Note:击键时间是以秒记,若超时未击键,则返回0值。

①若数值表达式为0,表示无限等待直到击键为止。

②若数值表达式省略,则不等待。7、用在全屏幕操作命令后的函数

READKEY()

功能:返回的范围0—36,256—292,它的结果:认可:^+W,不认可:^+Q或^+Esc

Note:若ESC对应的码为12,打开未动;若动了在此基础上加256,则为268。8、选择函数

IIF(<逻辑表达式>,<表达式1>,<表达式2>)

例:x=3

?iif(x>=0,sqrt(x),”不能开方”)

相当于下面这段程序:Ifx>=0

?sqrt(x)

else

?”不能开方”

endif名称格式功能示例小写转大写函数UPPER(C)将小写字母转换成大写?UPPER(”AbcC”)结果:ABCC大写转小写函数LOWER(C)将大写字母转换成小写?LOWER(“AbcC”)结果:abcd字符转日期函数CTOD(C)将日期格式的字串转换成日期?CTOD(“01/25/05”)结果:01/25/05日期转字符函数DTOC(D)将日期转换成字串?DTOC({^2005/08/27})结果:08/27/05数值转字符函数STR(N1,[N2[,N3]])将N1转换成字串.其中N2为字串长,N3为字串小数位?STR(3.14159,6,4)结果:3.1416?STR(45.76,3)结果:

46六、转换函数(D表示日期型表达式)字符转数值函数VAL(C)将字符转换成数值遇第一个非数字字符时停止默认保留两位小数?VAL(“-3+2”)结果:-3?VAL(“3E2”)结果:3.00?VAL(“AB”)结果:0字符转ASCⅡ码值函数ASC(C)返回C首字母的ASCⅡ码值?ASC(“ABC”)结果:65ASCⅡ码转字符函数CHR(N)返回ASCⅡ码N对应的ASCⅡ字符?CHR(97)结果:a名称格式功能示例系统日期函数DATE()返回系统当前日期日期型:MM/DD/YY?DATE()结果:08/28/05系统时间函数TIME()返回系统当前时间字符型:HH:MM:SS?TIME()结果:12:15:30日函数DAY(D)返回D的”日”的数值?DAY(DATE())结果:28星期函数DOW/CDOW(D)返回D的日号所对应的数值型:星期号/字符型:星期名?DOW/CDOW(DATE())结果:1/SUNDAY月份函数MONTH(D)返回D的月份值?MONTH(DATE())结果:8年份函数YEAR(D)返回D的4位年份值?YEAR(DATE())结果:2005四、日期函数名称格式功能示例测试记录号RECNO([工作区号/别名])测试指定工作区中表的当前记录记录号USEXS?RECNO()结果:1?BOF()结果:.F.SKIP-1?RECNO()结果:1?BOF()结果:.T.GOBOTTON?EOF()结果:.F.SKIP?EOF()结果:.T.文件起始测试BOF([工作区号/别名])测试记录指针是否指向表开始文件结束测试EOF([工作区号/别名])测试记录指针是否指向表结束删除标志测试DELETED([工作区号/别名])测试记录是否被逻辑删除GO5DELE?DELE()结果:.T.查询测试FOUND([工作区号/别名])测试查询中是否找到

LOCATEFOR姓名=”李”?FOUND()文件测试FILE(文件名)测试文件是否存在?FILE(“XS.DBF)记录个数测试RECCOUND([工作区号/别名])测试表中记录个数USEXS?RECCOUND()结果:10七、测试函数(L表示型表达式)工作区测试SELECT([0/1/别名])返回当前工作区号/未使用工作区的最大编号/别名工作区号USEXS?SELECT()

结果:1数据类型测试TYPE(表达式)表达式必须放在定界符(‘’,“”或[])中测试表达式数据类型:C、N、D、L、M、G、U(未定义)?TYPE(“12”)结果:N?TYPE(“’AB’”)

结果:C条件测试IIF(L,表达式1,表达式2)测试L的值,为真返回表达式1的值,为假返回表达式2的值?IIF(2>5,50,100)结果:100测试按键的ASCⅡ码值INKEY()测试所按键的ASCⅡ码值?INKEY(1)等待1秒后,显按键对应的ASCⅡ码值.如按A,其值为65测试屏幕行坐标ROW()返回光标行坐标值?ROW()测试屏幕列坐标COL()返回光标列坐标值?COL()第四章表的基本操作VisualFoxPro命令一、命令格式:FoxPro的命令结构一般由命令动词和命令子句构成。<命令动词>

[范围][FIELDS<字段名表>] [FOR/WHILE<条件>][OFF][TO<短语>]例:LISTALLFIELDS学号,姓名,成绩FOR成绩>=60OFFTOPRINT命令动词:表示命令执行的操作,是命令中必不可少的部分。命令子句:表明操作的对象及对操作的某些限制性的说明,使用时可以根据需要选择一个或多个短语,也可以一个都不选。二、常用子句1.

范围:表示记录的执行范围,可以是下面几项其中之一。ALL:表示全部记录;NEXT<n>:表示从当前记录开始的以下n条记录(包含当前记录);RECORD<n>:表示第n号记录;REST:表示从当前记录开始到最后一条记录(包含当前记录)。12345EOF例:记录范围的使用记录指针Listall&&显示记录1,2,3,4,5Listrecord2&&显示记录2记录指针Listnext3&&显示记录2,3,4Listrest&&显示记录4,5记录指针记录指针2.FIELDS<字段名表>:用于指定操作的字段,多个字段使用逗号分隔。3.FOR<条件>:①若指定范围,则在指定范围内对满足条件的记录进行操作。②若没有指定范围,则对所有满足条件的记录进行操作。4.WHILE<条件>:①若指定范围,则从该范围内的第一条记录开始,直到第一个不满足条件的记录为止。②若没有指定范围,则从当前记录开始,直到第一个不满足条件的记录为止。序号12345EOF例:条件的使用记录指针Listfor序号>2&&显示记录3,4,5Listnext3for序号>2&&显示记录3,4记录指针Listwhile序号<5&&显示记录2,3,4Listwhile序号>2&&无记录记录指针记录指针5.TO<设备名|文件名|内存变量名>:表示操作结果的去向。6.OFF:控制记录号的显示,选择OFF时不显示记录号。三、命令的书写与使用规则1.

每条命令以命令动词开始,以回车键结束。通常情况下,命令中各子句的顺序可以是任意的。2.

命令动词、子句及函数名基本上可缩写为前四个字符,大小写可混用。3.

命令动词与子句、子句与子句之间必须用空格隔开。4.

一行只能写一个命令,不能将两个命令写在同一行。5.

命令在一行写不下时,在行尾加分号(;)回车强制换行。§4.1表的创建一、建立表结构1.用表结构设计器建立表文件格式:CREATE[盘符][路径]<表文件名>说明:不以A~J这10个单字母作为表文件名。2.用命令直接建立表文件格式:CREATETABLE[盘符][路径]<表文件名> (<字段名><类型>[(宽度[,小数位数])]……)说明:新建的表在未使用编号最小的工作区中自动打开。例:在C盘的fox文件夹中建立表文件cj.dbf姓名数学计算机备注王小平8390Memo张强6581memo刘雨7289MemoCJ.DBFcreatetablec:\fox\cj(姓名

c(6),数学

n(5,2),计算机

n(5,2),备注

m)二、表数据的输入

①菜单:[显示]→[浏览]

②命令:EDIT、CHANGE、BROWSE§4.2表的打开与关闭一、表的打开格式:USE[盘符][路径]<表文件名>[EXCLUSIVE/SHARED]说明:①打开一个表时,将先关闭已打开的表,然后再打开指定的表。②打开表文件时,若该表有备注型或通用型字段,则同名的备注文件(.fpt)同时被打开。对打开的表,表中有一个记录指针,指针所指的记录称“当前记录”。对刚打开的表,记录指针指向第一个记录。

例:打开C盘的fox文件夹中的表文件cj.dbfusec:\fox\cj8972刘雨8165张强9083王小平计算机数学姓名学生成绩表(CJ.DBF)记录指针◆设置系统的默认路径格式:SETDEFAULTTO

[盘符][路径]说明:在VFP中,创建或打开一个文件时,如果不指定盘符和路径,则在默认路径中创建或打开这个文件。例:打开C盘的fox文件夹中的表文件cj1.dbf和cj2.dbfsetdefaulttoc:\foxusecj1usecj2usec:\fox\cj1usec:\fox\cj2二、表的关闭①USE功能:关闭当前表文件。

②CLOSEDATABASE功能:关闭数据库、表、索引等文件。③CLOSEALL功能:关闭所有文件,但不释放内存变量。④CLEARALL功能:关闭所有文件,并释放内存变量。⑤QUIT功能:退出VFP。在结构化程序设计中,如果有对表或者数据库的操作,需要在主程序的末尾使用CLOSEALL或者CLEARALL关闭打开的表或者数据库。USE<表>……CLOSEALL主程序§4.3表结构的显示和修改一、显示表结构1.连续显示表结构格式:LISTSTRUCTURE2.分屏显示表结构格式:DISPLAYSTRUCTURE二、修改表结构格式:MODIFYSTRUCTURE例:表结构的显示USECJLISTSTRUCTURE字段 字段名类型 宽度 小数位1 姓名 字符型6 0

数学 数值型2 0

计算机数值型2 0**总计** 118165张强9083王小平计算机数学姓名CJ.DBF)§4.4表的记录定位和显示一、绝对定位

【格式1】GO|GOTOTOP|BOTTOM【格式2】[GO|GOTO]<数值表达式>

【功能】将指针定位到指定记录上。【说明】①GO和GOTO可任选一种,作用是等价的。【例】记录指针定位操作例8972刘雨8165张强9083王小平计算机数学姓名CJ.DBF记录指针useusecjgotobottomgoto2gototop记录指针记录指针记录指针二、相对定位【格式】SKIP[<数值表达式>]

【功能】从当前记录开始,向前或者向后移动指针。【说明】①<数值表达式>表示移动记录的个数,缺省时是1。②若为负值表示从当前记录开始向前移动指针。useusecjskip2skipskip-1【例】记录指针定位操作例8972刘雨8165张强9083王小平计算机数学姓名CJ.DBF记录指针记录指针记录指针记录指针三、表的测试函数1.测试记录数【格式】RECCOUNT()【功能】返回当前表文件的记录总数。2.测试当前记录函数【格式】RECNO()【功能】测试当前记录指针指向几号记录,返回一个数值,该数值表示当前记录指针指向的记录号。【说明】表文件中没有记录号为0的记录,表的最大记录号是RECCOUNT()+1。3.测试表文件开始函数【格式】BOF()【功能】测试记录指针是否指向表文件的开始。【说明】记录指针指向第一条记录时,函数BOF()的值为.F.,记录指针指向开始标志时,函数BOF()的值为.T.。4.测试表文件尾函数【格式】EOF()

【功能】测试记录指针是否指向表文件的尾部。【说明】记录指针指向结束标志时,函数EOF()值为.T.,否则为.F.。usecj【例】记录指针定位操作例8972刘雨8165张强9083王小平计算机数学姓名CJ.DBFEOF【例】编程显示表中的记录Dowhile?姓名,数学,计算机Enddo!eof()skip四、记录的显示【格式】LIST/DISPLAY[<范围>][FIELDS<字段名表>][FOR<条件表达式1>][WHILE<条件表达式2>][OFF][TOPRINTER[PROMPT]|TOFILE<文件名>]【功能】连续/分屏显示记录。【说明】①使用OFF选项时,不显示记录号。②TOFILE<文件名>把显示的结果输出到文本文件中。list与display的区别:若范围和条件都省略,LIST显示所有记录,DISPLAY只显示当前记录。【例】记录的显示usecjlist记录指针记录号姓名数学计算机

1王小平8390显示结果:

2张强6581

3刘雨7289记录指针记录指针记录指针记录指针8972刘雨8165张强9083王小平计算机数学姓名CJ.DBFEOF【例】记录的显示usecjdisplay记录号姓名数学计算机

1王小平83902张强6581显示结果:displaynext2记录号姓名数学计算机

2张强6581显示结果:displayallwhile数学>=70displayallfor数学>=70记录号姓名数学计算机

1王小平8390显示结果:记录号姓名数学计算机

1王小平83903刘雨7289显示结果:use五、浏览记录【格式】BROWSE[FIELDS<字段名表>][FOR<条件表达式>]【功能】在浏览窗口中显示记录。删除标记区记录指针§4.5表结构和数据的复制一、复制任何类型的文件【命令】copyfile<文件名1>to<文件名2>【功能】从文件<文件名1>复制得到<文件名2>二、复制表文件【命令】copyto<文件名>[范围][filelds<字段名表>][for<条件>][while<条件>]【功能】将当前表文件选定的部分记录和部分字段复制成一个新表或者其它类型文件。三、复制表文件结构【命令】copystructureto<文件名>[filelds<字段名表>]【功能】将当前表文件的结构复制到一个新表文件中。

结构描述文件结构描述文件是一种特殊的数据库文件,它的结构格式固定,只由FIELD_NAME(C型),FIELD_TYPE(C型),IELD_LEN(N型),FIELD_DEC(N型)组成。其主要目的是:便于在程序中自动实现对库结构的修改。把库文件的结构复制成一个结构描述文件COPYSTRUCTUREEXTENDEDTO<结构描述文件>[FIELDS<字段名表>]把结构描述文件还原成数据库文件的结构CREATE[<数据库文件名>]FROM<结构描述文件>EXTENDED§4.6表数据的修改一、增加记录增加记录是指在表文件尾记录后追加新记录或空白记录或在某两个记录之间插入一个新记录或空白记录。1.追加新记录【格式】APPEND[BLANK]【功能】在表末尾追加一条或多条记录。【说明】省略[BLANK]子句,可以交互方式追加若干条记录或追加空记录;否则,只在表尾添加一条空白记录,以便以后添加数据。2.插入新记录【格式】INSERT[BLANK][BEFORE]【功能】在打开表中插入新记录,该命令可以在打开的表文件中某两个记录之间插入新记录或空白记录。【说明】①INSERTBLANK表示在当前记录之后插入一条空白记录,省略BLANK则以交互方式在当前记录之后插入一条记录。②INSERTBEFOREBLANK表示在当前记录之前插入一条空白记录,省略BLANK则以交互方式在当前记录之前插入一条记录。③若对表文建立了索引,则该命令只能在表尾追加记录。3.成批追加记录【格式】APPENDFROM<文件名>[FIELDS<字段名表>][FOR<条件表达式>]【功能】将指定数据表(称源表,关闭的)中的记录或其他类型文件中的数据追加到当前表(称目标表,打开的)中。【说明】把源表文件中的内容追加到当前表文件尾部。二、记录的删除和恢复据实际情况,对于表中的记录,有些需要去掉,这就用到了vfp提供的记录删除功能。VFP中删除记录是分两步进行的:第一步是逻辑删除,第二步是物理删除。逻辑删除的记录只是对记录加上了一个删除标记,并未从表中真正删除。若要真正删除作了删除标记的记录,还需要进行物理删除。1.记录的逻辑删除【格式】DELETE[<范围>][FOR<条件1>][WHILE<条件2>]【功能】给指定的记录作删除标记。【说明】①省略范围和条件时,仅给当前记录作删除标记。②函数DELETED()可以测试记录是否已经加上删除标记,若函数值为.T.,表示该记录已被逻辑删除,否则,记录未被删除。③一般情况下,逻辑删除的记录可以同其它记录一样参与操作。隐藏/显示逻辑删除的记录【格式】SETDELETEDON/OFF【功能】隐藏或显示已经逻辑删除的记录。【说明】①SETDELETEDON:隐藏已经逻辑删除的记录,隐藏的记录不参加任何操作。②SETDELETEDOFF:显示已经逻辑删除的记录(系统默认为OFF)。2.记录的物理删除(对作了删标的记录)【格式】PACK【功能】真正删除带有删除标记的记录,进行物理删除后,记录不能再恢复。3.记录清除命令【格式】ZAP【功能】物理删除当前表中的所有记录,不管记录是否带有删除标记。【说明】ZAP等效于DELETEALL和PACK两条命令连用。由于通过ZAP命令删除的记录不能恢复,所以要慎用。执行该命令时,系统会出现提示框要求用户确认。4.记录恢复恢复记录是指将作了删除标记的记录再恢复成正常记录。方法与删除记录的方法类似,其命令的使用方法如下。【格式】RECALL[<范围>][FOR<条件1>][WHILE<条件2>]【功能】恢复已作过删除标记的记录。【说明】若不选范围、条件,则只恢复当前记录。二、修改记录修改记录可以在浏览窗口或编辑窗口中以手工方式进行,也可以使用replace命令进行修改。1.编辑修改【格式】EDIT|CHANGE[FIELDS<字段名表>][<范围>][FOR<条件1>][WHILE<条件2>]【功能】在编辑窗口显示并编辑指定的字段。2.浏览修改【格式】BROWSE[FIELDS<字段名表>][<范围>][FOR<条件1>][WHILE<条件2>][FREEZE<字段名>][LOCK<字段数>][VALID<逻辑表达式>[ERROR<字符表达式>]]【功能】打开浏览窗口,显示、添加、删除、修改记录。【说明】FIELDS短语指定显示和编辑的字段,浏览窗口中显示字段的次序与<字段名表>给出的次序相同。3.替换命令【格式】REPLACE[<范围>]<字段名1>WITH<表达式1>[ADDITIVE][,<字段名2>WITH<表达式2>][ADDITIVE]][,…][FOR<条件表达式>][WHILE<条件表达式>]【功能】根据命令中指定的范围和条件,用表达式的值去替换WITH前的字段的值。【说明】①该命令可以实现对多个字段内容的替换,但命令中至少有一个<字段名>WITH<表达式>。②如果不选用范围和条件项,则只替换当前记录。③表达式的值与WITH前给出的字段类型一定要一致。如:姓名是字符型的WITH后表达式一定是字符型的数据。§4.7表的过滤一、记录过滤【格式】SETFILTERTO[<条件>]【功能】过滤出符合指定条件的记录。【说明】缺省条件时,表示取消过滤。一、字段过滤1.设置字段过滤【格式】SETFIELDSTO[<字段名表>|ALL]【功能】为当前表设置字段过滤器。2.控制字段过滤【格式】SETFIELDSON|OFF【功能】为ON时字段过滤有效,为OFF时无效。【说明】每次使用SETFIELDSTO设置字段过滤时都自动为ON。§4.8数组和表之间的数据交换一、将记录传送到数组或内存变量【格式】SCATTER[FIELDS<字段名表>][MEMO]TO<数组名>[BLANK]|TOMEMVAR[BLANK]【功能】将当前记录的字段值按序传送给数组或者一组内存变量。8972刘雨8165张强9083王小平计算机数学姓名CJ.DBFUsecjDimensiona(3)Goto2Scatterfields姓名,计算机toa.F..F..F.数组aa(1)a(2)a(3)张强81二、将数组或内存变量的数据传送到记录【格式】GATHERFROM<数组名>|MEMVAR[FIELDS<字段名表>][MEMO]【功能】将数组或者内存变量的值按序传送给当前记录。8972刘雨8165张强9083王小平计算机数学姓名CJ.DBFUsecjDimensiona(3)a(1)=“张强”a(2)=81Goto3Gatherfromafields姓名,计算机.F.81张强数组aa(1)a(2)a(3)张强81三、将记录传送到数组或内存变量【格式】COPYTOARRAY<数组名>[FIELDS<字段名表>][范围][FOR<条件>][WHILE<条件>]

【功能】将当前选定的数据传送给数组。四、将数组或内存变量的数据传送到记录【格式】APPENDFROMARRAY<数组名>[FOR<条件>][FIELDS<字段名表>]【功能】将满足条件的数组行数据按记录依次追加到当前表中。第五章查询、统计和多表操作§5.1排序【格式】SORTTO<表文件名>ON<字段名1>[/A|/D][/C][,<字段名2>[/A|/D][/C]...][<范围>][FOR<条件1>][WHILE<条件2>][FIELDS<字段名表>]【功能】对当前选定的表排序,并将排序后的记录输出到新表中。排序就是依据打开的表文件(称原表)中的某些字段值升序或降序重新排列记录,排序后将产生一个新表,其记录按排序字段值的大小(升序/降序)新排列的顺序排列,但原表记录的排列顺序不变。姓名数学计算机王小平7290张强8681刘雨7289CJ.DBF姓名数学计算机王小平7290刘雨7289张强8681CJ1.DBF

温馨提示

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

评论

0/150

提交评论