(5)命令结构、书写规则及命令的执行方式
命令的一般形式:
命令字[范围][表达式表][fields<字段名表>][for<条件>]
命令字:
英文动词,可只写前四个字母,不分大小写,但须为半角字符。
如DISP=DISPLAY。
范围:
操作的记录的范围,
有all
nextn
recordn
rest
条件:
由条件表达式担任,其值为逻辑值的表达式均可。
书写规则:
命令行最长8192字符,可用“;”续行。
执行方式:
交互式(命令窗口和菜单)和命令文件式(批处理)。
注意:
1)必须以命令动词开头,后面子项可交换。
2)listFOR是否党员,listFOR.not.是否党员,
第四章、表文件的基本操作
1、VisualFoxPro的启动和退出
启动:
开始→程序→MicrosoftVisualFoxPro。
SETDEFATOA
退出:
QUIT或文件→退出
2、表文件结构的操作
VFP中的表分为数据库表和自由表
自由表建立:
文件→新建→表
CREA<库文件名>
项目管理器/数据(选项卡)
注:
表设计器的使用。
建立扩展名为.dbf,若有备注字段还会生成相应的备注文件.FPT。
表文件结构的显示:
注:
刚建的表是打开的,
LISTSTRU[TOPRINT]连续
DISPSTRU[TOPRINT]分屏
注意:
总字节数比各字段字节数多1(删除标记)
表文件结构的修改:
打开表文件以后(刚建的表是打开的)
●显示→表设计器
●MODISTRU
可以增加和删除字段,对字段名,类型,宽度等进行修改。
注意,可能导致数据项丢失,分多次进行。
利用结构文件建立表文件结构:
COPYTO<表文件名>STRUEXTEND
CREA<新表文件名>FROM<结构表文件名>
表文件结构的复制:
COPYSTRUTO<库文件名>[FIELDS<字段名列表>]
3、文件操作:
文件的建立:
表文件的打开:
USE<库文件名>[ALIAS<别名>]
表文件的关闭:
USE
CLOSEDATABASE
CLOSEALL
CLEARALL
SETINDETO只关闭索引文件
QUIT
文件的复制:
COPYFILE<源文件名>TO<目标文件名>
表文件的复制:
(当前打开表)
COPYTO<新库文件名>[for<条件>][fields<字段名列表>][sdf]
文件的换名:
rename<源文件名>to<新文件名>
文件的删除:
delefile<文件名>若是表文件必须先关闭。
Erase<文件名>
文件的输出:
表文件打开后用list/disp记录
文本文件,命令程序文件用type<文件名>
4、数据的输入、编辑、输出;数据的录入与追加;数据的编辑修改;数据的输出。
数据的录入与追加:
建表时录入和追加式录入。
显示→追加方式
Appe[blank]
Appefrom<源库文件名>[fields<字段名列表>][for<条件>]
Appefrom<文本文件名>sdf[fields<字段名列表>][for<条件>]
记录的插入:
insert[before][blank]
数据的编辑修改:
(全屏幕)
edit
change
browse[nomodi、noappe]
表数据的输出:
list[范围][表达式表][for<条件>][off][toprint]
disp[范围][表达式表][for<条件>][off][toprint]
list范围省略时为all,disp范围省略时为当前记录,注加条件后的disp范围省略时也为ALL。
注:
以上操作完成后记录指针的位置。
注意:
1)edit和go可省略record.
2)Borw的“表”菜单:
属性、追加记录、追加新记录、删除记录、彻底删除记录。
5、数据记录指针的定位:
绝对定位;相对定位;条件定位
绝对定位:
gotop/bottom/<数字表达式>
相对定位:
skip±<数字表达式>
条件定位:
locafor<条件>
cont继续指向下一条符合条件的记录。
注意:
1)go1与gotop区别
2)cont只能在loca后
3)归纳移动指针的命令:
find、seek、list、replall、count、sum、aver
第五章排序、查询、统计、多表操作
1、数据库的重组:
物理排序:
生成排序表文件
sorton<字段名1>/a/d/c……to<新库名>[for<>][fields<>]
排序的字段可以是C,N,D,T,L等。
逻辑排序:
生成索引文件(.idx)
indexon<关键字表达式>to<索引文件名>单一索引
按关键字表达式值升序
indexon<关键字表达式>tag<标识名>[of<复合索引文件名>][asceding|descending][unique][additive]
注:
按关键字表达式值升序/降序排列,一个库可建立多个索引文件,同一时刻只有一个起作用。
Setorderto[<数字表达式>|[tag]<标识名>]设置主控索引。
索引文件的打开:
刚建的索引文件是打开的(对于结构化索引,随表的打开而自动打开,但需设主控索引)
Setindexto<索引文件名表>[orderto……]
Use<表文件名>index<索引文件名列表>[orderto……]
索引文件的修改:
打开后用reindex
索引文件的关闭:
setindexto或关闭表的同时关闭。
注意:
1)索引文件的数学的升序(关键1)英语的降序(关键2)。
2)结构索引文件的四种索引字段:
主索引、候选索引、唯一索引、普通索引
3)熟练用命令(setordertotag<标记名>)和菜单(表/属性)选择主控索引
2、表的查询:
顺序查询:
loca[范围][for<条件>]
cont
索引快速查询:
(建索引后)
find<字符>/<数字表达式>字符串可不用定界符。
find&<字符型内存变量名>
seek<表达式>
注(seek):
表达式可为C,N,D。
为C时须加定界符,为内存变量时不用&。
模糊查询:
用recno(0)测试刚超过目标的下一个记录。
注意:
1)loca和cont与循环的结合。
2)n=80,indeon数学tos1,用find和seek查找n。
3、数据计算:
记录统计;数值字段求和;求平均值;分类汇总。
记录统计:
count[范围][for<条件>]
数值字段求和:
sum[范围][表达式表][for<条件>][to<内存变量名表>]
求平均值:
aver[范围][表达式表][for<条件>][to<内存变量名表>]
分类汇总:
totalon<汇总关键字>to<汇总库文件名>……
注意:
分类汇总时,先按关键字索引,要看汇总结果须打开汇总库。
4、多工作区操作:
工作区的选择:
sele<工作区号>/<别名>/0
表文件的关联:
setrelato<关键字>into<别名>[addi]
注意:
1)被关联表在别名工作区打开并按关键字建索引,主表在当前工作区打开。
是一种临时关系。
分为:
同名字段关联
非同名字段关联
按数字表达式(记录号)关联。
2)被访问表STUD.DBF(1区)字段名姓名的引用:
A->姓名、A.姓名、stud->姓名、stud.姓名
表文件的联接:
被联接数据表在别名工作区上打开。
joinwith<别名>to<新库名>for<条件>[fields<>]
表文件之间的批量更新:
updateon<关键字>from<别名>repl<字段名1>with<表达式1>……[random]
表文件的关闭:
closeall
注意:
1)熟练掌握从一个表找到某人,显示他两个表的字段。
2)掌握用一个表数据替换另一个表字段数据。
3)三个表的串联和并联的关联方法。
第六章数据库与视图
1.数据库:
是一个包含表、索引、视图、表之间的永久关系等的容器.
与数据库操作相关的命令:
createdatabase<数据库名>
opendatabase<数据库名>
modidatabase打开数据库设计器
use数据库名.dbc
2.视图:
是一种虚表,但通过视图可更改基表中的内容。
分为本地视图和远程视图(应先建连接)。
注意:
1)用数据库中快捷菜单新建、添加、删除、表
2)数据库表与自由表的表设计器的区别。
3)学会建立表的永久关系。
(一对一、一对多)
4)学会建立视图。
第七章SQL语言
(1)表结构的创建:
creatable<表名>(列定义[,…][表约束])
例:
creatablestud(姓名char(8),性别char
(2))
(2)ALTERTABLE<表名>
[ADD<新列定义>]增加新列
[ALTER<列名><数据类型>]修改字段类型
[RENAMECOLUMN<列名>TO<新列名>]修改字段名
例:
ALTERTABLESTUDENTALTER学号N
ALTERTABLESTUDENTADD化学N(3)
注:
修改列时,不能改列名,不能将宽度减少(在列中已有数据时)
(3)删除数据表的命令格式:
(表可以打开,也可以不打开)
DROPTABLE<表名>
(4)向表中插入一新记录(末尾)
insertinto<表名>(列名1[,…])values(值1[,…])
insertintostud(学号)value(“20030101”)
(5)修改表中一行或多行记录的某些列的值
update<表名>set<列名>=<表达式>[,…][where<条件>]
updatezgset职工号="20030105"where职工号="20030101"
(6)删除数据记录
delefrom<表名>[where<条件>]
省略条件:
删除所有记录,该删除为逻辑删除(即给符合条件的记录打上删除标记*)。
(7)SQL查询
命令:
SELECT<字段名表>FROM<表文件名>[WHERE<条件>][groupby<分组字段>][having<筛选条件>][orderby<排序字段表>][asce][desc]
说明:
(1)<字段名表>:
查询输出的的字段,多个字段用“,”隔开,全部字段用“*”.
(2)FROM<表文件名>:
查询的表文件,可打开或不打开。
(3)WHERE<条件>:
引导查询条件。
(4)GROUPBY<列名>[,<列名>…][HAVING<筛选条件>]:
把查询结果中的行按一个或多个列的值分组;可以指定在查询结果中的各组应满足的条件。
(5)ORDERBY<列名>[ASC/DESC][,<列名>[ASC/DESC]…]:
用于指定一个或多个数据作为排序的依据。
例1:
简单查询
sele*fromstud&&从表stud.dbf中输出所有字段)
sele姓名,性别,数学fromstudwhere性别=”女”and数学>=60(and/or/not可加/不加两点)
&&从表中输出及格女同学的姓名、性别、数学字段
例2:
多表查询
selest1.姓名,st1.性别,st2.数学,st2.英语fromst1,st2wherest1.姓名=st2.姓名
&&两表所有相同姓名的字段
selest1.姓名,st1.性别,st2.数学,st2.英语fromst1,st2wherest1.姓名=”张三”.and.st2.姓名=”张三”
&&代替索引、关联
例3:
分组查询
sele*fromst1groupby性别havingcount(*)>=3
&&输出结果按性别分成两组,且只输出记录个数大于3的一组。
例4:
查询排序
sele*fromst1wheresubs(学号,1,2)=’99’orderby数学desc
&&查询结果只输出学号前两位为“99”,且输出结果按数学成绩降序排列。
例5:
嵌套查询(查询的条件是另外一个查询的结果)
Sele*fromstudwhere入学成绩=(sele入学成绩fromstudwhere;姓名=”张三”)
另注:
运算符and,or,not,betweenand,in,like(字符匹配_和%)。
%为任意长度的字符串,_为一个字符或一个汉字(据系统而定)
统计函数AVG,SUM,COUNT,MAX,MIN的使用。
第八章、程序设计
1、人机交互式输入输出语句:
wait
accept
input
注意:
这三个命令的区别。
2、程序文件的建立和执行(.prg)
建立:
modicommand<程序文件名>
菜单
项目管理器的代码选项卡下的程序
执行:
do<程序文件名>(命令窗口)
程序→运行(菜单)
(工具)
3、结构化程序设计的三种基本结构(顺序、选择、循环);常用的输入、处理、输出功能模块的设计方法。
条件格式:
If<条件>
……
[else
……]
endif
docase
case<条件1>
……
case<条件n>
……
otherwise
……
endcase
循环格式
(1)dowhile.not.eof()
……
skip…
enddo
(2)locafor<条件>
dowhile.not.eof()
……
cont…
enddo
(3)dowhilek<=N
……
k=k+1…
enddo
(4)dowhile.t.
……
Exit…
enddo
(5):
for<内存变量>=<初值>to<终值>[step<步长>]
循环体
endfor
(6)针对表中的记录进行操作
scan[范围][for<条件>]
循环体
endscan
注意:
1)注意进入死循环。
加以举例。
2)熟练编写九九乘法表、画宝塔形星号、用LOCA输入表中所有数学及格的同学、求5个数中最大的数、5个数排序。
4、主程序与子程序,过程与过程文件(.prg)
建立:
modicomm<过程文件名>
每一过程以proc<过程名>开头,以retu结束。
打开:
setprocto<过程文件名>
调用:
do<过程名>[with<参数表>]
注意:
过程调用中的参数传递(实参与形参的一一对应)。
5.内存变量
(1)作用域
1)局部变量(private宣布(屏蔽)、不宣布)、全局变量(public)
2)表单的各程序段定义变量只能局部使用。
(2)数组(先定义,后使用)
1)先定义(全是.F.)后赋值:
dime数组名(下标1[,下标2]),……
2)二维数组元素名和一维数组元素名互换。
例dimexyz(2,3)
y(2,1)与y(4)等价。
Y(1,1)①
Y(1,2) ②
Y(1,3) ③
Y(2,1) ④
Y(2,2) ⑤
Y(2,3) ⑥
3)数组与库文件之间的数据传递:
scat[fields<……>]to<数组名>
注意:
有扩展数组元素和定义新数组功能。
Gatherfrom<数组名>[fields<……>]
注意:
数组元素的数据类型与字段类型匹配。
6、格式输入、输出命令
@行,列say<表达式>[get<变量>][pict<格式符>][function<功能符>][range<范围>][valid<条件>]
read
注意:
Pa=123.456
@4,10saypapicture‘***,***.**’&&输出:
****123.45
@4,10saypapicture‘$$$,$$$.$$’&&输出:
$123.45
7、菜单技术
(1)普通菜单:
1)?
“提示字符”
2)@say“提示字符”
3)text
“提示字符”
endtext
(2)亮条式菜单:
@行,列prompt“提