460 likes | 613 Views
如何学习 FoxPro 数据库语言. DELETE [<scope>] [FOR <expL1>] [WHILE<expL2>] delete all for 姓名 =“ 张三” SORT TO <file> ON <field1> [/A | /D] [/C] [, <field2> [/A | /D] [/C] ...] [ASCENDING | DESCENDING][<scope>] [FOR <expL1>] [WHILE <expL2>][FIELDS <field list>] sort to x_m_1 on 姓名 for 成绩 >=60.
E N D
如何学习FoxPro数据库语言 DELETE [<scope>] [FOR <expL1>] [WHILE<expL2>]delete all for 姓名=“张三” SORT TO <file> ON <field1> [/A | /D] [/C] [, <field2> [/A | /D] [/C] ...] [ASCENDING | DESCENDING][<scope>] [FOR <expL1>] [WHILE <expL2>][FIELDS <field list>]sort to x_m_1 on 姓名 for 成绩>=60 Use d:\wy020115\student Accept “姓名:” to xm Locate for 姓名=xm Do while not eof() display continue enddo use • 首先要掌握语言的基本符号。如英语的26个大小写字母;汉语的汉字;还要掌握一些运算符号,如:+- * / % ^ • 其次要掌握命令、短语、函数、及表达式。如list delete for all ;{98/11/15}-15;left(姓名,2)+‘东东’ 特殊地:5.28 “abcde” .t. {98/12/21} x_y 姓名 k123 • 再次是要掌握符合语法的语句( 单命令)。如: • 最后是按一定结构将若干个句子组合成程序(批命令)。包括:顺序、选择、循环。如:
第三章 常量、变量、函数和表达式 • 常量 • 变量 • 函数 • 表达式
常量:值不变的量 • 数值常量 • 字符串常量 • 日期常量 • 逻辑常量 复习题
一、请指出以下常量的类型 (1)“电脑” (2)128(3).T. (4) “128” (5).n. (6)[this] (7){98.08.18} (8)1.234E+8 二、请指出不合法的字符串常量 (1)“Y/N”(2){[ABCD]} (3)[‘ABCD’] (4)[[AB]CD] (5)[{ABCD}]
变量:值可以改变的量 字段变量:是数据库中已经定义的变量。 内存变量:是独立于数据库文件的临时 存储单元,用来存放数据库 操作过程中或程序运行过程 中所要临时保存的数据。
内存变量的命名规则 内存变量的类型 内存变量的赋值
命名规则:可以以字母、汉字或下划 线开头,可由字母、汉字 数字和下划线组成,最长 不超过10个字符。 例1:Class_2,name,A1,姓名 例2:3AB,CD*, Sec-Class
类型:字符型(C)、数值型(N)、日期 型(D)、逻辑型(L)、屏幕型(D) 注:前四种类型内存变量可以进行各 种运算,屏幕型内存变量不能进 行运算,只能用于保存和恢复屏 幕画面。
命令格式1:STORE <表达式> TO <内存变量表> 命令格式2:<内存变量>=<表达式> 功能:首先计算出表达式的值,再将该值赋给 内存变量。 例如:name=‘张明’ n=3 日期={98.08.10} true=.T. store 20 to n1,n2
函数: • 数值运算函数 • 字符处理函数 • 时间日期函数 • 转换函数
1、求绝对值函数 格式:ABS(<数值表达式>) 功能:求<数值表达式>的绝对值 2、平方根函数 格式:SQRT(<数值表达式>) 功能:求<数值表达式>的平方根 3、取整函数 格式:INT(<数值表达式>) 功能:截去小数部分,保留整数部分
4、四舍五入函数 格式:ROUND(<数值表达式>,n) 功能:根据n的值进行四舍五入 5、求模函数 格式:MOD(<数值表达式1>,<数值表达式2>) 功能:求出表达式1除以表达式2的余数 6、取大值函数 格式:MAX(<表达式1>,<表达式2>[,<表达式3>…]) 功能:各表达式中的最大值
1、求子串函数 格式:SUBSTR(<字符表达式>,<m>[,<n>]) 功能:在字符表达式中,从第m个字符开始截取n个 字符,形成一个新的字符串.函数值为C型. 2、求左子串函数 格式:LEFT(<字符表达式>,<n>) 功能:从字符表达式的左端开始截取n个字符,形 成一个新的字符串.函数值为C型. 3、求字符串长度函数 格式:LEN(<字符表达式>) 功能:求字符表达式中的字符个数.函数值为N型
1、时间函数 格式:TIME( ) 功能:给出当前的系统时间.函数值是C型. 2、日期函数 格式:DATE( ) 功能:给出当前的系统日期.函数值是D型. 3、求年函数 格式:YEAR(<日期表达式>) 功能:求表达式中年的数值.函数值是N型.
1、大写字母转换成小写字母 格式:LOWER(<字符表达式>) 功能:将字符表达式中所有大写字母 换成小写字母. 函数值是C型. 2、小写字母转换成大写字母 格式:UPPER(<字符表达式>) 功能:将字符表达式中所有小写字母. 转换成大写字母. 函数值是C型.
表达式:由运算符和括号将常量、变量和 函数连接起来的有意义 的式子。 表达式的类型:数值表达式 字符表达式 日期表达式 关系表达式 逻辑表达式
计算和显示命令: 格式1:?[<表达式表>] 功能:计算出各个表达式的值,并在下一行 依次显示出来。 格式2:??<表达式表> 功能:计算出各个表达式的值,并从光标当 前位置开始显示出来。 说明:表达式表可包含多个表达式,各个表 达式之间用逗号分隔。
数值表达式:是由数值型常数、变量、函 数和算术运算符等组成的表 达式,结果也是数值型。 算术运算符:P46 例1:? 10 +5*2,(5-3)*2+2^2 例2:? ABS(-12)+10
字符表达式:是由字符型常数、变量、函 数和 字符运算符组成。结果 仍然是字符型。 字符串运算符有两种: + 连接运算符:把两个字符串连接起来, 形成一个新的字符串。 -压缩空格运算符:连接前后两个字符串, 并将前字符串尾部的空格移到合并后的 新字符串尾部。
例1:?“ABC ” +“ DEF” 例2:?“北大”+“方正” 例3:?“ABC ”- “ DEF” 例4:“AB ”- “CD” + “EF” 例5:“AB”- “ CD” - “EF” 例6:“AB ”- “CD”- “EF”+ “ !”
日期表达式:由日期运算符和日期常量、变 量、函数以及数值型数据组成。 结果为日期或数值。 日期运算符: + 加号;用于一个日期与一个整数相加,得 到一个新的日期。 -减号;用于一个日期减去一个整数,得到 一个新的日期;还可用于两个日期相减得 到相差的天数。
例1:?{98.08.12}+3 例2:?{98.08.12}-3 例3:?{99.10.15}-{99.10.10}
关系表达式:由关系运算符将相同类型的 数据连接起来的式子。运算 结果是逻辑值.T.或.F.。 关系运算符:P47 例1:? SQRT(2*8)>=0,{98.08.12}>{99.08.12} 例2:? 5!=3,“EFG”<“KHD”,“大”>“小” 例3:a=.y. b=.n. ?a>b,.t.<.f.
查子串运算符$ 格式:<字符串1>$<字符串2> 功能:在字符串2中查找字符串1,若找到, 值为.T.,否则为.F.。 例: ?‘AB’$‘ABC’, ‘AB’$ ‘DABE’, ‘AB’$ ‘A’ 例: ?‘北大’$‘北大方正’
“=”与“==”在比较字符型数据时的区别 ● “==”只有当两个字符串完全相同时(包括尾 部的空格),结果为.T.,否则为.F.。 运算结果不受SET EXACT ON/OFF的影响。 ● “=” 运算结果受SET EXACT ON/OFF的影 响。
逻辑表达式:由逻辑常数、变量、函数和逻辑运逻辑表达式:由逻辑常数、变量、函数和逻辑运 算符组成的表达式。结果为逻辑值 逻辑运算符:逻辑非、逻辑与、逻辑或
例:STORE .T. TO x,y STORE .F. TO a ?X AND y,x AND a,y OR a ? NOT a,x AND y AND NOT a
运算优先级: 1、括号优先 2、算术运算、字符串运算、日期运算 3、关系运算 4、逻辑运算 例如: ? 2<3.OR.“AB”+ “CD”>“EF”.and.4+2=6
例. 写出命令运行结果: USE E:\ZHAOXUAN\ZYDA 姓名 = ‘李力萍’ ? 姓名 && 显示ZYDA.DBF 的第一条记录的姓名 ?M->姓名 && 显示 李力萍 § 3.3函数 Foxpro 为用户提供了十类函数。各类函数绝大多数都是以函数名 开头,后面紧跟着(),只有&函数除外。 学习函数应注意: 1.函数名 2. 函数格式 3.参数的个数及类型 4. 函数值的类型
3.3.1 数值运算函数 格式: SQRT(<N型表达式>)P26 MOD(<N型式1>,<N型式2>) P27 MAX(<N型式1>,<N型式2>,[<N型式3>……])P27 MIN(<N型式1>,<N型式2>,[<N型式3>……])P28 例1 写出命令运行结果: ? sqrt(4),sqrt(0),sqrt(57.6*14.3) ? SQRT(16),MOD(17,5) ? MAX(1123,456,3322, 64) ? MIN(1123,456,3322, 4)
3.3.2 字符处理函数 格式: SUBS(<C型表达式>/<备注字段>,<起始位置m>[,<长度n>]) P28 功能:在< C型表达式>或数据库当前记录的<备注字段>中从第m个字符开始截取n个字符,形成一个新的字符串。省略n时, 新的字符串从第m个字符开始到最后一个字符. 函数值为C型。 例2 写出命令运行结果: ? SUBS(‘鞍山师范学院’,1,4) ? SUBS(‘鞍山师范学院’,5) 格式:LEN(<C型表达式>/<备注字段>) P30 功能:求出< C型表达式>或数据库当前记录的<备注字段>中字符的个数. 函数值为N型。 例3: ?LEN( ’ASADFG’) ?LEN( ’ASADFG’)+10
3.3.3 时间、日期函数 格式: YEAR(<D型表达式>)P35 功能:求出年的数值, 函数值的形式为:YYYY. 函数值为N型。 例4 写出命令运行结果: ? YEAR({99/12/23}) ? YEAR({99/12/23}+80) ? YEAR({2003/12/23}) 3.3.4转换函数 格式: DTOS(<D型表达式>)P37 功能:将<D型表达式>转换成C型数据, 函数值的形式为:YYYYMMDD. 函数值为C型。 例5: ? ‘这天是:’+DTOS({2003/12/23})
3.3.5测试函数 P39 格式:RECNO([<工作区号>/<别名>]) 功能: 测试数据库文件的当前记录号。函数值为N型。 例6: USE ZYDA ?RECNO() 3.3.6环境函数 格式:ROW() ,COL()P45 功能:返回光标当前行、列的值。 例7 clear ??'k' ?? col(),ROw()
§3.4 表达式 1.表达式: 是用运算符、小括号将常量、变量和函数连接起来的式子。P50 2.按照运算结果的数据类型,表达式可分为: P50 字符表达式、数值表达式、逻辑表达式和日期表达式。 3.按照运算符表达式可分为: 字符表达式、数值表达式、关系表达式、逻辑表达式和日期表达式。 4.注意: 表达式中没有大括号和中括号,一律使用小括号。 3.4.1 计算和显示命令 命令格式1:?[<表达式表>] 命令格式2:??[<表达式表>] 功能:计算并显示各表达式的值。
说明:1、省略任选项,输出一空行。 2、<表达式表>中的各项用逗号分隔。 3、?[<表达式表>]在下一行显示, ??[<表达式表>]从光标当前位置显示。 例1 ?’我在鞍山’ ??’工作’ ?’我在鞍山工作’ • 3.4.2运算符 • 算术运算符 P46 • (1)运算符:+、- (正负号)、^或**、*、/、%(取余数)、+、- • (2)运算优先级: • +、- (正负号) ^或** * 、/ % +、-
高 低 (3)运算对象:N型常量、变量和函数 (4)运算结果类型:N 例2:判断下列输出命令是否正确(√ 、╳)?若正确写出结果。 X=5 STORE 2 TO A,B,C ?27 % X ? 4^2+(4*7-2) %3 ? ’X=’ + 5 ?[-B+SQRT(B^2-4*A*C)]/(2*A) ? 5^2+SQRT(16)
2. 字符串运算符 P46 (1)运算符:+、- (2)运算对象:C型常量、变量和函数 (3)运算结果类型:C (4)功能: 将两个字符串连接,生成一个新的字符串. (5)说明: ①使用减号时,如果减号前面的字符串有空格, 则将前面字符串的空格移到新字符串的最后。 ②使用加号时,不须任何处理,直接连接。
例3:判断下列输出命令是否正确(√ 、╳)? 若正确写出结果。 ?’ab’+’efg’ ? ’ab ’+’efg’ ? ’ab ’-’efg’ ? ’今天是:’+ {2003.03.05} ?LEN( ’ab ’+’efg’) ?LEN( ’ab ’-’efg’) ? ’今天是:’+80
3.日期运算符 P47 (1)运算符:+、- (2)运算对象:D型常量、变量、函数、整数 (3)运算结果类型:D或N (4)功能: 两个日期相加,得到一个新的日期, 两个日期相减得到 一个数值,表示两个日期相差的天数。 例4:判断下列输出命令是否正确(√ 、╳)?若正确写出结果。 ?{99/10/02}+4 ?{02/10/30}-{02/10/15} ?’今天是:’+{2003.03.05} ?’今天是:’+DTOS({2003.03.05})
4. 关系运算符 P47 (1)运算符: >、>=、<、<=、<>或 # 或 !=、=、==、$ (2)运算对象:除 $ 外,N、C、D、L型数据,并且只能相同类型数据进行比较。$ 只能用于C型数据进行比较。 (3)运算结果类型:L型 (4)说明:N型数据按大小进行比较。 (5)字符数据按其ASCII码大小进行比较。 (6) 汉字按机内码大小进行比较. 即: 一级汉字按拼音顺序排列, 二级汉字按部首顺序排列. 例5 ’王’>’刘’ 因为: ‘wang’> ‘liu’ (7)D型数据按日期在前为小, 日期在后为大. 例6 {02/10/30} > {02/10/15} (8)L型数据进行比较时 .T. > .F.
例7:判断下列输出命令是否正确(√ 、╳)?若正确写出结果。 ?’ Asdf’ > ’ as’ ? ‘3488’ > ’98’ ,3488 > 98 ? {02/10/30} > {02/10/15} ? ’ASDFG’ > 567 ? 12+4=16 ? 16=12+4 ?.T. > .F. ?‘王立红’ < ’刘林’
(9)使用 $ 时,当左边字符串包含于右边字符串时,结果为.T. ,否则为 .F. 例8:?[学院] $ [师范学院] ?[师范学院] $ [学院] (10)“=”与“= =” 的区别: ①使用“=”比较时,受SET EXACT ON/OFF 的影响。 当SET EXACT ON时,只有左右两边相同,结果为真,(字符串尾部的空格不影响结果)否则结果为假。 当SET EXACT OFF时,只要等号右边的字符串是左边字符串的子串且是从第一个字符开始,结果就为真。使用>、>=、<、<=、<>或 # 或 !=、=也符合这一规定。 ②使用“= =”比较时,不受SET EXACT ON/OFF的影响,只有左右两边相同,结果为真,否则结果为假。
例9 SET EXACT ON ?[师范学院]= [师范] .F. ?[师范学院]== [师范] .F. SET EXACT OFF ?[师范学院]= [师范] .T. ?[师范学院]== [师范] .F. ?‘asd ’+’fg’==’asd fg’ .T. ?‘asd ’ - ’fg’==’asd fg’ .F.
5.逻辑运算符 (1)运算符 : ① .NOT. 或NOT或 ! ② .AND. 或 AND ③ .OR. 或 OR (2)运算对象:L型数据 (3)运算结果类型:L型 (4)逻辑运算的优先级 .NOT. 或NOT或 !.AND. 或 AND .OR. 或 OR 高 低 (5)逻辑运算 P50 例10:? 23<45 and ! “ab” >”de”
3.4.3运算优先级 1.( ) 最高 2.其次是算术运算符、字符串运算符和日期运算符 3.再其次是关系运算符 4.逻辑运算符最低 例11 写出命令运行结果: ? {99.05.26}-{99.05.06}= 20 and ‘apoi’<’bkj’ ? ’ab’$’abcd’ and ( 43>21 or 23 %4 > 8) USE ZYDA LIST FOR 性别=’男’ AND ! 婚否 LIST FOR 性别=’男’ AND NOT 婚否 LIST FOR 性别=’男’ AND ! 婚否 AND奖金>200
小结: 一、常量的类型(C、N、L、D)及表示方法。 二、内存变量的类型(C、N、L、D、S) 三、函数 1.函数名 2. 函数格式 3.参数的个数及类型 4. 函数值的类型 四、表达式 1.运算符使用的优先级 2.各种运算符使用的优先级 作业:P51---- P53 3.1 、3.2中的1-----4 、3.3