表与数据库的基本操作.ppt

上传人:zhu****ei 文档编号:3585062 上传时间:2019-12-18 格式:PPT 页数:178 大小:1.45MB
返回 下载 相关 举报
表与数据库的基本操作.ppt_第1页
第1页 / 共178页
表与数据库的基本操作.ppt_第2页
第2页 / 共178页
表与数据库的基本操作.ppt_第3页
第3页 / 共178页
点击查看更多>>
资源描述
第4章,表与数据库的基本操作,本章要点,1、建立数据库与表(1)基本概念(项目、数据库、数据库表及其之间的关系,自由表与数据库表的异同)(2)数据库的建立与操作(3)表的建立与基本操作(4)排序与索引(5)查询,2、数据完整性3、数据统计与计算4、多表的操作,4.1概述,4.1.1VFP中表、数据库、项目之间的关系,在VFP中数据库不仅存储表,而且也存储表与表之间的关联、基于表的视图和查询以及有效管理数据库的存储过程。数据库对应磁盘上一个扩展名为.DBC的文件,并且在建立数据库的同时,系统自动生成一个与数据库同名的.DCT数据库备注文件和.DCX的数据库索引文件。作为一个数据库既可以独立管理,也可以和与其相关的表单文件、报表文件、程序文件等组织成为一个项目,由这个项目来统一管理。VFP中的表、数据库、项目之间的关系如下图所示。,1、项目、数据库、数据库表之间的关系,什么是项目?项目管理器的功能作用?,2、数据库表、自由表之间的关系,自由表,思考题对于一个自由表,能否添加到多个数据库中?,3、数据库的概念,数据库是表的集合。数据库文件具有.dbc扩展名,其中可以包含一个或多个表、关系、视图和存储过程等。注意:.dct,.dcx文件的特点,一个VisualFoxPro表或.dbf文件,能够存在以下两种状态之一:与数据库相关联的数据库表;与数据库不关联的自由表。二者的绝大多数操作相同且可以相互转换。相比之下,数据库表的优点要多一些,具有以下优点:,、数据库表与自由表的异同与特点,表中的长字段名表中字段的标题和注释默认值、输入掩码和表中字段格式化建立字段级规则和记录级规则支持参照完整性的主关键字索引和表间关系设置INSERT、UPDATE或DELETE事件的触发器,1)命令格式VFP命令通常由2部分组成。第1部分是命令动词,指明了该命令的功能。第2部分是跟随在命令动词后面的短语,这些短语通常用来对所要执行的命令进行某些限制性的说明。一般情况下,命令动词表示了命令的功能,命令短语提供执行命令所需要的各种参数。命令短语本身可分为两类,一类是必选短语,另一类是可选短语。通常,命令动词后面一般都有几个可选短语,用户根据需要选择不同的短语,使得同一个命令可实现多种任务,从而可以大大地丰富命令的功能。VFP命令格式为:,4.1.2VFP命令格式及使用规则,【例4.1】USE和DISPLAY的命令格式。USEDISPLAYFIELDSFOR|WHILETOPRINTERPROMPT|TOFILE第1条命令是打开数据表,命令动词是USE,命令短语可缺省;第2条命令是显示当前表中记录,命令动词是DISPLAY,其余部分为命令短语。,2)命令短语命令动词规定要执行的操作,而命令短语指出操作的范围、条件、字段、结果输出位置等内容。命令短语又称为子句。常用子句的含义如下表所示。,说明:FOR的作用是:在规定的范围中,按条件检查全部记录,即从第一条记录开始,满足条件的记录就执行该命令,不满足就跳过该记录,继续搜索下一条记录,直到最后一条记录。若省略则默认为ALL。WHILE的作用是:在规定的范围中,只要条件成立,就对当前记录执行该命令,并把记录指针指向下一条记录,一旦遇到使条件不满足的记录,就停止搜索并结束该命令的执行。即遇到第一个不满足条件的记录时,就停止执行该命令,即使后面还有满足条件的记录也不执行。若省略范围则默认为REST。,3)命令及子句的使用规则VFP的命令有的比较短,而有的则相当长,书写时应遵循如下规则:任何命令必须以命令动词开头,命令中的各个子句可以按任意次序排列,各个子句以一个或多个空格隔开。一条命令的最大长度为254个字符,一行写不下时,可以使用“;”续行。命令动词和子句的动词可以用其前4个字母缩写表示,例如,DISPLAY可写成DISP。但从程序的可读性来考虑,不提倡略写命令动词。命令中的字符大小写可以混合使用,系统不区分大小写,为了美观可以将命令关键字大写,而其他内容小写。,4.2数据表的创建及其基本操作,在VFP中,存储数据的表和经常使用的表格基本相似,表中的列代表记录中的字段(Field),字段包含字段名和字段值。所有字段名的集合构成了表的第1行(表头),即数据表的结构(Structure);所有字段值的集合分别构成了表的每一行,即表的记录(Record)。要创建一个存储数据的新表,首先必须对有关用户的需求进行分析,也就是应清楚表中存储的数据的用途,以便明确如何使用表中的数据、该收集什么样的数据以及如何收集这些数据等。然后根据存储这些数据的要求来设计表的结构。,4.2.1表结构及字段的基本要素,1)表的结构,2)表中存储数据的数据类型为了正确存储数据、处理数据和有效利用存储空间,创建表时必须定义字段的数据类型。对于要存储的数据,有2点必须清楚,一是它们的数据类型(如字符数据,数值数据、日期数据等);二是数据的范围(大小),以及存储这些数据的有效数据空间的最小值和最大值,这是表结构设计的关键。字段的数据类型决定了:该字段可以存放哪种类型的值。例如,不能在数值型字段存放文本数据。该字段存放数据占用的存储空间大小。例如,货币型数据的值都用8个字节存储。该字段可进行哪些操作。例如,对于备注型和通用型数据不能进行排序和建立索引。字段的数据类型有13种,见书上表4.3,3)字段的基本要素(1)字段名字段名是表中列的名称,是数据库的变量,即字段变量。对表和数据库操作时,可根据字段名引用表中数据。字段的命名应满足以下要求:字段名由字母、汉字、数字及下划线组成,但必须以字母或汉字开头,中间不能有空格。数据库表的字段名最长为128个字符(自由表字段名长度不得超过10个字符)。,(2)字段类型和宽度字段类型决定存储在字段中的值的数据类型,字段宽度决定存储数据的宽度和取值范围。VFP中可使用的字段类型如表4.3中所示,常用的有字符型、数值型、日期型、逻辑型、备注型、通用型等几种。(3)空值(NULL)选择是否允许字段为空。字段空值与空字符串、数值0具有不同的含义,是指尚未输入具体数值的数据。如果字段不允许为空,则输入数据时必须输入相应的数据,否则被设置为默认值(例如,数值型被默认为0)。允许字段为空时,可暂时不输入数据,而且不会出错。,(4)显示控制(数据库表所具有的属性)用来定义字段的显示格式、输入掩码和字段标题。格式为字段在表单、浏览窗口等界面中的显示格式;输入掩码用来限制或控制用户输入的格式,以避免一些错误格式的输入;而标题可以设定字段名显示时的文字内容,默认为字段名。(5)字段有效性检验(数据库表所具有的属性)用来定义字段的有效性规则、违反规则的提示信息和字段的默认值。有效性检验可以防止用户输入错误数据。(6)字段注释(数据库表所具有的属性)为字段添加注释便于数据库维护。注释只起提示作用,不会对具体操作带来任何影响。,4.2.2表的创建,在VFP中数据表的建立有2种方法:一种方法是使用表设计器;另一种方法是使用表向导。无论是使用表设计器,还是用表向导,都必须按照以下步骤进行:创建表结构。输入记录。1)创建表结构表结构的设计可以通过VFP提供的【表设计向导】和【表设计器】来实现,也可以用SQL命令来建立。这里主要介绍用【表设计器】来创建表结构的步骤。,(1)启动表设计器可以用下述方法启动表设计器:用菜单方式启动表设计器VFP启动后,选择【文件】菜单中的【新建】命令,则弹出【新建】对话框。在该对话框中选择【表】,再单击【新建文件】按钮,弹出【创建】对话框。在【输入表名】文本框中输入新建数据表的表名(例如输入dab),选择保存类型为“表/DBF(.dbf)”,单击【保存】按钮,即启动表设计器对话框。表设计器对话框如下图所示。,表设计器对话框:,用Create命令启动表设计器格式:Create功能:启动表设计器并创建表。说明:为指定要创建的表名,包括路径信息。例如,在命令窗口中输入“Createc:dab.dbf”,按回车键就可启动表设计器。创建的表(dab.dbf)将保存在C盘根目录下。,(2)创建表结构启动表设计器后,通过表设计器能方便地设计出符合自己需要的表结构。2)输入记录数据表结构建立好后,就可以向数据表中输入记录了。VFP提供了两种记录输入方式:立即输入方式。追加输入方式。,立即输入方式:是指用表设计器建立好表结构后,当出现如图4.4所示的对话框时选择【是】按钮,,即进入如图4.5所示的画面,光标停留在第一个字段上,表示可以开始输入数据。,追加输入方式:是向已存在的表的末尾追加记录。要向打开的数据表中追加新记录,可以用菜单操作方式或命令操作方式。用菜单命令追加记录追加单个记录:选择【表】菜单下的【追加新记录】命令,则只能在表的末尾添加一个空记录,该记录成为当前记录,用户即可输入记录数据。追加多个记录:选择【显示】菜单下的【追加方式】命令,则在表的末尾添加一个空记录,用户即可输入记录数据;当向该记录输完数据时,其后又出现一空记录,即可进行多条记录的追加。,用APPEND命令来追加记录格式:APPENDBLANK功能:在当前表的末尾追加新记录。说明:如果无BLANK选项,则进入全屏幕编辑窗口,在该窗口可以输入多条记录。若有BLANK选项,则直接在数据表末尾增加一条空记录,而不进入全屏幕编辑窗口。,特别指出的是:备注型和通用型字段的内容不能直接输入到表中。备注型字段数据的输入方法是在该记录的备注字段(memo)处双击鼠标,或当光标移到备注字段后按Ctrl+PgDnCtrl+PgUp/Ctrl+Home组合键,系统打开一文本编辑窗口,在该窗口即可输入相应的备注字段的内容。输入结束可单击窗口关闭按钮,或使用Ctrl+W组合键保存内容,系统返回到记录输入界面。这时备注字段将变为Memo(第一个字母为大写),表示该记录的备注字段已有数据。如果按Esc键,则放弃存盘并返回到记录输入界面。,在该记录的备注字段(memo)处双击鼠标;或当光标移到备注字段后按Ctrl+PgDnCtrl+PgUpCtrl+Home组合键;系统打开一文本编辑窗口,在该窗口即可输入相应的备注字段的内容。输入结束可单击窗口关闭按钮,或使用Ctrl+W组合键保存内容,系统返回到记录输入界面。这时备注字段将变为Memo(第一个字母为大写),,备注型和通用型字段的输入备注型字段和通用型字段的内容不能直接输入到表中。备注型字段数据的输入方法:,通用型字段接受的数据是一个嵌入或链接的OLE对象。其链接方法是先将链接的对象放入剪贴板中,然后用鼠标双击该通用型字段,即进入通用型字段编辑窗口,再选择【编辑】菜单下的【选择性粘贴】选项,即进入“链接”对话框。嵌入方法的操作同上,只是选择【编辑】菜单下的【插入对象】选项,进入【插入对象】对话框,选择要插入的对象,如下图所示。,通用型字段数据的输入方法,再通过word插入菜单的插入图片操作方法进行:要清除备注型字段或通用型字段的内容,方法是在该记录的备注型字段或通用型字段处双击鼠标,然后选择【编辑】菜单下的【清除】命令即可。,插入word图片选择【编辑】菜单下的【插入对象】选项,进入【插入对象】对话框,如图:,4.2.3表的打开与关闭,在VFP中,使用表时都必须先打开它,操作完成后都要关闭。表的打开实质上就是将存储在外部存储器上的表文件调入内存;表的关闭就是将表文件从内存保存到外部存储器上,同时释放占用的内存和工作区。1)表的打开可以通过下述方法来打开表文件:(1)用菜单打开表选择【文件】菜单中的【打开】命令,弹出【打开】对话框,在【文件类型】列表中选取“表(*.dbf)”项,再选择所要打开的表文件,单击【确定】按钮后就打开选中的表。表文件打开后,就可以对其进行操作,如浏览表中的记录、向表中追加新记录、修改表结构等操作。,(2)用USE命令打开表格式:USEIN工作区号Alias功能:打开一个表文件。说明:USE命令的用法相当灵活,这里给出的仅是USE命令的一种基本形式。一个工作区同时只能打开一个表,所以使用USE命令在一个工作区打开一个表时,该工作区中先前打开的表自动关闭。工作区与别名的概念参看4.7节。,如果表中含有备注型字段,则打开表时,相应的备注文件(FPT)同时打开。刚建立的表自动处于打开状态,不需再用USE命令打开。例如,假设在当前目录下有文件名为“dab.dbf”的数据表,在命令窗口中输入如下命令就能将该表打开。USEdab.dbf&打开表文件时,扩展名可以缺省,2)表的关闭对数据表的操作完成后,应将表关闭,关闭表有多种命令。(1)关闭当前工作区打开的表格式:USE功能:关闭当前工作区打开的表。(2)关闭当前打开的所有表格式1:CLOSEALL功能:关闭所有打开的数据库;关闭所有工作区中的表和索引,并选择1号工作区为当前工作区。格式2:CLEARALL功能:关闭所有工作区中打开的表,选择1号工作区为当前工作区,同时释放所有内存变量。,当数据表建立好后,必要时需要显示(查看)数据表中的内容,显示数据表中的记录可通过下列操作完成。1)菜单操作(1)浏览显示选择【文件】菜单中的【打开】命令,打开要浏览显示的数据表。选择【显示】菜单中的【浏览】命令。数据表中的记录显示在浏览窗口上,如下图所示。,4.2.4表中记录的显示,(2)编辑显示第一步与浏览显示操作相同;第二步是从【显示】菜单中选择【编辑】菜单命令。此时,屏幕上就以编辑方式显示数据表的内容。编辑显示窗口如下图所示。,浏览和编辑显示数据表中的记录时,属于全屏幕编辑操作,用户可以任意移动光标到需要的记录、字段上,并可直接对记录数据进行修改,也可向表中追加新记录。,格式:LIST|DISPLAYFIELDSFOR|WHILEOFFTOPRINTERPROMPTTOFILE,2、命令操作DISPLAY命令和LIST命令用于将当前表中的记录显示到VF的主窗口。,LISTFIELDSFORDISPLAYFIELDSFOR,【例4.2】在VFP主窗口中显示学生档案表(dab.dbf)中的全部记录。在命令窗口中输入下列命令序列:USEdab&打开dab.dbf表LISTUSE&关闭dab.dbf表在主窗口中显示结果如下图所示。,【例4.3】显示学生档案表(dab.dbf)中机械制造4班的所有女学生的记录,且只显示学号、姓名、性别、出生日期和专业班级字段,不显示记录号。在命令窗口中输入如下命令序列:USEdabDISPALLFOR专业班级=机械制造4班AND性别=女FIELDS学号,姓名,性别,出生日期,专业班级OFFUSE在主窗口中显示结果如下图所示。,通过对xsmd中的记录按照要求显示,掌握范围子句,条件子句,字段子句的使用,命令使用演示,问题1:显示表中所有王姓同学的基本信息?问题2:显示表中所有王姓女同学的基本信息?问题3:显示表中会计专业所有王姓女同学的基本信息?,条件表示方法1dispallforlike(王,left(姓名,2)dispallforlike(王,left(姓名,2)and性别=女dispallforlike(王,left(姓名,2)and性别=女and专业=会计学,条件表示方法2dispallforleft(姓名,2)=王“and性别=女dispallforleft(姓名,2)=王and性别=女dispallforleft(姓名,2)=王and性别=女and专业=会计学,显示单名的所有同学dispallforlen(substr(姓名,1)=4-能显示吗?如果不能,什么原因dispallforlen(substr(alltrim(姓名),1)=4dispallforlen(substr(alltrim(姓名),1)=4andleft(姓名,2)=王,1、记录指针的概念,4.2.5记录指针的定位,1)当前记录:记录指针指向的记录称为当前记录。刚打开的数据表,记录指针总是指向第一条记录(首记录)2)记录指针的改变:对数据表的操作将改变记录指针的位置,每一个数据表都有开始和结尾标志,可以用BOF()函数和EOF()函数来测试,根据函数的返回值“.T.”或“.F.”判断记录指针的位置。,一个数据表文件中可能包含成千上万条记录,要对哪一条记录操作,就存在记录定位的问题。在VF中,对任何打开的数据表文件,都提供了一个记录指针,用于完成记录的定位。,2)记录指针的定位(移动)在建立数据表时,每条记录都有一个编号,称为记录号,记录号依据输入记录的顺序从1开始编号。对记录指针的定位,实际上就是将记录指针移到相应的记录号上。移动记录指针的方法有菜单操作方式和命令操作方式2种。(1)菜单操作方式在浏览窗口或编辑窗口显示数据记录时,选择【表】菜单中的【转到记录】命令,出现移动记录指针的下级菜单命令选项,如下图所示,根据这些选项可迅速移动记录指针到需要的记录位置。命令选项的具体含义如下:第一个:将记录指针移到第1条记录。最后一个:将记录指针移到最后一条记录。下一个:将记录指针移到当前记录的下一条记录。上一个:将记录指针移到当前记录的上一条记录。记录号:将记录指针移到指定记录号的记录上。定位:将记录指针移到符合条件的记录上。当选择此菜单命令时将出现如图4.11所示的对话框。,(2)命令操作方式记录指针的绝对移动绝对移动是将记录指针直接定位到指定的记录上。格式:GOTO|TOP|BOTTOM功能:将记录指针定位到指定的记录上。说明:的值指明记录号,即直接按给定的记录号定位。选择TOP或BOTTOM则分别将记录指针定位到表文件的首、尾记录上。,【例4.4】用GO命令移动学生档案表(dab.dbf)中的记录指针。在【命令】窗口输入如下命令序列:USEdabGO5&记录指针指向记录号为5的记录GOTOP&记录指针指向首记录GOBOTTOM&记录指针指向尾记录USE,记录指针的相对移动格式:SKIP功能:以当前记录为基准向上或向下移动记录指针。说明:的值指明记录指针移动的相对记录数;若为负数时,则表示记录指针向上移动,否则向下移动。缺省,则记录指针向下移动1条记录。,【例4.5】用SKIP命令移动学生档案表(dab.dbf)中的记录指针。在命令窗口输入如下命令序列:USEdabGO5SKIP3&指针从当前记录开始向下移动3条记录SKIP&指针从当前记录开始向下移动1条记录SKIP-2&指针从当前记录向上移动2条记录USE,按条件定位记录位置LocateFor与命令联合使用Continue,usexsmdlocatefor姓名=王芳dispcontidisp,43表的编辑与维护,1)表结构的修改在创建数据表结构时,难免会考虑不周或出错,在使用过程中如果发现某些字段设计不符合要求等问题,就要对表结构进行必要的修改。在VFP中,利用表设计器来修改表结构。具体操作如下:打开需要修改结构的表文件。选择【显示】菜单中的【表设计器】命令,弹出【表设计器】对话框。在【表设计器】对话框中修改表的各字段要素的值(如字段名、数据类型等)。也可以在【命令】窗口中输入MODIFYSTRUCTURE命令来启动表设计器,然后对表结构进行修改。,431数据表的修改,说明:对表结构可做的更改包括添加和删除字段;修改字段名称、大小和数据类型;添加、删除或修改索引标识等。在更改表结构之前,VFP自动备份当前表。当修改完之后,将备份表中包含的数据追加到新修改的表结构中。如果表有一个备注字段,也将创建一个备注备份文件。表备份文件的扩展名为.BAK,备注备份文件的扩展名是.TBK。VFP为原表文件创建一个.BAK文件,并且为原备注文件(如果存在)创建一个.TBK备份文件。如果使用MODIFYSTRUCTURE命令时出现问题,可以删除新文件,并把.BAK文件和.TBK文件改回原文件扩展名(.DBF和.FPT)。,2)记录数据的修改(1)使用菜单命令修改记录首先打开数据表文件,再选择【显示】菜单中的【浏览】或【编辑】命令,这时当前数据表的记录显示在浏览窗口或编辑窗口中,再将光标移到需要修改的记录字段上进行修改即可,修改完成后使用Ctrl+W存盘。(2)用BROWSE命令修改记录该命令有许多控制记录显示的子句,这里仅介绍它的常用命令格式。格式:BROWSEFIELDSFOR功能:在浏览窗口显示记录,同时也可以修改记录。,【例4.6】用BROWSE命令对学生档案表(dab.dbf)中的记录进行修改。要求按指定的姓名、性别、专业班级、学号字段顺序显示。USEdabBROWSEFIELDS姓名,性别,专业班级,学号显示结果如下图所示。,【说明】:1)该命令适合对当前库进行成批地、有规律地修改。2)缺省范围、条件时,仅替换当前记录3)ADDITIVE,只对备注型字段修改有效。选择ADDITIVE:表示添加内容不选择ADDITIVE:表示替换内4)表达式的值不能超出字段宽度,否则,数据无效。,(3)替换修改1)命令方式【格式】REPLACEWITHADDITIVE,WITHADDITIVE.FOR,【功能】用指定表达式的值替换当前表中满足条件记录的指定字段的值。,应用事例,int(date()-出生日期)/365),ADDITIVE把对备注字段的替代内容追加到备注字段的后面。ADDITIVE只对替换备注字段有用。如果省略ADDITIVE,则用表达式的值改写备注字段原有内容。,【例4.7】用REPLACE命令对学生档案表(dab.dbf)进行如下操作:将机械制造4班所有同学的“专业班级”字段的数据清空。USEdabREPLACEALL专业班级WITHFOR专业班级=机械制造4班LIST,前面介绍的APPEND命令是将记录追加到数据表末尾,如果想在2条记录之间插入记录,只能在命令窗口中用插入记录命令来实现。格式:INSERTBLANKBEFORE功能:在当前记录之后或之前插入一条记录。,4.3.2插入记录,说明:BLANK:表示插入一条空白记录,无此选项时,进入全屏幕编辑状态。BEFORE:表示在当前记录之前插入,否则在当前记录之后插入。,【例4.8】在学生档案表(dab.dbf)中,要求在3号与4号记录之间插入1条空白记录。在命令窗口中输入如下命令:USEdabGO4INSERTBLANKBEFORE表示在3号记录之后插入了一条空白记录,其记录号为4,原表中之后记录的记录号均依次增加1。,在VFP中,删除记录是经过2步完成的。第1步是给要删除的记录加上删除标记,称为逻辑删除,做了逻辑删除标记的记录并没有真正从数据表中删除,以后还可以恢复;要真正删除表中的记录,则执行第2步,删除带有删除标记的记录,称为物理删除。1)记录的逻辑删除(1)使用菜单命令对记录作逻辑删除标记首先打开要操作的数据表,用浏览方式或编辑方式显示该数据表中的记录,例如用浏览显示学生档案表(dab.dbf)中的记录;,4.3.3记录的删除与恢复,再用鼠标单击记录左边的逻辑删除标记块,标记块颜色变成黑色,代表此记录已作了逻辑删除标记,如下图中学号为20050015和20050020的记录已作了逻辑删除。,另外,也可以选择【表】菜单中的【切换删除标记】命令来设置删除标记。,【例4.9】对学生档案表(dab.dbf)中专业班级是“英语3班”的所有学生记录作逻辑删除。操作过程如下:打开学生档案表。用浏览或编辑方式显示该数据表。选择【表】菜单中的【删除记录】命令,弹出【删除】记录对话框,如下图所示。,将【作用范围】选项设定为“All”。单击【For】选项右边的按钮,显示【表达式生成器】对话框,如下图所示。,利用图4.15所示的对话框来建立条件表达式。先双击【字段】列表框中“专业班级”字段,选取该字段;再在【逻辑】下拉列表框中选择“=”;然后输入“英语3班”,则在【表达式】列表框中显示建立的条件表达式,再单击【确定】按钮,将在【删除记录】对话框的【For】文本框中显示同样的条件表达式。确认无误后,单击【删除】按钮,即将所有英语3班的学生记录作了逻辑删除。如下图所示,共有4条记录作了逻辑删除标记。,(2)用命令对记录作逻辑删除格式:DELETE范围FOR|WHILE功能:对当前数据表中在指定范围内满足条件的记录作逻辑删除。若缺省范围和FOR|WHILE选项,则只对当前记录作逻辑删除。,【例4.10】对学生档案表(dab.dbf)中的记录做如下操作:对姓名为“那措央中”的记录作逻辑删除。命令序列为:USEdabDELEFOR姓名=那措央中LIST&查看删除效果USE&关闭表,对学生档案表(dab.dbf)中专业班级是“计算机1班”和“机械制造4班”的所有记录作逻辑删除。命令序列为:USEdabDELEFOR专业班级=计算机1班OR专业班级=机械制造4班ALLLIST&查看删除效果USE,从图上显示的结果可以看出,作了逻辑删除的记录号后面有一个“*”,即逻辑删除标记。,(3)显示、隐藏逻辑删除记录【格式】SETDELETEDON|OFF【功能】将表文件中已逻辑删除的记录隐藏或显示。说明3点,1)、逻辑删除是在该记录上加一个删除标记,当SETDELETED设置为OFF时,对该表文件的各种操作,对被删除的记录同样有效。2)、当SETDELETEDON时,对表文件中数据的各种操作,一般均不包括有删除标记的记录3)、SETDELETED的缺省状态是OFF。,setdeleoffcounttox?x,setdeleoncounttoy?y,2)恢复逻辑删除记录恢复逻辑删除是将被逻辑删除的记录恢复为正常记录。即去掉“*”号。,(1)命令方式RECALLFOR,功能:将当前表文件中指定范围内满足条件的已作删除标记“*”的记录恢复,即去掉这些删除记录的删除标记,使之成为正常记录。,说明:,FOR、WHILE等各项选项意义同前;如果同时缺省和子句,则仅仅恢复当前记录事例演示操作,【例4.11】恢复学生档案表(dab.dbf)中机械制造4班所有作了逻辑删除的记录。命令序列为:USEdabRECALLALLFOR专业班级=机械制造4班LISTUSE,3)记录的物理删除逻辑删除记录只是为记录加上一删除标记,并未真正从数据表中删除该记录。要将这些记录真正从数据表中删除称为物理删除。(1)使用菜单命令删除作了逻辑删除标记的记录其具体操作步骤如下:打开要删除记录的表。用浏览或编辑方式显示该数据表。选择【表】菜单中的【彻底删除】命令。,3)物理删除记录物理删除是将当前表文件中被逻辑删除的记录全部清除。(1)命令方式PACKMEMODBF【功能】将当前表文件中所有带删除标记(*)的记录全部真正地删除掉。PACK命令将删除数据库文件中作了删除标记的记录,同时压缩相应的备注文件。,说明:MEMO子句:从备注文件中删除未使用空间,但不从表中删除标有删除标记的记录。备注字段的信息保存在一个相关的备注文件内。备注文件的文件名与表相同,扩展名.FPT。DBF子句:从表中删除带删除标记的记录,但不影响备注文件。当使用PACK命令时,VFP把所有没作删除标记的记录复制到一个临时表(TemporaryTable)中。执行完PACK命令后,VFP把原表从磁盘上删除,同时用原表名命名临时表。,【例4.12】对学生档案表(dab.dbf)进行如下操作,逻辑删除专业班级是“英语3班”的所有记录,再从表中物理删除这些记录,并查看结果。命令序列如下:USEdabDELETEALLFOR专业班级=“英语3班”&逻辑删除PACK&物理删除表中作了逻辑删除的记录BROWSE&查看结果USE,4)清空数据表命令格式:ZAP功能:从表中删除所有记录,只保留表的结构。,说明:ZAP命令等价于DELETEALL和PACK联用,但ZAP速度更快。如果SETSAFETY为ON,VFP会提示是否要从当前表中删除记录。发出ZAP命令,不会引发删除触发器。有关为表创建触发器的详细内容,将在后面介绍。,【例4.13】删除dab.dbf数据表文件中的全部记录。USEdabZAP这时,数据表dab.dbf中全部记录被彻底删除,记录数为0,但该数据表的结构仍存在。,4.3.4表的复制,1)表结构的复制格式:COPYSTRUCTURETOFIELDS功能:将当前数据表的结构复制到指定的数据表文件中,新表的字段数和字段顺序由“FIELDS”子句决定。,【例4.14】把学生档案表(dab.dbf)中的学号、姓名、性别、专业班级字段复制成一个新表XSXX.DBF,新表中只包含结构定义,而不包含记录数据。命令序列为:,USEdabCOPYSTRUTOXSXXFIEL学号,姓名,性别,专业班级USEXSXX&打开XSXX表LISTSTRU&显示XSXX表的结构,2)表记录的复制格式:COPYTOFIELDSFOR功能:将当前表中在指定范围内满足条件的记录,按指定的字段复制生成一新表文件。,【例4.15】将dab表中专业班级为“计算机1班”的所有学生的记录按学号、姓名、性别、专业班级字段顺序复制到一新数据表文件xsda.DBF中。,USEdabCOPYTOxsdaFOR专业班级=计算机1班FIELDS学号,姓名,性别,专业班级USExsdaBROW,新表xsda.dbf中的记录数如下图所示。,4.4数据表的排序、索引与查询,表中数据记录的排列顺序是按记录输入的先后顺序排列的。而在实际应用中往往需要将记录按某些条件重新排序,以提高数据的处理速度。VFP是通过数据表的分类排序或索引排序来实现的。,4.4.1数据表的分类排序(物理排序),格式:SORTTOON/A/D/C,/A/D/CASCENDING|DESCENDING范围FIELDSFOR|WHILE功能:将当前数据表中指定范围内满足条件的记录,按字段名1、字段名2、关键字段的值的大小重新排列,并将排序结果放到指定的新表文件中。,排序是指根据数据表文件中某个或多个字段(称为关键字段)的值将表中的记录重新排列生成一个新的数据表文件。,说明:排序的结果放入由“”指定的表中,产生的新表是关闭的。,缺省“范围”和“FOR|WHILE”时,则对当前表中的所有记录排序。,排序字段可以是字符型、数字型、日期型、逻辑型等字段,不能是备注型和通用型字段。,“A”表示按字段值升序排序,为缺省方式;“D”表示按字段值降序排序;“C”对于字符型字段不区分大小写字母。,“ASCENDINGDESCENDING”决定除用“/A”或“/D”指明了排序方式的字段外的所有字段的排序方式,前者为升序,后者为降序。,【例4.16】对数据表文件dab.dbf中的记录按下列要求排序:将数据表文件dab.dbf中的记录按“出生日期”升序排列。排序后的文件名为dab_sor1.dbf,命令序列如下:,USEdabSORTTOdab_sor1ON出生日期/AUSEdab_sor1&打开生成的新表文件BROWSE排序后dab_sor1.dbf表中的记录顺序如下图所示。,将数据表文件dab.dbf中的记录按“专业班级”升序排列,专业班级相同时按“出生日期”降序排列,排序后的文件名为dab_sor2.dbf。命令序列如下:,USEdabSORTTOdab_sor2ON专业班级/A,出生日期/DUSEdab_sor2&打开生成的新表文件BROWSE排序后dab_sor2.dbf表中的记录顺序如下图所示。,由于排序要产生一个新的数据表文件,且其内容与原数据表完全相同,只是记录的排列顺序改变了,这样将占用较大的磁盘空间。例如:在例4.16中,采用不同的排序方式后产生了两个新数据表文件dab_sor1和dab_sor2,并且当修改了原数据表(dab.dbf)的数据后,排序文件不能自动更新,这样就造成了这3个数据表的数据不一致。因此,在实际应用中,一般较少使用排序命令,而是使用索引来建立记录的排序机制。,4.4.2数据表索引的概念,1).索引的概念所谓索引就是按照索引表达式(数据表的某个字段或字段的组合)的值使表中的记录有序排列的一种技术。一般情况下,标中记录的顺序是由数据输入的前后次序决定的,并用记录号予以标识。除非有记录插入或记录删除,否则表中的记录顺序总是不变的。索引实际就是一种排序,但是他不改变表中数据的物理顺序,而是另外建立一个数据号列表。索引文件不能单独使用,必须同源数据表文件一起使用。索引一旦建立后,就产生了一个相应的索引文件。索引文件中只包含两项信息:一是每条记录索引关键字表达式的值,另一项是与其对应的记录号。既在索引文件中只保留索引关键字和记录号信息,并不存在记录的字段数据,因此它不能单独使用,必须同时打开原数据文件,才能使索引文件有效。在VF中,同一个数据库中的多个表以相同属性字段建立索引后,可根据索引表达式的值建立数据库中多个表间的关联关系。,2)索引的类型根据索引功能的不同,可将索引分为下列4种类型:主索引:是一种只能在数据库表中而不能在自由表中建立的索引。在指定的字段或表达式中,主索引的关键字绝对不允许有重复值。主索引主要用来在永久关系中的父表与子表之间建立参照完整性设置。一个表只能创建一个主索引。如果在任何已经包含了重复数据的字段中指定主索引,VFP将产生错误信息。候选索引:和主索引类似,候选索引的值也不允许在指定的字段或表达式中重复。候选一词是指索引的状态。因为候选索引禁止重复值,因此它们在表中有资格被选做主索引,即主索引的候选,一个表中可以有多个候选索引。,唯一索引:允许索引关键字在表中的记录有重复的值。但在创建的索引文件里不允许包含有索引关键字的重复值,若表有重复的字段值,索引文件只保留该关键字段值前面的第1条记录。普通索引:除主索引、候选索引、唯一索引之外的索引便是普通索引,普通索引允许索引关键字段有相同值。对于以上不同功能的索引类型,需特别说明以下两点:普通索引、唯一索引、候选索引既可以在自由表中建立,也可以在数据库表中建立。主索引则只能在数据库表中建立。一个自由表或数据库表可同时建立多个普通索引、唯一索引、候选索引,但一个数据库表只能建立一个主索引。,3)索引文件的种类单索引文件(独立索引文件):该类索引文件中只包含一个索引,索引文件的扩展名为.idx。使用时必须先打开。非结构复合索引文件:该类索引文件可以包含不同索引标识的多个索引,也可以为一个表建立多个非结构复合索引文件。非结构复合索引文件的文件名由用户指定,扩展名为.cdx。使用时必须打开。结构复合索引文件:该类索引文件可以包含不同索引标识的多个索引。一个表只有一个结构复合索引文件,其索引文件名与表名同名,扩展名为.cdx。结构复合索引文件随表的打开而打开,随表的修改而更新。在VFP中,主要使用结构复合索引文件。,1)建立单索引文件格式:INDEXONTOForADDITIVE功能:根据的值建立一个索引文件,其扩展名为.idx。说明:只能是字符型、数字型、日期型和逻辑型数据。可以是表中的一个字段或多个字段组成的表达式,当表达式中各字段的数据类型不同时,必须转换为相同的数据类型,且必须转换成字符型。,4.4.3索引的建立,FOR选项是只对满足条件的记录建立索引文件。若选择了ADDITIVE可选项,则执行该命令前不关闭已打开的索引文件;否则,将关闭已打开的索引文件。单索引文件只能按的值升序排列。,【例4.17】对dab.dbf数据表按“性别”字段升序建立单索引文件,索引文件名为xbsy。命令序列如下:USEdabINDEXON性别TOxbsyLIST,用LIST命令查看表中的记录顺序如下图所示。可以看出使用索引对于表中记录的物理顺序并没有改变,因为相应记录的记录号并没有因为建立索引而改变,只是输出记录的顺序改变了。,【例4.18】对dab.dbf数据表按“专业班级”升序,专业班级相同时按“出生日期”升序建立单索引文件。索引文件名为zysy,命令序列如下:,USEdabINDEXON专业班级+DTOC(出生日期)TOzysyLIST该索引顺序如下图所示,2)建立结构复合索引文件(1)用表设计器建立结构复合索引文件在表设计器中,只要设置了索引就自动创建了结构复合索引文件。建立结构复合索引文件的方法如下:打开数据表,然后打开表设计器。选择【字段】选项卡,在需要索引的字段右边对应的【索引】下拉列表中选择升序或降序,建立的索引为单个字段的普通索引。,选择【索引】选项卡,如下图所示,则可建立主索引、候选索引、唯一索引和普通索引4种类型的结构复合索引文件。,说明:上述方法建立的索引为结构复合索引,结构复合索引文件名与表同名,而扩展名为.cdx。,(2)命令方式建立结构复合索引文件格式:INDEXONTAGFORASCENDING|DESCENDING,说明:第一次建立索引时,将产生一个与数据表同名而其扩展名为.cdx的结构复合索引文件。结构一词是指:VFP把该文件当作表的固有部分来处理,并在使用表时自动打开。如果结构复合索引文件丢失了,数据表文件就不能打开。结构复合索引文件一旦建立,将随着数据表文件的打开而同时自动打开,但对记录的操作顺序不影响。“索引标识名”作为索引的标识,存放在.cdx文件中。一个.cdx文件可以包含多个标识名,但各标识名应不相同。“ASCENDING|DESCENDING”指定记录的排序方式,前者为升序,后者为降序。,【例4.19】对学生档案表(dab.dbf)按“性别”升序排列,性别相同时按“专业班级”建立结构复合索引,其标识名为BJ。,USEdabINDEXON性别+专业班级TAGBJLIST显示结果如下图所示。,4.4.4索引的使用,索引的作用和功能是多方面的,其中最主要的一个作用就是利用索引进行索引查询。要实现索引查询,必须满足一定的条件。具体地讲,除表和相应的索引文件必须打开外,还必须确定相应的主控索引文件。若主控索引文件为结构复合索引文件,还必须进一步指定主控索引标识。一个表可以同时打开多个索引,但任何时刻只能有一个索引起作用。所谓主控索引文件,是指同时打开的多个索引文件中当前正起作用的索引文件。所谓主控索引标识,是指结构复合索引文件所包含的多个索引标识中当前正起作用的索引标识。通常情况下,将主控索引文件或主控索引标识简称为主控索引。,1)打开单索引文件或非结构复合索引文件单索引文件在使用时必须先打开。通常使用相应的命令打开索引文件。(1)打开数据表的同时打开索引文件格式:USEINDEX功能:在打开指定表的同时打开与其相关的1个或多个索引文件。说明:INDEX子句用于指定要打开的索引文件(最多7个)。打开多个索引文件时,索引文件之间用逗号分隔,第1个索引文件自动成为主控索引文件。,【例4.20】假设已为学生档案表(dab.dbf)建立了2个单索引文件xbsy.idx和zysy.idx,打开学生档案表(dab.dbf)的同时打开这2个索引文件。命令为:USEdabINDEXxbsy,zysy&xbsy.idx为主控索引LIST&显示结果如下图所示USE,(2)索引文件的单独打开如果一个表建立了多个单索引文件,要使用这些索引文件,可以用下列命令打开它们。格式:SETINDEXTOADDITIVE功能:为当前表打开指定的一个或多个索引文件。说明:索引文件列表用于指定要打开的一个或多个索引文件(最多7个),索引文件列表中,第一个索引文件将自动成为主控索引文件。ADDITIVE选项确保以前打开的索引文件仍然保持打开状态。,【例4.21】假设已为学生档案表(dab.dbf)建立了2个索引文件xbsy.idx和zysy.idx,先打开学生档案表(dab.dbf),再打开这2个索引文件。命令为:USEdabSETINDEXTOxbsy,zysy&xbsy.idx为主控索引LIST&显示结果如下图所示USE,2)关闭索引文件索引文件使用完后应关闭。由于索引文件是依赖于数据表而存在的,所以关闭数据表文件时,索引文件也将关闭。另外,专门关闭索引文件的命令有:SETINDEXTO功能:关闭当前工作区中打开的索引文件。CLOSEINDEX功能:关闭所有工作区中打开的索引文件。说明:索引创建时自动处于打开状态,并且自动成为主控索引。结构复合索引文件随表的打开而自动打开。表关闭时,与该表相关的所有打开的索引文件也自动关闭。,3)设置主控索引当打开了多个独立索引文件或结构复合索引文件中包含多个索引标识时,需要指定当前起作用的索引。格式:SETORDERTO|TAG功能:指定相应的索引为主控索引。,【例4.22】对学生档案表(dab.dbf)分别以字段“专业班级”,“出生日期”,“性别”建立3个结构复合索引标识,并分别使用,命令序列为:CLOSEALL&关闭所有文件USEdabINDEXON专业班级TAGBJINDEXON出生日期TAGRQINDEXON性别TAGXB&分别建立3个名为BJ,RQ,XB的索引标识SETORDERTOBJ&设置BJ为主控索引LISTSETORDERTORQ&设置RQ为主控索引LISTSETORDERTOXB&设置XB为主控索引LISTUSE,4)删除索引标识格式:DELETETAGALL|,功能:删除打开的复合索引文件的索引标识。说明:ALL子句用于删除复合索引文件的所有索引标识。若某索引文件的所有索引标识都被删除,则该索引文件也自动删除。该命令只能删除打开的复合索引文件的索引标识,对于单索引文件不能用该命令。,445数据表的查询,表中记录的查询就是在表的所有记录中查找满足条件的记录,并把记录指针定位在要查询的记录上。这里介绍2种传统查询方法:顺序查询和索引查询。1)顺序查询顺序查询是一种按照记录的排列顺序,在表文件中逐个地查找满足条件的记录,查询速度较慢。(1)LOCATE命令格式:LOCATE范围FOR|WHILE功能:按顺序搜索数据表,并将记录指针定位在满足条件的第一条记录上。,(2)CONTINUE命令格式:CONTINUE功能:LOCATE命令执行后继续移动记录指针到下一条满足条件的记录。,说明:LOCATE命令在指定范围内查找满足条件的第一条记录,并将该记录置为当前记录。如果找不到符合条件的记录,则显示“已到定位范围末尾”;缺省范围子句为ALL。CONTINUE命令只能放在LOCATE命令后使用;可多次执行CONTINUE命令。若LOCATE发现一条满足条件的记录,可使用RECNO()返回该记录号,且FOUND()函数的返回值为“真”(.T.),EOF()函数的返回值为“假”(.F.)。,【例4.23】在学生档案表(dab.dbf)中找出计算机1班的前2位同学,并将记录输出。USEdabLOCATEALLFOR专业班级=计算机1班?FOUND()&结果为.T.DISPLAYCONTINUE&查找满足条件的下一记录?FOUND()DISPLAYUSE,2)索引查询索引查询是在数据表文件建立了索引的基础上进行的,因此必须打开相应的索引文件。打开索引后,记录将按索引关键字值升序或降序排列,查询的速度比顺序查询要快得多。(1)FIND命令格式:FIND|功能:在索引文件中查找索引关键字值与指定的字符串或数值常数相等的记录。,说明:FIND只能找C、N型数据,字符串常量可不加定界符;字符串变量前面必须用宏代换函数&。FIND找到了与索引关键字相匹配的记录,则RECNO()返回匹配记录的记录号;FOUND()返回“真”(.T.);EOF()返回“假”(.F.)。FIND命令找到的是与查询数据相匹配的第一条记录,没有继续查询命令。,(2)SEEK命令格式:SEEK功能:在索引文件中查找索引关键字值与指定表达式值相等的记录。说明:只能在索引文件打开后使用SEEK命令。SEEK命令查找的是表达式,表达式可以是C、N、D、L型的常量、变量及其组合。查找的字符串常量必须用定界符;变量不用&函数。如果SEEK找到了与索引关键字相匹配的记录,则RECNO()返回匹配记录的记录号;FOUND()返回“真”(.T.);EOF()返回“假”(.F.)。若找不到相匹配的关键字,则RECNO()返回表中记录个数加1。FOUND()返回“假”(.F.);EOF()返回“真”(.T.)。,【例4.24】使用FIND命令和SEEK命令在学生档案表(dab.dbf)中按如下要求分别查找满足条件的第一条记录。查找姓名为“那措央中”的记录。查找1987年出生的男生记录。USEdabINDEXON姓名TAGxmsyFIND那措央中&或SEEK那措央中DISPLAYINDEXON性别+RIGH(DTOC(出生日期),2)TAGxbrqSEEK男+87&按表达式的值查找?FOUND()&根据FOUND()的值判断查找结果,USEdabindexon姓名+right(dtoc(出生日期),2)tagxmsySEEK“王刚”+“91”&按表达式的值查找?Found(),USEdabindexonalltrim(姓名)+right(dtoc(出生日期),2)tagxmsySEEK“王刚”+“91”&按表达式的值查找?Found(),思考:能否查找到?为什么?,5)分类汇总命令格式:TOTALTOON范围FIELDSFOR功能:对数值型字段按指定的关键字段进行分类求和,结果存入指定的汇总表文件中。说明:执行该命令要生成一个新的表文件。使用该命令前,用于汇总的数据表必须按进行排序或索引FIELDS指定汇总字段,汇总字段必须是数值型字段,若该项缺省则对所有数值型字段求和。范围缺省时是对表中所有记录进行操作。,汇总表文件中的一个记录值是按下述原则确定的:将当前表中“关键字段”值相同的记录汇总成一条记录;在该记录中,属于“字段名表”指定的数值型字段的值由各条同类记录对应字段之值求和产生;其余字段的值取同类记录中第一条记录对应字段的值。,【例4.29】对zggz.dbf表进行下列汇总统计。按部门对所有字段进行汇总统计,汇总表文件名为gzhz1.dbf,命令序列如下:USEzggzINDEXON部门TObmsy1TOTALTOgzhz1ON部门ALLUSEgzhz1&打开汇总表文件BROWSE,汇总表中的记录如下图所示。,可以看出,在gzhz1.dbf表中仅有4条记录,因为原表中只有4个部门。,对zggz表中部门是厂部和销售科的记录按基本工资、岗位工资和实发工资字段进行汇总统计,汇总表文件名为gzhz2.dbf,命令序列如下USEzggzINDEXON部门TObmsy2TOTALTOgzhz2ON部门FOR部门=“厂部”OR部门=“销售科”;FIELDS基本工资,岗位工资,实发工资ALLUSEgzhz2&打开汇总表文件BROWSE汇总表中的记录如下图所示。,4.7工作区与多表操作,对于绝大多数的应用程序而言,都要使用多个表存储数据。并且在同一时间也可能对多个表进行操作。为此,VFP引入了工作区和表的别名这两个概念。利用工作区,可以在不同的工作区中同时打开多个表;通过表的别名,可以引用在不同工作区中打开的各个表。,工作区实际上就是一个带有编号的内存区域,VFP通过它来标识一个打开的表,在一个工作区中只能打开一个表。在VFP中,除了用编号表示工作区外,还可以用别名来标识工作区。,4.7.1工作区与别名,VFP提供了32767个工作区,这32767个工作区分别用132767的数字来标识。此外,系统为前10个工作区指定的别名为字母AJ。若在某工作区打开表时没有指定别名,则该表名即为表的别名;若打开表时同时指定了别名,则可以
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!