VisualFoxPro程序设计教程4数据库、表.ppt
Visual FoxPro程序设计教程,第四章 数据库的基本操作,2023/11/8,2,第四章 数据库的基本操作,教学目的:使学生能够熟练掌握数据库的建立和维护教学重点:数据库的建立和维护,2023/11/8,3,第四章 数据库的基本操作,4.1 数据库的建立4.2 建立数据库表4.3 表的基本操作4.4 索引4.5 参照完整性4.6 自由表4.7 多表同时使用,2023/11/8,4,5.1 数据库及其建立,在应用中将多个有联系的表组织在一起,构成数据库。,2023/11/8,5,4.1.1 建立数据库文件,1.菜单操作方式“文件”“新建”“数据库”“新建文件”打开数据库设计器。2.命令操作方式 命令格式:CREATE DATABASE|?说明:扩展名为.dbc。并同时生成同名的.dct数据库备注文件与.dcx索引文件。使用该命令建立数据库后并不打开数据库设计器,只是建立一个新的数据库文件并打开此数据库。用MODI DATA 文件名打开数据库设计器,2023/11/8,6,4.1.2 数据库的使用,1、数据库的打开菜单:“文件”“打开”打开的数据库文件名命令:OPEN DATABASE 注意:在数据库被打开的情况下,它所包含的所有表都可以使用。但这些表并没有被自动打开,使用时仍需要用USE命令打开。,2023/11/8,7,2、数据库的修改 命令:MODIFY DATABASE 3、数据库的关闭 命令:CLOSE ALL|DATABASE4、数据库的删除 命令:DELETE DATABASE 数据库文件名注意:要删除的数据库必须处于关闭状态,被删除的数据库中的表成为自由表。,2023/11/8,8,4.2 建立数据库表(3。29),4.2.1 在数据库中建立表表分两部分:表结构、表记录表结构描述了数据存放形式以及存储的顺序。表记录是表所要保存的数据的主体,数据由记录组成。一、建数据库表菜单方式:文件|新建项目管理器:数据|数据库|表|新建快捷菜单方式:数据库设计器“数据库”菜单或数据库设计器快捷菜单“新建表”命令方式:CREATE:当数据库打开时,在数据库中直接建立表;如果没有打开数据库,则建立的表是自由表。,2023/11/8,9,二.字段的属性的设置 1、字段显示属性,字段的显示属性包括显示格式、输入掩码和标题。(1)格式用于键入格式表达式,确定当前字段在浏览窗口、表单或报表中显示时采用的大小写、字体大小和样式。例:AT 只允许输出文字字符,用禁止有前导和结尾空格。(2)输入掩码输入掩码用于指定字段的输入格式。输入掩码必须按位指定。例:99-999:表示相应字段只能输入数字,可输入5位数字,第3个符号“-”不是输入掩码,照原样显示,“-”不用输入。例:学号 200599,前4位固定,后2位必须是数字字符。(3)标题(9。15)指定字段显示时的标题。用于为当前字段指定在浏览窗口、表单或报表中的标题显示内容。(选课),2023/11/8,10,2.字段有效性,有效性规则是一个与字段或记录相关的表达式,通过对用户的值加以限制,提供数据有效性检查。规则(关系式或逻辑式)输入字段内容时测试表达式。例:入学成绩0性别=”男”OR 性别=”女”信息(提示字符串)违反规则时显示的错误提示信息。例:“入学成绩应大于0”。默认值(字段默认值)用户向表中输入新记录时,显示默认值,除非键入新值,否则一直保留默认值。注意:字符型字段默认值应加定界符。,2023/11/8,11,3、记录有效性规则使用“表”选项卡设置。(3)触发器若要控制对已经存在的记录所作的非法操作,则应使用数据库表的记录级触发器。触发器是在某些事件发生时触发执行的一个表达式或一个过程。这些事件包括插入记录、修改记录和删除记录。触发器包括插入触发器、更新触发器和删除触发器。例如,设置“删除触发器”的表达式为“EMPTY(姓名)”,表示只有当相应记录的“姓名”字段为空时才能删除该记录,这个触发器用于保证不误删除记录。,2023/11/8,12,4.2.2 修改数据库中的表,1、在数据库设计器中,右键快捷菜单“修改”,即打开相应表的表设计器,在表设计器可以完成表结构的修改、建立索引以及设置字段属性和表的有效性规则。2、项目管理器:选中要修改的表,单击“修改”3、命令:MODI STRU,2023/11/8,13,4.3 表的基本操作,4.3.1 表的打开与关闭打开1 文件打开表2 命令:use 关闭:USE,2023/11/8,14,4.3.2 表记录的显示,1、菜单方式 显示|浏览2、项目管理器 选表|浏览3、命令(1)BROWSE 在浏览窗口显示。(2)LIST|DISPLAYFIELDS FORWHILEOFF,2023/11/8,15,4.3.2 表记录显示,说明:FIELDS:指定要显示的表达式,通常是字段名范围:(1)All:所有记录(2)Next n:包括当前记录的向尾部方向的连续n条记录(3)Record n:第n条记录(4)Rest:从当前记录到表尾的全部记录,2023/11/8,16,4.3.2 表记录显示,命令 LIST|DISPLAYFIELDS FORWHILEOFF说明:常量FOR:显示满足所给条件的所有记录WHILE:显示满足所给条件的记录,直到条件不成立为止。OFF:不显示记录号DISP:分页显示,省略范围和条件时只显示当前记录。,2023/11/8,17,4.3.3 表记录指针的定位,1.指针定位命令(1)绝对定位GOGO|TOP|BOTTOM绝对移动指针。如GO 3,GO TOP,GO BOTTOM。GO:记录指针指向具体的物理记录号,与索引无关。GO TOP,GO BOTTOM:指向逻辑首或尾记录。Go top Go 1,2023/11/8,18,(2)相对定位SKIPSKIP 相对移动指针。相对于当前记录移动。如SKIP,SKIP 3,SKIP 2。(算术加减),2023/11/8,19,(3)查询定位LOCATELOCATE FOR|WHILECONTINUE,2023/11/8,20,2.相关的几个函数BOF()、EOF()、RECNO()、recc()、FOUND()测试函数,1起始标记bof()=.t.1 2 共n条记录nn+1结束标记eof()=.t.,2023/11/8,21,USE AA&假定表中有5条记录?BOF(),RECNO()&显示.F.1SKIP 1?BOF(),RECNO()&显示.T.1GO BOTTOM?EOF(),RECNO()&显示.F.5SKIP?EOF(),RECNO(),RECCOUNT()&显示.T.6 5,2023/11/8,22,例4.3 在学生表中查询汉族男生的姓名、入学成绩和年龄。取年函数操作命令如下:逻辑表达式 USE 学生LOCAT FOR!少数民族否AND 性别=男DISP 姓名,入学成绩,YEAR(DATE()-YEAR(出生日期)CONTINUE?RECNO(),姓名,入学成绩,YEAR(DATE()-YEAR(出生日期),2023/11/8,23,4.3.4 表的修改,表记录修改1、浏览窗口:两种显示方式、窗口的分割与同步2、菜单方式:用”显示|浏览“打开表,用”表|替换字段“3、命令:REPLACE WITH,WITH,FORWHILE(中外),2023/11/8,24,例4.2写出对学生表进行如下操作的命令:(1)将少数民族学生的入学成绩增加20分。(2)将6号记录的出生日期修改为1983年9月7日;操作命令如下:USE 学生 REPLACE 入学成绩 WITH 入学成绩+20 FOR 少数民族否 GO 6&将记录指针定位到6号记录 REPLACE 出生日期 WITH 1983-09-07,2023/11/8,25,4.3.5 表记录的增加,一、表记录的增加1直接输入记录:建立库结构后2追加一批记录:显示追加方式 命令 APPEND说明:在表的末尾追加一批记录3追加一个记录:表追加新记录(ctrl+y)命令:APPEND BLANK说明:在表的末尾追加一个空记录4从其他文件追加记录:表追加记录命令:APPE FROM 文件名FIEL 字段名FROM 条件5、插入记录:INSERT BEFORE BLANK,2023/11/8,26,4.3.5 表记录的删除,1逻辑删除:(1)鼠标单击记录前(2)Ctrl+T(3)利用菜单:表删除记录(4)命令:DELETE FOR WHILE,2023/11/8,27,4.3.5 表记录的删除,2恢复记录(1)鼠标(2)表恢复记录(3)取消删除标记 RECALL FOR WHILE,2023/11/8,28,4.3.5 表记录的删除,3彻底删除(物理删除):(1)菜单:表“彻底删除”(2)命令:PACK真正物理删除,不能用RECALL恢复4.删除全部记录命令:ZAP 删除全部记录,只保存结构,2023/11/8,29,4.4 索 引(4.12),1 索引的概念 索引并不是重新排列表记录的物理顺序,而是另外形成一个索引关键表达式值与记录号之间的对照表,这个对照表就是索引文件。索引文件中记录的排列顺序称为逻辑顺序。索引后,对表进行操作时将按索引表中记录的逻辑顺序进行操作,表的物理顺序不变。,2023/11/8,30,如:原表为:按计算机成绩索引(升序)后,表变为:,2023/11/8,31,2.索引文件的种类,单索引文件复合索引文件 结构复合索引文件结构复合索引文件的文件名与相应的表名相同,扩展名cdx)其特殊性在于无论何时打开表,该索引文件将由系统自动打开。,2023/11/8,32,3 建立索引文件,1.四种索引主索引、侯选索引、唯一索引、普通索引。(1)主索引的关键字或关键字表达式值必须唯一(不能重复),一个表只能有一个主索引。(2)候选索引与主索引类似,但可有多个。(3)唯一索引只在关键字值重复的记录中取记录号小的那条记录。即索引后显示索引文件内容时关键字段值唯一,而表中索引依据的关键字段值不必唯一。(4)普通索引的索引关键字值相同时,按记录号从小到大排列。表中可建立多个普通索引,用不同的索引标识区别。,2023/11/8,33,2、在表设计器中建立索引(1)建立单项索引。(2)建立复合字段索引。(3)确定索引标识注意:表达式中的运算量必须是相同类型,若类型不同,需转换成同一类型。筛选记录。仅索引表中符合筛选条件的记录。注意:用表设计器建立的索引都是复合索引文件。,2023/11/8,34,例:就学生表建立结构复合索引文件,其中包含2个索引。(1)按学号的升序排列,不允许有学号相同的记录(2)先按性别升序,性别相同再按入学生成绩升序排列。索引表达式:(1)学号(候选)(2)性别+str(入学成绩),2023/11/8,35,4.为数据库表建立索引,为了建立表之间的永久关联,需要为数据库表建立索引。方法:选定数据库表“修改表”按钮打开表设计器,2023/11/8,36,5.建立表之间的永久联系,基础基于索引联系类型两个表的索引中至少有一个是主索引。父表为主索引,而子表的索引类型决定联系的类型:(1)一对一关系:(父)主索引(子)主索引或候选索引(2)一对多关系:(父)主索引(子)普通索引,2023/11/8,37,5.建立表之间的永久联系,永久联系形式数据库设计器中显示为表索引之间的连接线。操作方法在数据库设计器中,首先,选中父表中的主索引字段,拖动到子表中的对应字段,再松开鼠标左键。,2023/11/8,38,6.编辑表间的永久联系,单击关系连线,此时连线变粗,(1)从“数据库”菜单项中选择“编辑关系”命令。(2)用鼠标右键单击连线,从弹出的快捷菜单中选择“编辑关系”或“删除关系”命令。(3)双击连线,打开“编辑关系”对话框,在该对话框中,通过在下拉列表框中重新选择表或相关表的索引名则可以修改指定的关系。,2023/11/8,39,4.5 设置参照完整性,参照完整性生成器:供用户指出保证数据完整性的要求,根据用户要求生成参照完整性规则以保证数据完整性。1、实体完整性与主关键字指行的完整性。即保证所有行都有唯一的标识作符即主关键字。主关键字的修改与删除要取决于与之建立联系表间要求的完整性。主关键字不能为空。,2023/11/8,40,4.5 设置参照完整性,2、域完整性与约束规则域完整性是指给定列的输入有效性。对指定列的数据具有正确的数据类型、格式和有效的数据范围。,2023/11/8,41,4.5 设置参照完整性,3、参照完整性生成器:供用户指出保证数据完整性的要求,根据用户要求生成参照完整性规则以保证数据完整性。清理数据库:在建立参照完整性之前必须首先清理数据库,所谓清理数据库是物理删除数据库各个表中所有带有删除标志的记录。方法:“数据库”“清理数据库”,2023/11/8,42,参照完整性生成器窗口,选择“数据库”菜单项或数据库设计器快捷菜单中的“编辑参照完整性”命令,或在“编辑关系”对话框中单击“参照完整性”按钮,可打开参照完整性生成器窗口。(1)“更新规则”选项卡,级联:当更改父表中的某一记录时,子表中相应的记录将会改变。限制:当更改父表中的某一记录时,若子表中有相应的记录,则禁止该操作。忽略:两表更新操作将互不影响。,2023/11/8,43,(2)“删除规则”选项卡级联:当删除父表中的某一记录时,将删除子表中相应的记录。限制:当删除父表中的某一记录时,若子表中有相应的记录,则禁止该操作。忽略:两表删除操作将互不影响。(3)“插入规则”选项卡限制:当在子表中插入某一记录时,若父表中没有相应的记录,则禁止该操作。忽略:两表插入操作将互不影响。,2023/11/8,44,4.6 自由表,自由表:不属于任何数据库的的表数据库表:属于某一数据库的表。数据库表与自由表的区别:数据库表具有长表名、长字段名。达128个字符。数据库表具在字段属性、有效性规则及参照完整性。自由表不具有以上特点,2023/11/8,45,4.6 自由表,1、添加自由表在数据库设计器中将自由表添加到数据库就成为数据库表。方法:右击数据库设计器空白处,选择“添加表”单击数据库设计器工具栏的“添加表”2、移出数据库表在数据库设计器中将数据库表移出到就成为自由表。方法:右击数据库设计器中表的标题,选择“删除”|移去单击数据库设计器工具栏的“删除表”,2023/11/8,46,4.7 多个表的操作,1.工作区的概念工作区:是用来保存表及其相关信息的一片内存空间。当前工作区:当前正在操作的工作区。注意:(1)同一时刻,每个工作区中只能打开一个表文件。(2)在任何一个时刻用户只能选中一个工作区进行操作。(3)若在一个工作区中打开一个新的表,则该工作区中原来的表将被关闭。,2023/11/8,47,2.工作区号与别名不同工作区可以用其编号或别名来加以区分。Visual FoxPro提供了32767个工作区,系统以132767作为各工作区的编号。工作区的别名有两种:(1)系统定义的别名:110号工作区的别名分别为字母AJ;(2)用户定义的别名,用命令“USE ALIAS”指定。若未用ALIAS子句对表指定别名,则以表的主名作为别名。,2023/11/8,48,3.工作区的选择 命令格式是:SELECT|0 命令中各子句的含义是:(1)工作区的切换不影响各工作区记录指针的位置。每个工作区上打开的表有各自独立的记录指针。通常,当前表记录指针的变化不会影响别的工作区中表记录指针的变化。(2)SELECT 0表示选择当前没有被使用的最小号工作区为当前工作区。(3)也可在USE命令中增加IN子句来选择工作区并打开表。例如,在1号工作区打开学生表,并给它取一个别名:USE 学生 ALIAS zg IN 1或 USE 学生 ALIAS zg IN A,2023/11/8,49,4.工作区的互访在当前工作区中可以访问其他工作区中的表的数据,但要在非当前表的字段名前加上别名和连接符,引用格式为:别名.字段名或别名-字段名。例:B.姓名 或 B-姓名,2023/11/8,50,作业:教材后习题1,2,6,7,8,9,上机实验:在磁盘上建立一个文件夹,名为“订货管理”。完成教材P94习题5(1)(2),要求将相应文件存放在“订货管理”文件夹中。教材P82习题10、13,上机指导实验二。,2023/11/8,51,5.1.2 向数据库添加自由表,表的两种存在状态:(1)自由表:不属于任何数据库的表。自由表的字段名最多包含10个字符,(2)数据库表:包含在数据库中的表。数据库表的字段名最多包含128个字符。添加表:数据库设计器中“添加表”按钮。移去或删除表 在数据库设计器中选中一个数据库“移去表”,2023/11/8,52,第八章 Visual FoxPro项目管理器,Visual FoxPro项目是文件、数据、文档和对象的集合,项目管理器是组织和管理这些文件的工具。项目文件的扩展名为.pjx。,2023/11/8,53,8.1 建立与打开项目文件,建立文件新建文件类型:项目新建文件打开文件打开,2023/11/8,54,8.2 项目管理器的界面,项目管理器有6个选项卡1“数据”选项卡包含了一个项目中的所有数据:数据库、自由表、查询和视图。2“文档”选项卡包含了处理数据时所用的全部文档,表单,报表及标签。3“类”选项卡显示和管理由类设计器建立的类库文件。4“代码”选项卡包含了用户的所有代码程序文件:程序文件、API库文件、应用程序等。5“其他”选项卡显示和管理下列文件:菜单文件、文本文件、由OLE等工具建立的其它文件(如图形、图像文件)。6“全部”选项卡该选项卡显示和管理以上所有类型的文件。,2023/11/8,55,8.2 项目管理器的界面,项目管理器的命令按钮项目管理器中有许多命令按钮,并且命令按钮是动态的。“新建”、“添加”、“修改”、“浏览”、“运行”、“打开”、“关闭”、“预览”、“移去”、“连编”等。“移去”按钮从项目中移去选定的文件或对象。Visual FoxPro将询问是仅从项目中移去此文件,还是同时将其从磁盘中删除。“连编”按钮连编整个项目或应用程序,还可以连编一个可执行文件。,2023/11/8,56,小结,表的建立、显示、维护、排序与索引、统计与计算、工作区。数据库的建立、管理项目管理器的使用,2023/11/8,57,重点命令,OPEN DATA 打开数据库CLOSE DATA 关闭数据库DELE DATA 删除数据库QUIT 退出VFPUSE 打开表USE关闭表MODI STRU修改表结构LIST(DISP)STRU显示表结构LIST、DISP显示表记录BROWSE在浏览窗口显示表记录APPEND在表尾追加多条记录REPLACE WITH FOR 替换字段,2023/11/8,58,重点命令,DELE逻辑删除RECALL恢复逻辑删除PACK物理删除ZAP 删空表记录LOCA、CONTINUE 查找记录SELE 选择当前工作区GO、GO TOP、GO BOTT绝对移动记录指针SKIP相对移动记录指针范围的四种表示:ALL 所有记录NEXT N包括当前记录的下N条记录RECO N第N条记录REST从当前记录到表最后一条记录的所有记录,2023/11/8,59,函数,BOF()表头测试函数EOF()表尾测试函数RECNO()记录号测试函数RECCOUNT()记录个数测试函数FOUND()查找是否成功测试函数DATE()系统日期函数YEAR()求年份函数STR()将数值型转换成字符串函数MOD()求余数函数,