收藏 分享(赏)

VFP第九讲(数据表操作2).ppt

上传人:s36f12 文档编号:4740737 上传时间:2019-01-10 格式:PPT 页数:110 大小:966.50KB
下载 相关 举报
VFP第九讲(数据表操作2).ppt_第1页
第1页 / 共110页
VFP第九讲(数据表操作2).ppt_第2页
第2页 / 共110页
VFP第九讲(数据表操作2).ppt_第3页
第3页 / 共110页
VFP第九讲(数据表操作2).ppt_第4页
第4页 / 共110页
VFP第九讲(数据表操作2).ppt_第5页
第5页 / 共110页
点击查看更多>>
资源描述

1、第十讲 表操作(二),一 数据表的排序、索引与查询,对于数据表的一些操作是按照数据表中的记录顺序进行的(例如数据的显示、查询);数据表中记录的初始顺序是按照记录的输入顺序排列的;为了加快和实现一些数据表操作,常常需要先对数据表进行排序或索引操作。,数据表的排序,排序:根据表的指定字段中数据项的大小重排记录物理顺序。,命令格式:,SORT TO 新表文件名 ON 字段名 /A/D/C ,字段名2/A/D/C范围FIELDS 字段名表 FOR 条件WHILE 条件,排序后将产生一个新的数据表,其记录按新的顺序排列,但原文件不变。,排序中所依据的字段称为排序关键字。,数据大小的比较规则:如果是数值型

2、、日期型的数据进行比较,则由其本身的大小决定;字符型数据由其ASCII码值确定,汉字由机内码确定大小。,例:,USE 学生,SORT TO cjb ON 入学成绩,USE cjb,LIST,缺点:1、产生新的表文件,与原表内容相同造成数据冗余。,2、新表与旧表的内容不能自动保持同步。如果对数据表文件进行增、删、改操作时,需要重新进行排序。,数据表的索引,索引:根据索引表达式的值使数据表中的记录有序排列,在Visual FoxPro系统中是借助于索引文件实现的。,索引实际上是一种逻辑排序,它不改变数据表中数据的物理顺序,而是另外建立一个记录号列表。,按成绩降序排列,索引文件,注:目前我们接触到的

3、都是普通索引,关于不同索引的其他区别和使用以后介绍。,索引类型,Visual FoxPro系统提供了四种不同的索引类型,它们分别是:主索引、候选索引、普通索引和唯一索引。,主索引、候选索引:关键字中的字段值唯一。普通索引:关键字中的字段值可以重复。唯一索引:关键字中的字段值可以重复,但是忽略第一个以后的重复记录。,索引文件类型,1、单索引文件:扩展名为.IDX。每一个数据表可以建立多个相关的索引,每个索引单独存放在一个独立的文件中,形成单索引文件。如果想使用或保持索引更新,在作数据表修改时,必须打开对应的单索引文件。,2、复合索引文件:扩展名为.CDX。可以在同一个复合索引文件中包含多个索引,

4、其中每个索引标记为一个索引标识,从而可以打开一个单独文件并打开多个索引标识。文件名与表名相同复合索引文件的称为结构复合索引,并随数据表自动打开。,1、利用命令创建索引,格式1(建立.IDX索引文件):,INDEX ON TO FOR UNIQUE ADDITIVECOMPACT,USE 学生,INDEX ON 入学成绩 TO RXCJ,LIST,LIST,例:,说明:(1)UNIQUE:只取相同值的第一条记录参加索引;,(2)ADDITIVE:不关闭已经打开的索引。,建立索引文件,INDEX ON TAG OF FOR ASCENDING/DESCENDING ADDITIVE UNIQUE,

5、格式2(建立.CDX索引文件),USE 学生,INDEX ON 出生年月 TAG CSNY,LIST,LIST,例:,多字段索引的操作技巧:,建立索引时,当涉及到两个或两个以上的不同类型的字段时:,学号(c) 入学总分(n) 出生日期(d),Index on 学号+str(入学总分,5,1)+dtoc(出生日期,1) tag x1,学号(c) 入学总分(n) 出生日期(d),Index on 学号+str(入学总分,5,1)+dtoc(出生日期,1) tag x1 desc,学号(c) 入学总分(n) 出生日期(d),Index on 学号+str(1000-入学总分,5,1)+dtoc(出生

6、日期,1) tag x1,学号(c) 入学总分(n) 出生日期(d),Index on 学号+str(入学总分,5,1)+str(date()-出生日期) tag x1 desc,1)顺序若相同,则将非字符型转换为字符型,然后用“+”连接成一个字符表达式。,2)若非字符字段的顺序与字符型不同,则通过运算将其数据顺序转换后,再转化为字符型,然后用“+”连接成一个字符表达式。,2、利用表设计器可以对已有的表创建索引,要使用索引必须完成以下步骤:,打开表打开索引文件确定主控索引文件,说明:(1)对于复合索引文件还必须确定主控索引;(2)在一些默认情况下,可以省略部分步骤。,索引的使用,打开索引文件,

7、利用命令打开:,或 SET INDEX TO ADDITIVE,USE INDEX ,SET ORDER TO | |TAGASCENDING|DESCENDING,说明:(1)结构复合索引能随表的打开而打开,但还必须确定主控索引;,1)先对.IDX进行编号,然后是结构.CDX中的索引标记,最后是独立.CDX文件中的索引标记。,2)如果的值为零或被省略,则记录将按记录号的顺序访问和显示。,对于打开的多个索引,可以通过下面的命令指定主控索引:,(2)的值表示该索引在中的顺序号,其规则为:,USE 学生 INDEX RXCJ,LIST,例:,SET ORDER TO TAG CSNY & 出生年月

8、为主控索引,LIST,SET ORDER TO RXCJ & 入学成绩为主控索引,SET ORDER TO 2 & 索引序号2为主控索引,LIST,LIST,SET ORDER TO 1 & 索引序号1为主控索引,LIST,SET ORDER TO & 恢复原记录顺序,LIST,关闭索引文件,要关闭已经打开的索引文件,可以利用命令:,SET INDEX TO,或 CLOSE INDEXES,重建索引,如果要更新修改数据表后打开的索引,需要用命令重建索引:,REINDEX,或 CLOSE ALL,删除索引,删除索引标识:,DELETE TAG OF , OF ,删除索引文件:,或:DELETE

9、ALL OF ,ERASE|DELETE FILE ,索引的使用说明(1),要使用索引,必须同时打开表与索引文件,索引文件不能脱离所依赖的数据表文件而单独使用;,一个表可以同时打开多个索引文件,同一个复合索引文件中也可能包含多个索引标识,但任何时候只有一个索引能起作用;数据表文件只按主控索引文件或主控索引的顺序处理各记录;,当前起作用的索引文件称为主控索引文件, 当前起作用的索引标识称为主控索引;,索引的使用说明(2),结构化复合索引文件将随着数据表文件的打开而自动打开,其它索引文件则需要使用索引文件的打开命令;,若主控索引文件为复合索引文件,则记录处理的次序仍按各记录实际存放的顺序,只有用O

10、RDER命令指定主控索引后,才按主控索引的次序处理记录;,对数据表文件进行增、删、改操作时,系统会自动修改所有打开的索引文件;,对数据表指针的移动除了“GO n”命令以外,都按照索引后的顺序进行。,专门移动指针的命令: GO n GO TOP GO BOTTOM SKIP,在处理的同时移动指针的命令: DISP LIST APPEND BALNKINSERT BLANK BEFORE REPLACE WITH LOCATE FOR CONTINUE SCANENDSCAN,知识小结,二、数据表的记录查询,所谓查询,即按照指定条件在表中查找所需的记录。,1.顺序查询命令,顺序查询命令包括LOCA

11、TE FOR和CONTINUE两条命令。,命令格式:,LOCATE FOR WHILE ,CONTINUE,CONTINUE,USE 学生,LOCATE FOR 性别=男,例:,DISP,CONTINUE,DISP,CONTINUE,DISP,说明:(1)该命令在数据表的指定范围内查找满足条件的记录, 并在查询中顺序移动指针,如果找到,则指针指向该记 录,否则指针最后指向数据表末尾或指定范围末尾;,(3) LOCATE FOR命令始终只能查到满足的第一条记录,要继续往下查找必须用CONTINUE命令;,(2)缺省表示ALL;,(4) CONTINUE命令不能单独使用。,2.索引查询命令,索引查

12、询速度快,但需要事先对数据表按查询的关键字进行索引。,SEEK和FIND两条命令均可用来进行索引查询。,命令格式:,SEEK ,FIND |,功能:在已确定主控索引的表中按索引关键字搜索满足值(SEEK命令)或字符串/数值常量(FIND命令)的第一条记录。,USE 读者,INDEX ON 读者姓名 TO XM,例:,LIST,SEEK 李斯,DISP,FIND 武金,DISP,A=王莎莎,SEEK A,DISP,FIND &A,DISP,关于SEEK命令和FIND命令:,SEEK和FIND都只能对当前索引的关键字段进行查询。SEEK和FIND都会在整个数据表内按照索引顺序查找第一条满足条件的记

13、录(无范围设定,无法查找多条同值记录);如果找到指针指向该记录,如果没有找到,指针指向数据表结束位置(EOF()返回值为真);SEEK和FIND都支持不精确查找,除非设定了SET EXACT ON;,3.基于数据表的扫描查询循环(P146),格式:SCAN FOR WHILE LOOPEXITENDSCAN,说明:1、该循环对数据表中的满足条件的记录从上到下逐个进行指定的处理。2、:指定对当前表中记录扫描的范围。只有在范围之内的记录才有可能扫描到。SCAN命令的默认范围为ALL。3、FOR :只有条件表达式的计算结果为“.T.”的记录,才能对其执行循环体内的语句,如果没有条件子句,则默认对所有

14、记录逐条进行处理。4、WHILE :指定一个逻辑表达式作为执行命令的条件,只要逻辑表达式计算为“.T.”,就对记录执行命令,直到遇到使表达式不为“.T.”的记录为止。,程序例:逐条显示“学生”数据表中男生的记录内容。,USE 学生 SCAN FOR 性别=“男”DISPWAIT ENDSCAN CLOSE ALL,USE 学生 LOCATE FOR 性别=男 DO WHILE NOT EOF( )DISPWAITCONTINUE ENDDO CLOSE ALL,USE 学生 DO WHILE NOT EOF( )LOCATE FOR 性别=男 DISPWAITCONTINUE ENDDO CL

15、OSE ALL,条件循环GO TOPLOCATE FOR DO WHILE NOT EOF( )处理一个记录CONTINUE/SKIPENDDO,扫描循环 SCAN FOR 处理一个记录 ENDSCAN,例:查询读者表中的男女会员人数,CELAR STORE 0 TO x,y USE 读者 SCAN FOR 是否会员IF 性别=男x=x+1ELSEy=y+1ENDIF ENDSCAN ? “男会员有”+STR(x,2)+”人” ? “女会员有”+STR(y,2)+”人” CLOSE ALL RETURN,LOACTE FOR 是否会员 DO WHILE NOT EOF( ),CONTINUE

16、ENDDO,记录查询小结,下列语句或方法都可以用于指定数据表中的记录:,条件子句:FOR ,WHILE,范围子句:ALL,RECORD(n),NEXT(n),REST,顺序查找命令:LOCATE FOR CONTINUE,索引搜索命令:SEEK 和FIND,条件子句和范围子句可以指定一批满足条件的记录;,索引搜索只能查找到范围内的第一条满足条件的记录;,顺序查询和扫描循环适合于多个记录的模糊条件查询,索引搜索适用于单个记录的精确查找;,SEEK 语句支持表达式的搜索,FIND语句只能使用数值常量和字符串常量。,扫描循环语句:SCAN ENDSCAN,【例6-2】在读者信息表中为性别字段建立普通

17、索引,并利用该索引查找并显示出所有女读者信息。,Set order to 性别Find 女,表单Form1的Init事件代码:,If eof( )messagebox(“没有满足条件的记录”) elseskipif 性别=“女”thisform.refreshelse messagebox(“已查询完毕!“)this.enabled=.f. skip -1thisform.refreshendif endif,Find和Seek没有配套的继续查询的命令,“下一条”按钮的Click事件代码如下:,【EXM1】设计如图所示表单,在组合框中选择任一出版社,在编辑框中显示该出版社的图书的书名、价格和数

18、量。,thisform.edit1.value=“书名 价格 数量“ cbs=alltrim(bo1.value) scan for alltrim(出版社)=cbsx=书名+space(2)+str(价格,5,1)+str(数量,4)thisform.edit1.value=thisform.edit1.value+chr(13)+x endscan thisform.refresh,组合框combo1的Interactivechange事件代码:,方法1:,thisform.edit1.value=“书名 价格 数量“ cbs=alltrim(bo1.value) locate for a

19、lltrim(出版社)=cbs Do while not eof( )x=书名+space(2)+str(价格,5,1)+str(数量,4)thisform.edit1.value=thisform.edit1.value+chr(13)+xcontinue enddo thisform.refresh,组合框combo1的Interactivechange事件代码:,方法2:,【EXM2】设计如图所示表单,在编辑框中显示所有读者的姓名、办证日期,单位和联系电话。,thisform.edit1.value=“读者姓名 办证日期 单位 联系电话“ Do while not eof() x=读者姓

20、名+space(2)+dtoc(办证日期)+space(2); +单位+space(2)+联系电话thisform.edit1.value=thisform.edit1.value+chr(13)+xskip enddo thisform.refresh,命令按钮command1的click事件代码:,方法1:,thisform.edit1.value=“读者姓名 办证日期 单位 联系电话“ scan x=读者姓名+space(2)+dtoc(办证日期)+space(2); +单位+space(2)+联系电话thisform.edit1.value=thisform.edit1.value+c

21、hr(13)+x endscan thisform.refresh,命令按钮command1的click事件代码:,方法2:,go topdo whil not eof()处理一个记录 skipenddo,scan处理一个记录 endscan,条件循环,扫描循环,数据来源于读者.dbf表, 打开表(定义数据环境),对表中的每一条记录 进行逐条扫描 用循环对每条记录做同样的处理,在编辑框中输出记录,数据表扫描循环的三要素: 循环变量记录指针,初值为1, go top 循环条件记录指针没有到文件结束not eof() 循环条件的改变记录指针逐条后移skip,三、数据表的运算,统计记录个数,数值字段

22、求和与平均值,多功能计算命令,分类汇总,Sum 英语,计算机,数学,英语+计算机+数学 to yy1,jsj1,sx1,zf1 Average 英语,计算机,数学,英语+计算机+数学 to yy2,jsj2,sx2,zf2 Count to rs Calculate sum(计算机),avg(英语),cnt(),max(英语+计算机+数学),min(数学) to jsj3,yy3,zf3,sx3,纵向求和,纵向求平均,统计记录数,=(85+82+76)+(70+95+63)+(40+70+83),1、统计记录个数,格式:COUNT TO FOR WHILE ,功能:统计当前数据表中满足条件的记

23、录的个数,并将统计结果输出到状态栏或指定变量中。,USE 读者,COUNT TO nrs FOR 性别=男,例:,? nrs,说明:默认的范围为“ALL”。,2、数值字段求和与平均值,格式:SUM|AVERAGE TO FOR WHILE ,功能:对指定数值字段进行求和或求平均值计算,并将结果输出到状态栏或指定变量中。,USE 图书,SUM 数量 TO hj FOR 出版社=清华大学出版社,例:,? hj,pj,说明: (1)默认的范围为“ALL”;(2)如果不指定具体的字段,则对数据表中的所有 数值字段计算。,AVERAGE 单价 TO pj,3、多功能计算命令,格式:CALCULATE T

24、O FOR WHILE ,功能:对指定字段按函数功能进行计算,并将结果输出到状态栏或指定变量中。,USE 图书,CALCULATE CNT( ) ,MAX(单价), MIN(单价); , AVG(单价) TO sl, zgj, zdj, pjj,例:,? sl, zgj, zdj, pjj,CALCULATE MAX(单价) TO x2,4、分类汇总,格式:TOTAL TO ON FOR WHILE ,功能:对当前数据表中的指定数值字段依照指定索引字段进行分类汇总计算,并将结果输出到另外一个新建的数据表中保存。,USE 图书,TOTAL ON 出版社 TO hz FIELDS 数量,例:,US

25、E hz,说明: (1)一般情况下,在进行分类汇总之前,需要按照关键字段 进行排序或建立索引;(2)如果不指定具体的求和字段,则对数据表中的所有数值 字段汇总;(3)在产生的新数据表中,非汇总字段的内容为该类别的第 一个记录的内容。,INDEX ON 出版社 TAG cbs,LIST 出版社,数量,【例6-9】计算图书表中每个出版社的图书数量。,注:关于表单中表格的设置,见教材P124126,set safety off use 图书 index on 出版社 tag cbs total to sl on 出版社 fields 数量 use sl copy to sl1 fields 出版社,

26、数量 use thisform.grid1.recordsourcetype=0 thisform.grid1.recordsource=“sl1“ set safety on,表单Form1的Init事件代码如下:,【EXM3】有如下数据表jf.dbf,按性别汇总积分。,index on 性别 tag xb total on 性别 to hz fields 积分 use hz thisform.grid1.recordsource=“hz“ thisform.refresh,命令按钮的click事件代码:,表单的load事件代码:,Close all,四、 多个数据表联合操作(P132),数

27、据工作区:一个工作区是一个编号区域,每一个工作区中可以打开一个表。,1、工作区的标记,每个工作区只允许打开一个表,而且一个表只能在一个工作区打开,系统默认的工作区为1。,工作区别名:前十个工作区除了可用110来标识外,还可用AJ来表示工作区的别名。,还可以用ALIAS 定义表的别名。例:USE 读者 ALIAS DZB,通过使用工作区号和工作区别名来标识。,2、选择工作区,SELECT |,说明:(1)其中的可以是工作区的别名,也可以是工作区打开表的别名。,(2)SELE 0表示选定当前尚未使用的最小号工作区。,由于VFP的默认操作只对当前工作区中的数据表起作用,如果要操作其它工作区中的数据表

28、,则需要通过命令实现工作区之间的切换。,例: SELECT A SELECT 1 SELECT 读者SELECT DZB,可以通过引用格式引用非当前工作区表的字段,必须冠以工作区名或数据表别名,引用格式为: 工作区别名-字段名或工作区别名.字段名,下面的命令能在指定的工作区打开表,但不改变当前工作区:USE IN |,3、在当前工作区中操作其他工作区的数据表,USE 读者,SELECT 2,例1:,UES 图书,DISP 姓名,B.书名,USE 读者,例2:,UES 图书 IN 2,DISP 姓名,B-书名,SELECT 1,建立表间联系,一般来说,各个工作区打开的数据表示互不相关的,它们的指

29、针移动是独立进行的。在一些情况下,希望在不同工作区内数据表建立联系,一个表上指针的移动会引起其它表内指针的相应移动。,要在两个或两个以上数据表之间进行数据联结操作,通常有关联和连接两种方法。,关联:当前表记录指针的移动,能引起别的表按某种条件相应地移动记录指针。建立关联后,称当前表为关联表,与关联表建立关联的表为被关联表 。,连接:是将几个表连接生成一个新表(扩展名为.dbf)。,VFP数据表,1、关联的概念,每个工作区打开的表中都存在一个记录指针,指针指向的记录是当前记录,如果表之间没有关系,则各个表的记录指针相互独立,即当前工作区指针移动时,其他工作区的指针不移动。,所谓关联,就是让不同工

30、作区数据表的记录指针建立一种临时的联动关系。使一个表的记录指针移动时,能带动另一个表的记录指针按一定的条件作相应地移动。前者称为关联表(父表),后者称为被关联表(子表),2、建立表间的关联,建立数据库文件中表间关联的必要条件:建立关系的表具有相同的字段值(关键字值);建立关联的两个数据表必须同时处于打开状态;子表要以该字段建立索引。,建立两个表之间的“一对一”和“多对一”关联的步骤: 找到两个表中能够建立关联的字段(字段名可以不同,类型、宽度、小数位数必须相同) 根据关键字值确定父表,再确定子表; 先打开子表,建立索引; 最后打开父表建立关联。,有重复值为父表,1. 关联命令,SET RELA

31、TION TO | INTO |,| INTO |ADDITIVE,BB AA,SELE 1 USE AA INDE ON 字段 TAG ZD SELE 2 USE BB SET RELA TO 字段 INTO A,字段,3、两个表之间的关联,例:USE 读者 INDEX ON 读者编号 TAG bh SELE 2 USE 借阅 SET RELA TO 读者编号 INTO 1 LIST a.读者编号,a.姓名,书号,还书日期,AA BB CC 或 AA BB AA CC,字段1,字段2,字段1,3个表建关联?,字段2,4、多个表之间的关联,例:(教材P137例5.8),【例5-8】在“图书信息

32、管理”项目中建立如图所示的图书借阅登记表单,输入读者编号和借阅图书的书号,单击“借阅”按钮,可以将读者对该图书的借阅记录添加到“借阅”表中完成图书的借阅登记。生成借阅记录之前要先验证读者和图书已经在系统中存在,否则不允许完成借阅记录。,set safety off select 1 use 读者 alias dz EXCLUSIVE index on 读者编号 tag dzbh select 2 use 图书 alias ts EXCLUSIVE index on 书号 tag sh select 3 use 借阅 EXCLUSIVE set relation to 读者编号 into dz

33、set relation to 书号 into ts additive,在表单空白处双击鼠标,表单Form1的Load事件代码如下:,append blank dzbh=alltrim(thisform.text1.value) sh=alltrim(thisform.text3.value) replace 读者编号 with dzbh,书号 with sh,;借阅日期 with date(),是否续借 with .f. do casecase eof(1)messagebox(“输入的读者不存在,请核对。“)delete packcase eof(2)messagebox(“输入的图书不存

34、在,请核对。“)delete pack endcase,“借阅”按钮的Click事件代码如下:,(6)关联后,父表指针移动带动子表指针移动;而如果当前工作区是子表,其指针移动,父表指针不会移动。,关联说明:,(1)建立关联的数据表都具有同一属性的字段,称为关联字段;,(2)在被关联表中依据关联字段建立索引,并指定为当前索引(主控索引)。,(3)如果关联表中的关联字段有重复的值,则应建立多对一关系。,(4)发出关联命令所在工作区的表是父表;,(5) 的值必须是相关联的两个表文件共同具有的字段,被关联表文件必须已经按关键字表达式建立了索引文件并处于打开状态。,(8)additive 一般用于三个或

35、三个以上的表之间建立多重关联,第2、3个关联使用该选项。 (9)关联后,当前工作区字段名可以直接使用,子表的字段在使用时要加“别名.字段名”。 (10)关闭或重新打开数据表,关联就会消失。(故称为临时关系),【例6-3】在文本框中输入读者姓名,利用图书基本信息表、读者基本信息表和图书借阅表查询该读者借阅的所有图书的基本信息。,“查询”按钮的CLICK事件代码如下: SET SAFETY OFF SELECT 读者 INDEX ON 读者编号 TAG DZBH SELECT 图书 INDEX ON 书号 TAG SH SELECT 借阅 SET RELATION TO 读者编号 INTO 读者

36、SET RELATION TO 书号 INTO 图书 ADDITIVE Xm=ALLTRIM(THISFORM.combo1.VALUE) IF FILE(“TEMP.dbf“)DROP TABLE TEMP ENDIF COPY STRUCTURE TO temp fields 图书.书号, 图书.书名, 图书.价格,借阅日期 DIMENSION X(4) SCAN FOR 读者.读者姓名=xmX(1)=图书.书号X(2)=图书.书名X(3)=图书.价格X(4)=借阅日期INSERT INTO temp FROM ARRAY X ENDSCAN THISFORM.GRID1.RECORDSO

37、URCE=“temp“ SET SAFETY ON,主索引与永久关系,有些数据表格和其他数据表格之间存在着某些联系,在数据发生变化的时候,会对其他表格的数据产生影响,在数据表之间建立关系可以约束了数据的修改。,1)主索引的建立,注意:只能为数据库表建立主索引,不能为自由表创建主索引。当从数据库中移走有主索引的表而成为自由表时,他们的主关键字将会随之消失。,(教科书P135-136),数据库表,自由表,2)永久关系,在“数据库设计器”窗口中,两个数据表格之间的连线,就是“永久关系”。,教科书P140【例5-9】,永久关系连线的作用是在数据表格作“更新”、“删除”、“新增”等操作时,对表格做前置检

38、查,满足某些预先设定的规则,防止错误的操作。,可以通过“参考完整性” ,来设置和存储这些规则(见教科书142-143页。),“关系”和“关联”是不同范畴的两个概念。建立“永久关系”的父表必须以关键字建立主索引或侯选索引,而子表则可以以关键字建立任意类型的索引(一对一或一对多)。而建立“临时关联”的父表可以不需建立索引,只需子表以关键字建立任意类型的索引即可(一对一或多对一) 。,注意:,VFP命令小节,现在对前四章的命令总结如下: 1、建立数据表 CREATE 2、打开和关闭数据表 USE 3、显示表结构 LIST/DISPLAY STRURE 4、修改表结构 MODI STRURE 5、显示

39、表记录 LIST/DISPLAY 6、浏览修改表记录 BROWSE 7、追加表记录 APPEND FROM 8、插入记录 INSERT 9、成批记录的修改 REPLACE WITH 10、记录的删除和恢复 DELETE ,RECALL ,PACK,11、记录定位 GO/GOTO ,SKIP 12、数据表文件的复制 COPY TO 13、数据表结构的复制 COPY STRURE TO 14、数据的排序 SORT TO 15、数据的单索引 INDEX ON TO 16、数据的复合索引 INDEX ON TAG 17、打开索引 SET INDEX TO 18、指定主索引标识 SET ORDER TO

40、 19、单索引更新 REINDEX 20、直接查询 LOCATE FOR ,CONTINUE,21、索引查询 FIND/SEEK 22、统计 COUN ,SUM ,AVER ,TOTA ON TO,CALCULATE 23、选择工作区 SELETE 24、表之间的关联 SET RELATION TO 25、表之间的联接 JOIN WITH TO 26、内存变量的赋值 =,STORE TO 27、内存变量的显示 LIST/DISPLAY MEMO 28、内存变量的清除 RELESE 29、内存变量的保存 SAVE TO 30、内存变量的恢复 REST FROM ,31、数组的定义 DIMETIO

41、N/DECLARE/PUBLIC 32、字段表 SET DELE ON/OFF,SET FIEL ON/OFF 33、变量、表达式和函数的显示 ?/? 34、编辑修改程序 MODI COMMAND ,补充内容:基于数据表的表单设计,数据表与表单建立联系:表单的数据环境设置。,(教材P108) 【例4-10】建立如表4.4所示的数据表:管理员.dbf,设计如图所示的系统图书管理系统的登录表单。将表单中的组合框与数据表中的用户名字段绑定。,在表单空白处单击右键,在快捷菜单中选择“数据环境”,弹出“打开”对话框,选择管理员.dbf,单击“确定”按钮,在弹出的“添加表或视图”对话框中可以选择并添加多个

42、数据表,在这里我们选择“关闭”按钮,则数据表成功添加到表单中,如图所示。,温馨提示在该对话框中可以只选择姓名字段,或只选择管理员编号,为了避免错误的选择管理员,最好两个字段都选择。,表单执行后, 选择一用户名,输入密码,如果密码正确(与数据表中的密码字段对应),单击“进入系统”按钮,可以调用系统主菜单“图书管理系统菜单.MPR”; 如果密码不正确,最多允许输入3次,每次给出错误提示,如果3次均不正确则直接退出系统,返回操作系统; 单击“退出”按钮,可以退出本系统,返回操作系统。,(教科书P110-111事件代码),通常情况下,文本框、组合框等可以作为输入类的控件;标签、文本框、编辑框、列表框、

43、表格、图像、Active绑定控件等作为输出类的控件;命令按钮、命令按钮组、复选框、选项按钮组、计时器可以作为控制类的控件。,(教材P117) 【例5-1】在“图书信息管理”项目中建立一个管理图书信息的表单,保存为“图书信息.scx”,实现“首记录”、“末记录”按钮的功能,使得表单上能够看到图书表的第一条记录或最后一条记录。,表示commandgroup1,命令按钮组Commandgroup1的click事件代码如下: do case case this.value=1go topcase this.value=4go bottomcase this.value=5thisform.releas

44、e endcase thisform.refresh,数据表字段的值改变后并不能立即显示在控件上,需要使用refresh方法刷新表单中各控件显示的内容。,表示什么?,第1、4、5个按钮:首记录、末记录、关闭,【例5-2】 打开【例5-1】的图书信息.scx表单,进一步完善表单的功能,实现“上一条”、“下一条”按钮的功能,使得表单上能够逐一查看“图书”表的所有记录。,修改Commandgroup1命令按钮组click事件代码,为原多分支case语句增加两个判断分支,代码如下: case this.value=2skip -1if bof()go topmessagebox(“已经是第一条记录。“

45、)endifcase this.value=3skipif eof()skip -1messagebox(“已经是末记录。“)endif,【例5-3】在“图书信息管理”项目中建立如图所示的管理读者信息的表单,保存为“读者信息维护.scx”,单击“添加读者”按钮,可以通过表单录入新的读者信息。,“添加读者”命令按钮的Click事件代码如下:choice=messagebox(“确认添加新读者?“,4+32+256,“确认“)if choice=6append blankendifthisform.refresh,单击“是”按钮,函数值为6,【例5-4】打开“读者信息维护”表单,进一步完善表单的功

46、能,实现“删除读者”、“清除标记”、“物理删除”按钮的功能。,Command2命令按钮的click事件代码如下:delete thisform.refresh Command3命令按钮Click事件代码如下:recallthisform.refresh Command4命令按钮Click事件代码如下:choice=messagebox(“确认删除所有已经逻辑删除的记录“ , 4+32+256 , “确认“)if choice=6pack endifthisform.refresh,【例5-5】在“图书信息管理”项目中建立如图所示的“管理员密码修改”表单,在该表单中管理员可以自行修改登陆密码。,

47、修改Command1命令按钮的click事件代码如下: if alltrim(thisform.text1.value)alltrim(密码) ;or alltrim(thisform.text2.value) ; alltrim(thisform.text3.value)messagebox(“输入的密码有误,请检查。“)thisform.text1.value=“thisform.text2.value=“thisform.text3.value=“thisform.text1.setfocus elsereplace 密码 with alltrim(thisform.text2.valu

48、e) endif,1.顺序查询(条件定位),locate 范围 for ,命令格式:,继续查找命令,命令格式:,continue,不能单独使用,(P150),操作14:数据表的查询,【例6-1】在读者信息表中逐条显示男读者信息。,表单Form1的Init事件代码如下: LOCATE FOR 性别=“男”“下一条”按钮的Click事件代码如下: Continue if found()或 not eof()thisform.refresh elsemessagebox(“已查询完毕!“)this.enabled=.f. endif,命令按钮呈灰色显示,1. 将记录传送到数组 命令格式: scatter fields to 将当前记录的字段值按的顺序依次送入数组元素中。,操作15:表数据与数组之间的数据传送,(教科书P30-131),2. 将数组的数据传送到记录 命令格式: gather from fields 字段名表将数组的数据依次传送到当前记录,以替换相应字段值。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 实用文档 > 统计图表

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报