第一章Visual FoxPro 基础 第一节 数据库基础知识
一.计算机数据管理的发展 1.数据与数据处理:
(1)数据:指记载下来的信息,描述客观事物,并能被计算机所识别的文字、数字、符号、图形、声音的总称。 (2)数据处理:对信息数据进行收集、积累、加工处理工作。 2.计算机数据管理:
(1)人工管理 (2)文件管理 (3)数据库系统 (4)分布式管理系统 (5)面向对象数据库系统 二.数据库系统 1.有关数据库概念:
(1)数据库:是一个储存在计算机内,有一定结构的数据集合;库中不但反映数据个体而且包含数据之间联系,是组织贮存管理数据的仓库。【DB】
(2)数据库应用系统:数据库应用系统是指系统开发人员利用数据库系统资源开发出来的,面向某一类实际应用的应用软件系统。(如:人事管理系统、图书管理系统等)
(3)数据库管理系统:操作系统支持下的一个庞大软件,它本身由一组程序组成,是管理数据库的一组程序【DBMS】 (4)数据库系统:由数据库、数据库管理系统、用户及应用程序组成的整体。【DBS】 2.数据模型
(1)层次模型:用树形结构表示实体及其之间的联系 (2)网状模型:用网状结构表示实体及其之间联系 (3)关系模型:用二维表结构表示实体及其之间的联系
第二节 关系数据库
一.关系术语
1.关系:一个关系就是一个二维表
2.元组:二维表中水平方向称为元组,元组对应存储中的一个具体记录。 3.属性:二维表中垂直方向称为属性,属性对应存储中的一个具体字段。 4.域:属性的取值范围。(性别的取值范围就是“男”或“女”) 5.关键字:属性或属性的组合,其值能够唯一地标识一个元组。
6.外部关键字:如果表中的一个字段不是本表的主关键字或候选关键字,而是另外一个表的主关键字或候选关键字,则这个字段(属性)就被称为外部关键字。 二.关系运算 1.传统的集合运算
(1)并:将另一关系中的记录追加到当前关系中。 (2)差:从一个关系中除去与另一个关系相同的元组。 (3)交:取出两个关系中相同的元组存放到新关系中。 2.专门的关系运算
(1)选择:从关系中找出满足条件元组的操作。 (2)投影:从关系中指定若干属性进行操作。 (3)联接:将两个关系拼接生成一个新的关系。
(4)自然联接:去掉重复属性的等值联接。
第三节 VFP的启动退出及项目管理器
一.启动系统:
开始?程序? Microsoft Visual FoxPro 6.0? Microsoft Visual FoxPro 6.0 二.退出系统:
1.用鼠标左键单击VFP标题栏关闭按钮。 2.文件?退出(ALT+F4)
3.单击主窗口左上方的狐狸图标?关闭 4.命令:QUIT 三.项目的概念:
所谓项目是指文件、数据、文档和VFP对象的集合,用来管理其它文件。(大管家) 四.创建项目:
文件?新建?文件类型(项目) ?新建文件?输入项目名称?保存(.pjx) 五.打开和关闭项目:
1.打开:文件?打开?选择项目?确定 2.关闭:单击项目管理器“关闭”按钮
第二章 数据与数据运算 第一节 常量与变量
一.
常量:常量用以表示一个具体的、不变的值
1.数值型常量(N):也称为常数,用来表示一个数量的大小,由数字、小数点及正负号组成 *科学记数法:123456789 指数表示法:1.23456789*108 科学计数法:1.23456789E8 例: .?123.456 123.456
.?-12.624 -12.624
.?1.234E3,1.234E4 1234 12340
2.货币型常量(Y):用来表示货币值,与数值型常量相似,但要加上一个前置的符号$。 *存储数据时采用4位小数,如果多于4位小数,系统会将多于4位的部分进行四舍五入 例: .?1234.56789 1234.56789
.?$1234.56789 1234.5679
3.字符型常量(C):用定界符括起来的字符串 *常用定界符有\、' '、[ ] *空串:不包含任何字符的字符串。
一般用\、''、[]表示 例: .?[全国计算机等级考试] 全国计算机等级考试 .?'Visual FoxPro 6.0' Visual FoxPro 6.0
4.日期型常量(D):定界符用一对花括号表示,年月日三部分内容用分隔符分离,常用分隔符有/、-、.和空格。 (1)严格格式(默认):{^yyyy-mm-dd}
*花括号内第一个字符为脱字符(^),年月日顺序不能颠倒、不能省略,范围{^0001-01-01}~{^9999-12-31}。 (2)传统日期格式:{mm/dd/yy} *必须将日期检查格式设置为: SET STRICTDATE TO 0
*用此格式输入时,要符合当前日期的显示格式 例: .?{^2006.7.13} 07/13/06
.?{2006.7.13} 出错提示
.SET STRICTDATE TO 0 .?{2006.7.13} / / .?{07/13/2006} 07/13/06
【影响日期格式的设置命令】: ①.设置日期分隔符
格式:SET MARK TO [日期分隔符] 例:设置日期分隔符为“-”
.SET MARK TO \
.?DATE() &&返回当前的系统日期 07-11-06
例:恢复系统的默认分隔符
.SET MARK TO &&不进行任何指定就会使用默认分隔符 .?DATE() 07/13/06
②.设置日期显示格式
格式:SET DATE [TO] YMD|DMY|MDY 【详见P56】
例:设置日期显示格式为\格式 .SET DATE ANSI .?DATE()
06.07.13
例:设置日期显示格式为系统默认 .SET DATE AMERICAN .?DATE() 07/13/06 ③.设置年份位数
格式:SET CENTURY ON|OFF
ON :年份占4位 OFF:年份占2位 例: .SET CENT ON
.?DATE() 07/13/2006 .SET DATE ANSI .?DATE() 2006.07.13 .SET CENT OFF .SET DATE AMER .?DATE() 07/13/06
5.日期时间型常量(T):包括日期和时间两部分内容:{^<日期>,<时间>} 时间部分格式为: hh:mm:ss[a|p] 范围为: 12:00:00AM~11:59:59PM 例: .?DATETIME() &&返回系统日期时间 07/13/06 04:38:16 PM
.?{^2005.4.3,13:32:46} 04/03/05 01:32:46 PM
.SET HOUR TO 24 &&时间显示为24小时制 .?{^2004.7.9,18:32:33} 07/09/04 18:32:33 .?{^2006-8-9,6:2 P} 08/09/06 18:02:00
6.逻辑型常量(L):逻辑型数据只有逻辑真和逻辑假两个值 真: .T. 或 .Y. 假: .F. 或 .N. 注:不分大小写
二. 变量:变量值是能够随时更改的,VFP的变量分为字段变量和内存变量两大类。
1.内存变量:存于内存中的临时数据,变量的类型取决于变量值的类型,变量的类型及值都可随时更改。
*当内存变量与字段变量同名时,系统默认字段变量,如果让内存变量优先于字段变量必须在内存变量名前加\
2.内存变量常用命令 (1)内存变量的赋值
格式1: <内存变量名>=<表达式>
格式2: STORE <表达式> TO <内存变量名表>
功能:计算表达式的值,并将值赋给一个或多个内存变量,格式1只能给一个变量赋值,格式2可以同时给多个变量赋值 例: .A=[方通]
.B=123.64 .C=DATE() .D=.F. .?A,B
方通 123.64 .?C,D
07/13/06 .F. .STORE 10 TO A1,A2,A3 .?A1,A2+2,A3+3 10 12 13
(2)表达式值显示
格式1: ?<表达式表> 换行显示值。 格式2: ??<表达式表> 不换行显示值。 3.内存变量的显示
格式:LIST|DISPLAY MEMORY [LIKE <通配符>] 通配符:
*:代表任意位数的任意字符 ?:代表0~1位任意字符
例: .CLEAR ALL &&清除所有变量 .STORE 10 TO A,A1,A2,ABC,B,B1,B2, BBC
例: 显示所有内存变量 .DISP MEMORY LIKE *
例: 显示变量名以\开头的所有变量 .DISP MEMORY LIKE A*
例: 显示变量名以\开头且长度不超过2位的所有变量 .DISP MEMORY LIKE A?
例: 显示变量名中第2个字符是\的所有变量 .DISP MEMORY LIKE ?B* 4.内存变量的清除
格式1: CLEAR MEMORY | RELEASE ALL 功能:清除所有内存变量
格式2:RELEASE ALL [LIKE <通配符>|EXCEPT <通配符>] 功能:清除指定内存变量
例:清除所有第2个字符为\的变量 .RELEASE ALL LIKE ?B*
注:清除命令不会有显示结果,如想查看结果,可用DISP MEMO LIKE *命令 例:清除所有不是\开头的变量 .RELEASE ALL EXCEPT A* 例:清除变量A2 .RELEASE A2 例:清除所有变量 .RELEASE ALL
第三节 表达式
一.数值表达式
数值表达式:是由算术运算符将数值型数据连接起来的式子,结果仍为数值型。 算术运算符:
+、-、*、/、%(取余)、**或^(乘方) 例: .A=12
.?A+3,A-3,A*3,A/3 15 9 36 4 .?9^2,3^3 81 27 .?7%4 3
二.字符表达式
字符表达式:是由字符运算符将字符型数据连接起来的式子,结果为字符型。 字符连接运算符: +:字符直接连接
-:首字符尾部空格移到新字符的尾部再进行连接 例: .A=\全国计算机\ .B='等级考试'
.C='二级Visual FoxPro' .?A+B+C
全国计算机等级考试二级Visual FoxPro .D=[6.0] .E=[Visual ] .F='FoxPro ' .?E+F+D
Visual FoxPro 6.0
.?E-F+D
VisualFoxPro 6.0 三.日期时间表达式 日期时间运算符:+ - 常用格式:
D+N | N+D | D-N | D-D T+N | N+T | T-N | T-T 例: .?DATE()+365 07/14/07
.?DATE()-3 07/11/06
.?DATE()-{^2006-7-10} 4
注:D+N,D-N,N+D均返回一个新的D型数据,而D-D则返回一个N型数据,N为两个日期之间相差的天数
.A={^2006-7-12,8:53:41} .?A+8
07/12/06 08:53:49 AM .?A-3
07/12/06 08:53:38 AM .?A-{^2006/7/12,08:53} 41
注:T-N,T+N,N+T均返回一个新的T型数据,则T-T则返回一个N型数据,N为两个T型数据之间相差的秒数 四.关系表达式
相同数据进行操作并产生一个逻辑值。 1.比较运算符:
> < >= <= = <>或#或!=(不等号) 例: .A=71
.B=DATE() .C=.F. .?A+3>80 .F. .?A*2>140 .T. .?10^2=2^10 .F. .?10^2>2^10 .F. .?10^2>=100
.T.
.?B-3>{^2006-7-11} .F. .?C>.T. .F. .?C<.T. .T.
.SET COLLATE TO \.?ASC(\ 48 65 97
注:ASC函数将返回括号内第一个C型数据的ASCII码值,而将字符的排序序列设置为MACHINE(机器)时,字符的大小正是按ASCII码值的大小进行比较
.?\ .F. .?\ .F. .?\ .F. .?[BBB]>[ABC] .T. .?[ abc]>[ABC] .F. .?[abc]>[ABC] .T.
.?[ABCDE]=[ABCD] .T.
.?[计算机学校]=[计算机] .T.
.?[李世民]='李'
.T.
.?[Visual]=[] .T.
.?[ABC]=[ABCDE] .F.
.?[ABC]<[ABCDE] .T.
注:在EXACT设置为OFF(系统默认)时,字符串比较的部分完全相同时,\前长后短\为等于,\前短后长\为小于
.?\张飞\关羽\
.T.
.?\明天\后天\ .T. .?[100]>[12] .F.
2.字符串包含运算符$
例: .?\等级\全国计算机等级考试]
.T.
.?[FOX]$\ .F.
.?\ .T. .?[]$[方通] .F.
.?[张三丰]$[张三] .F.
3.字符串精确比较运算符 == 例: .?[ABCD]=[ABC] .T.
.?[ABCD]==[ABC]
.F.
.?[ABCD]==[ABCD] .T.
五.逻辑表达式
逻辑表达式是由逻辑运算符将逻辑型数据连接起来的式子,其运算结果为逻辑型。 逻辑运算符:
AND:两端为真才为真,一端为假就为假 OR :一端为真就为真,两端为假才为假 NOT:对后面的逻辑型数据起相反作用 例: .?[张飞]>[关羽] AND 2^10>10^2 .T.
.?[今天]>[明天] AND 7+5>=15 .F.
.?'一'<'二' AND DATE()>{^2006.7.1} .F.
.?[10]>[12] AND [100]>[12] .F.
.?!7+8>15 OR [计算机]=[电脑]
.T.
.?!(7+8>=15 OR [计算机]=[电脑])
.F.
*逻辑运算符运算顺序: NOT?AND?OR *运算符的优先级:
算术(字符|日期时间)?关系?逻辑
一.数值函数
1.绝对值函数 ABS(N) 例: .A=78.625
.?ABS(A),ABS(-A) 78.625 78.625
2.符号函数 SIGN(N) 负-1 零0 正1 例: .?SIGN(A),SIGN(A-80),SIGN(0) 1 -1 0 3.平方根函数 SQRT(N) 例: .?SQRT(SQRT(SQRT(81))) 1.73
.?SQRT(81)=81^(1/2) .T.
4.圆周率函数 PI( ) 例: .?PI() 3.14 5.求整数函数
格式1: INT(N) 功能:返回N的整数部分 例: .?INT(A),INT(-A) 78 -78
.?INT(A)=A .F. .?INT(78)=78 .T.
.B=1234 .?INT(B/100) 12
格式2: CEILING(N)
第四节 常用函数
功能:返回大于或等于N的最小整数 例: .?CEILING(A),CEIL(-A) 79 -78 格式3: FLOOR(N)
功能:返回小于或等于N的最大整数 例: .?FLOOR(A),FLOO(-A) 78 -79 6.四舍五入函数 ROUND(N,保留小数位) 例: .?ROUND(A,4) 78.6250 .?ROUND(A,3) 78.625
.?ROUND(A,2) 78.63 .?ROUND(A,1) 78.6 .?ROUND(A,0) 79
.?ROUND(A,-1) 80
.?ROUND(A,-2) 100
.?ROUND(A,-3)
0
注:当保留位数为正数时,结果为保留到小数点后的指定位数;当保留位数为零时,结果将保留到整数位(个位);当保留位数为负数时,则保留到小数点前 7.求余函数 MOD(N1,N2) 例: .?MOD(7,4),7%4
3 3
.?MOD(8,6),MOD(6,8) 2 6 .?MOD(8,-3),-8%3 -1 1
注:余数判断方法
设:|N1|%|N2|的结果为A 1.N1与N2均为正,则余数为A 2.N1与N2均为负,则余数为-A
3.N1与N2一正一负,则余数为|N2|-A的结果再添加N2的正负号
8.求最大值函数
MAX(表达式1,表达式2,…表达式N) 9.求最小值函数
MIN(表达式1,表达式2,?表达式N) 例: .A=2^16
.B=65535 .C=65537
.?MAX(A,B,C),MIN(A,B,C) 65537 65535
.?MAX([今天],[明天],[后天]) 明天
.?MIN(\
100 二.字符函数
1.求字符串长度函数 LEN(C)
功能:以数值型数据返回括号内字符型数据的长度 例: .A=[十一国庆节] .B=[Visual FoxPro 6.0] .?LEN(A),LEN(B),LEN(A)+LEN(B) 10 17 27 .?LEN(A+B),LEN(A-B) 27 27 .?LEN(A)-LEN(B) -7
2.大小写字母转换函数
大写字母转小写字母格式:LOWER(C) 小写字母转大写字母格式:UPPER(C) 例: .B=[ABCabc123计算机]
.?UPPER(B) ABCABC123计算机 .?LOWER(B)
abcabc123计算机
3.产生空格函数SPACE(N)
功能:返回由N个空格组成的字符串 例: .C=[Visual]
.D=[FoxPro 6.0] .?C+SPACE(2)+D Visual FoxPro 6.0
4.删除字符首尾空格函数 删除尾部空格函数格式TRIM(C) 删除首部空格函数格式LTRIM(C) 删除首尾空格函数格式ALLTRIM(C) 例: .CC=[ FoxPro ] .?[Visual]+CC+[6.0] Visual FoxPro 6.0 .?[Visual]+TRIM(CC)+[6.0] Visual FoxPro6.0
.?[Visual]+LTRIM(CC)+[6.0] VisualFoxPro 6.0
.?[Visual]+ALLTRIM(CC)+[6.0] VisualFoxPro6.0 .?LEN(CC),LEN(ALLT(CC)) 8 6 5.取子串函数
左取截取格式:LEFT(C,N)
功能:从括号内C型数据的最左端起,截取N位长度的子字符串 例: .?LEFT(A,4) 十一 .?LEFT(A,8) 十一国庆
.?LEFT(A,20)+[快到了] 十一国庆节快到了 右取截取格式:RIGHT(C,N)
功能:从括号内C型数据的最右端起,截取N位长度的子字符串 例: .B=[Computer]
.?LEFT(B,3),RIGHT(B,3) Com ter .?RIGHT(A,6) 国庆节
.?LEFT(RIGHT(A,6),4) 国庆
.?RIGHT(LEFT(A,8),4) 国庆
指定截取格式:SUBSTR(C,N1[,N2])
功能:从括号内C型数据的N1位起,截取N2位长度的子字符串,如果N2缺省,则一直截取到字符串结束 例: .?SUBSTR(A,5,4)
国庆
.?SUBSTR(B,2,3) omp
注:由于一个汉字是两位宽度,所以通常在截中文字符串时,起始位置多为奇数,截取长度多为偶数 6.计算子串出现次数OCCURS(C1,C2) 功能:计算C1在C2中出现的次数 例: .C=[This is a book!] .?OCCU('is',C) 2
.?OCCU(\ 1 2 .?OCCU(\ 3 1
.?OCCU(\ 0 1
注:如果C1不是C2的子字符串,则返回值为0 7.求子串位置函数 格式1:AT(C1,C2[,N])
格式2:ATC(C1,C2[,N]) (不区分大小写)
注:N表示C1在C2中的第几次出现,N的默认值为1。 例: .?AT([Th],C) 1 .?AT([IS],C) 0
.?AT([is],C),AT('is',C,2) 3 6 .?ATC([IS],C,2) 6 .?AT([ooo],C) 0
注:当C1不是C2的子字符串时,返回0 8.子字符串替换函数STUFF(C1,N1,N2,C2)
功能:用C2替换C1从N1位起N2位长度的原有字符串,如果N2为0则为插入效果,如果C2为空串则为删除效果 例: .?STUFF(A,5,4,[是个]) 十一是个节
.?STUFF(A,5,0,[是我国的]) 十一是我国的国庆节 .?STUFF(A,5,4,\
十一节
.C=[Visual FoxPro] .?C,STUFF(C,7,1,\
Visual FoxPro VisualFoxPro 注:此函数可以用来删除字符中部的空格 9.字符替换函数CHRTRAN(C1,C2,C3)
功能:当C1中一个或多个与C2中某个字符相同时,就用C3中相对应的(与C2相同位置)替换这些字符。【C2字符多于C3字符则多出删除;C3字符多于C2字符则多出部分忽略】 例: .B=[我想我是海] .C=[COMPUTER]
.?CHRT(B,[我海],[你湖]) 你想你是湖
.?CHRT(C,[OMPUTER],[omputer]) Computer
.?CHRT([学习计算机],[计算机],[电脑]) 学习电脑
10.字符串匹配函数LIKE(C1,C2) 注:【C1中可以使用通配符?和*】 例: .?LIKE(\节\
.T.
.?LIKE(\国庆*\ .T. .?LIKE(\一*\ .T.
.?LIKE([十一国庆节],A) .T.
三.日期和时间函数 1.系统日期和系统时间函数 取系统日期格式: DATE() D 取系统时间格式: TIME() C 取系统日期时间格式:DATETIME() T 2.求年份、月份和天数函数 年份格式:YEAR(D|T) N 月份格式:MONTH(D|T) N 天数格式:DAY(D|T) N 例: .?YEAR(DATE())
2006
.?YEAR(DATE())+3
2009
.?MONTH(DATE()+30) 8 .?DAY(DATE()) 15
3.时、分、秒函数
时格式:HOUR(T) N 分格式:MINUTE(T) N 秒格式:SEC(T) N 例: .A={^2006-4-3,7:8:29 PM}
.?HOUR(A),MINUTE(A),SEC(A) 19 8 29
四.数据类型转换函数
1.数值转换成字符串函数STR(N[,长度][,小数位]) 【长度默认为10位,小数位默认为0位】 例: .?[张飞今年]+18+[岁!] 出错提示
.?[张飞今年]+STR(18)+[岁!] 张飞今年 18岁! .?[张飞今年]+STR(18,2)+[岁!] 张飞今年18岁!
例:显示\年XX月DD日\的日期格式
.YY=YEAR(DATE()) .MM=MONTH(DATE()) .DD=DAY(DATE())
.?[今天是:]+STR(YY,4)+[年]+ALLTRIM( STR(MM))+\月\日] 今天是:2006年7月15日
.XM=[张三丰] .GZ=2345.67
.?XM+[的工资为:]+STR(GZ,4)+[元]
张三丰的工资为:2346元
.?XM+[的工资为:]+STR(GZ,3)+[元]
张三丰的工资为:***元
.?XM+[的工资为:]+STR(GZ,7,2)+\元\ 张三丰的工资为:2345.67元 2.字符串转换成数值函数VAL(C) 例: .?VAL('123')+123
246
3.字符串转换成日期或日期时间函数 字符串转换成日期格式: CTOD(C) 字符串转换成日期时间函数: CTOT(C)
注:括号内应为日期或日期时间格式的字符串,并有对应的日期或日期时间存在,否则将转换为没有数据的空日期或空日期时间;另外,使用命令时,SET STRICTDATE的设置不能为2 4.日期或日期时间转换成字符串函数 日期转换字符串函数: DTOC(D[,1]) 日期时间转换字符串函数:TTOC(T[,1|2]) 例:显示\年XX月XX日\的日期格式 .RQ=DTOC(DATE(),1)
.?[今天是:]+LEFT(RQ,4)+[年]+SUBS(R Q,5,2)+[月]+RIGHT(RQ,2)+[日]
今天是:2006年07月16日
.?[现在是:]+TTOC(DATET()) 现在是:07/16/06 02:49:42 PM .?[现在是:]+TTOC(DATET(),2) 现在是:02:50:05 PM 5.宏替换函数 格式:&<字符型变量>
【替换出字符型变量的值,&和它后面所跟的变量之间不能有空格。即去引号】 例: .A=[B] .B=12
.?B,A,&A 12 B 12
.A=[12] .?&A+3,&A.2+3,&A..2+3 15 125 15.2
注:宏替换函数后面的第一个\是宏替换结束的标志 .AA=[_SCREEN.BACKCOLOR=RGB(255,0,0)] .BB=[_SCREEN.BACKCOLOR=RGB(255,255,255)] .&AA
屏幕变为红色 .&BB
屏幕变回白色 五.测试函数 1.值域测试函数
格式:BETWEEN(表达式1,表达式2,表达式3) 判断表达式1是否介于表达式2与表达式3之间 例: .A=1024
.?BETW(A,10^2,2^10) .T.
.?BETW([一],[二],[三]) .F.
.?BETW(DATE(),{^2006.4.3},{^2006-7-19}) .T.
.?BETW(15,NULL,19) .NULL.
2.空值(NULL)测试函数 格式:ISNULL(表达式)
【判断表达式结果是否为NULL值】 例: .A=NULL .B=[NULL]
.?ISNULL(A),ISNULL(B) .T. .F. 3.\空\值测试函数 格式:EMPTY(表达式)
数据类型 N、Y、F、I C L D、T 例: .A=12
.B=0 .C=[] .D=[ ] .E=[FoxPro] .D1=.T. .E1=.F. .F=DATE() .G=CTOD([])
.?EMPTY(A),EMPTY(B) .F. .T.
.?EMPTY(C),EMPTY(D),EMPTY(E)
.T. .T. .F. .?EMPTY(D1),EMPTY(E1) .F. .T.
.?EMPTY(F),EMPTY(G) .F. .T.
4.数据类型测试函数
0 空串、空格 .F. CTOD('')、CTOT('') \空\值 格式:VARTYPE(表达式[,逻辑表达式])
【逻辑表达式为.T.时,函数的返回值为表达式的原始值】
数据类型 数值、浮点、整型 字符型、备注型 逻辑型 日期型 日期时间型 货币型 NULL值 例: .A=12
.B=[12]
.?VART(A),VART(B) N C .A=NULL .B=NULL
.?VART(A),VART(A,.T.) X N
.?VART(B),VART(B,.T.) X C .CLEAR ALL .A=NULL
.?VART(A),VART(A,.T.) X L
第三章 Visual FoxPro自由表及其数据库的操作
第一节 自由表的基本操作
一、定义表结构
1.命令格式: CREATE <表名> 2.菜单/工具栏法:
文件?新建?表?新建文件?输入表名?保存?……?确定
作业:创建表文件人事管理(RSGL.DBF)并输入10条以上的数据,表文件的结构要求如下: 1 编号 BH C 4 2 姓名 XM C 6 3 性别 XB C 3 4 出生日期 CS D NULL 5 婚否 HF L NULL 6 基本工资 JB N 7,2
返回值 N C L D T Y X 7 奖金 JJ I(整型) 二、记录的输入
1.在创建表文件完成后单击\是\命令按钮(针对新表) 2.追加命令(针对旧表) 命令:APPEND [BLANK] 3.插入命令
命令:INSERT [BEFORE] [BLANK] 三、自由表的使用 1.表的打开 格式:USE <表名>
注:刚创建的表文件自动处于打开状态,在当前工作区打开一个新的表文件的同时会自动关闭原有的表文件 NOUPDATE:只读方式打开
EXCLUSIVE:以独占方式打开(默认) SHARED:以共享方式打开 2.表的关闭 命令:USE
注:退出VFP时,所有打开表会自动关闭 四、记录的定位 1.绝对定位
格式: GO
格式: SKIP [N]
注:以当前记录为准,使记录向下(N为正)、向上(N为负)移动若干条,N的默认值为1 例: .USE DJKS &&打开表文件DJKS
.?RECNO() &&以数值型数据返回当前的记录号 1
注:刚打开的表文件,记录指针指向首记录
.GO 78+1 .?RECNO() 79 .SKIP .?RECNO() 80 .SKIP –3 .?RECNO() 77
.GO BOTTOM &&将记录指针指向尾记录 .?RECNO()
.?性别,结论 男 优秀 十、排序
格式:SORT TO <新表文件名> ON <字段1>[/A] [/D] [/C]?[范围][条件][字段名表] 【排序又称分类。A升序 D降序 C不区分大小写字母】
例:将DJKS表中的信息按笔试成绩值降序,笔试相同按上机成绩降序保存在文件PX1.DBF中 .USE DJKS
.SORT TO PX1 ON 笔试/D,上机/D FIELDS 考号,姓名,笔试,上机
例:将DJKS表中的信息按结论升序,结论相同按性别升序保存在文件PX2.DBF中 .SORT TO PX2 ON 结论,性别 .USE PX1 .BROWSE .USE PX2 .BROWSE
第二节 Visual FoxPro数据库及数据库表的基本操作
一、建立数据库
格式:CREATE DATABASE <数据库文件名> 二、打开数据库
格式:OPEN DATA <数据库文件名> 三、修改数据库
格式:MODI DATA [数据库文件名] 四、关闭数据库
格式:CLOSE DATA [ALL]
注:有ALL选项为同时关闭所有数据库 五、删除数据库
格式:DELE DATA <数据库文件名> [DELETETABLES] [RECYCLE] 【DELETETABLES:删除数据库 RECYCLE:删除后存入回收站】 例:创建订货管理.DBC数据库 .CREA DATA 订货管理 例:打开数据库订货管理 .OPEN DATA 订货管理 例:修改数据库订货管理 .MODIFY DATA 订货管理 例:关闭数据库 .CLOSE DATA
例:删除数据库订货管理 .DELETE DATA 订货管理
注:要删除一个数据库,则该文件必需处于关闭状态 六、数据库表的建立
*在打开数据库的情况下,建立的表文件才可成为数据库表,否则为自由表。 命令: CREATE <表名> 【字段有效性】
规则(字段有效性规则):逻辑表达式
信息(违背字段有效性时的提示信息):字符串表达式 默认值(字段默认值):则以字段类型确定 【显示】
格式(必须以@开头)
格式符 @! @J @I @^ @Z @L 输入掩码:
格式符 X 9 # * . A 标题:指定字段在显示时的标题
作业:创建数据库\人事管理.DBC\并在库中创建数据库表\表结构要求略,其它要求如下: 1.各字段均设置相应的\标题\显示
2.设置\字段的显示\格式\为全部大写(@!),\输入掩码\为:\ 3.设置\字段的显示\格式\为居中(@I)
4.设置\字段的有效性规则为:\男女]\信息为:\性别只能输入男或女]\默认为:\男]\
5.设置\字段的有效性规则为:\信息为:\出生年份必需在1970-1988之间!]\ 6.设置\字段的有效性规则为:\信息为:\基本工资不能小于0!]\默认为:\ 7.设置\字段的有效性规则为:\信息为:\奖金不能小于0!]\默认为:\七、将自由表添加至数据库
格式:ADD TABLE <表名>|? [NAME 长表名] *一个表只属于一个数据库
允许输入任何字符 允许输入数字和正负号 允许输入数字、空格和正负号 在数值左边显示星号 指定小数点位置 只允许为字母 功 能 全部为大写 字符居右 字符居中 采用科学计数法(N) 如果为零保持为空(N) 数字前导零(N) 功 能 八、从数据库中移出表
格式:
REMOVE TABLE <表名> [DELETE] [RECYCLE]
【DELETE:从磁盘中删除 RECYCLE:移入回收站,而不是删除】 *一个数据库表从数据库移出之后则变成一个自由表
例:创建数据库订货管理.DBC,并将表文件仓库,职工,订购单,供应商添加到数据库中,再将这四个数据库表从数据库中移去 .MODI DATA 订货管理 .ADD TABLE 仓库 .ADD TABLE 职工 .ADD TABLE 订购单 .ADD TABLE 供应商 .REMOVE TABLE 仓库 .REMOVE TABLE 职工 .REMOVE TABLE 订购单 .REMOVE TABLE 供应商 九、表文件的索引 1.索引文件的类型
(1)主索引:在指定字段或表式中不允许出现重复值,一个表只能有一个主索引,只能适用于数据库表。 (2)候选索引:在指定字段或表式中不允许出现重复值,一个表可以有多个候选索引。 (3)唯一索引:把指定字段值重复的记录排除在索引文件之外。 (4)普通索引:允许指定字段值重复。 2.用命令建立索引文件
格式INDEX ON <索引表达式> TAG <索引名> [条件] [ASCE|DESC] [UNIQ] [CAND] 【ASCE:升序 DESC:降序 UNIQ:表示唯一索引 CAND:候选索引】 3.表设计器中建立索引
先打开表设计?选中索引字段?选择索引(无、升、降)?选择“索引”选项卡?输入索引名(索引文件名)、选择索引类型(主索引、候选索引、唯一索引、普通索引)、表达式(索引表达式)、筛选(条件) 4.设置当前索引
格式:SET ORDER TO [TAG] <索引名> [ASCE|DESC]
*不管索引是按升序还是按降序建立,当使用ASCE 或DESC选项时可重新指定升序或降序 5.删除索引
命令格式:DELE TAG
例:为DJKS.DBF表,按笔试字段创建升序索引,索引名为BSH,按上机字段创建降序索引,索引名为SHJ,按结论字段创建升序唯一索引,索引名为JL,按笔试+上机创建降序索引,索引名为ZF(总分) .USE DJKS
.INDEX ON 笔试 TAG BSH .INDEX ON 上机 TAG SHJ DESC .INDEX ON 结论 TAG JL UNIQUE
.INDEX ON 笔试+上机 TAG ZF DESC 例:设置BSH索引为当前索引 .SET ORDER TO BSH .BROWSE
例:恢复记录的物理顺序 .SET ORDER TO .BROWSE 例:删除索引BSH .DELETE TAG BSH 例:删除所有索引 .DELETE TAG ALL 十、参照完整性 1.建立表之间联系
*必须在父表中建立主索引,在子表中建立普通索引,然后通过父表中的主索引与子表普通索引建立两表的联系 打开数据库设计器?设置表文件的索引?用鼠拖动建立关系 2.删除表之间联系
打开数据库设计器?选定关系?用\键删除 3.设置参照性约束
打开数据库设计器?数据库?编辑参照完整性 *先要清理数据库(物理删除带逻辑删除标记的记录)
作业:创建数据库订货管理.DBC,并将表文件仓库,职工,订购单,供应商添加于数据库中;为仓库表创建仓库号主索引,职工表创建职工号主索引和仓库号普通索引,为订购单表创建订购单号主索引和职工号,供应商号普通索引,为供应商表创建供应商号主索引.所有索引的索引名与表达式均相同,且都为升序.通过相关的索引为各个表建立永久联系(按索引名相同的原则),并生成完整性约束:更新规则为级联,删除规则为限制,插入规则为忽略. 十一、多表同时使用 1.工作区的选择
格式:SELECT <工作区号>|<表名>
*工作区号最小为1,最大为32767,默认为1。 在表打开的情况下方可使用表名
SELECT 0:表示尚未使用的工作区中编号最小的工作区号 *用USE指定工作区(USE <表名> IN <工作区号>) 2.不同工作区表的使用
格式:表名.字段名 例: .USE 职工
.USE YISHENG IN 0 .USE CHUFANG IN 0
.?职工号,职工.职工号,YISHENG.职工号,CHUFANG.职工号 E1 E1 1001 1002