VisualFoxPro6第6章.ppt
,返 回,退 出,第6章 查询和视图操作,6.1 创建和设计查询,6.2 创建本地视图,6.3 创建远程视图,6.4 小结,利用查询向导设计查询,查询向导可以引导用户快速设计一个查询。下面将示例使用查询向导设计一个简单的单表查询:从”教师档案管理系统”数据库的“教师基本情况表”中查询职称为“教授”且是“管理系”的所有教师的信息。步骤如下:1、从“项目管理器”开始,选择【数据】卡片中的“查询”,2、单击【新建】按钮,则出现设计查询的方式选择对话框如下图所示。,单击,查询向导字段选取,1、选择“教师档案管理系统”数据库中的“教师基本情况表”。2、并将该表中的“编号”、“姓名”、“职称”、“系别”字段添加到“选定字段”列表框中,如图所示。,单击【预览】按钮可以显示查询结果。根据要求,设置条件如下图。,查询向导筛选记录,查询向导记录排序,1、选择要排序的字段,字段可升序或降序排列。2、最多可选择3个排序字段,如果第一个排序字段的值相同,则按 第2个字段的升序或降序排序,依次类推。例对记录按“编号”降序排序,如下图所示。,查询向导限制记录,限制查询结果中所包含的记录数,说明:查询结果中所包含的记录个数限制共有2种方式:1、如果显示符合条件的全部记录,可选择“数量”选项组中“所有记录”,。2、如果显示符合条件的部分记录,可以使用百分比或记录数来确定要显示的部分记录。,单击,取默认值,查询结果集中包含全部记录,查询向导完成,将查询以文件的形式(.QPR)保存到一个指定的目录中。,将查询保存到一个指定的目录中并运行该文件。,利用查询向导设计的查询功能有限,可以使用查询设计器修改它。,单击,可以查看查询结果集中的全部数据,打开帮助文件,取消所建立的查询,返回到向导的上一步,结束向导,完成查询设计。,单击,保存设计的查询,在“文件名输入文本框”中输入“老师查询”后,单击【保存】按钮,结束查询设计过程。,在项目管理器中的“数据”选项中的查询项下产生了一个查询文件,返回,6.1.2 用查询设计器设计查询,前面学习了如何使用VFP6中文版提供的查询向导快速的设计一个查询。但是在实际应用中,查询向导设计的查询往往不能满足需求。这时还可以采用查询设计器方便灵活的设计各种查询。启动查询设计器 1、在“项目管理器”中选择“数据”选项卡中的“查询”选项,再单击【新建】按钮,打开【新建查询】对话框,则启动“查询设计器”。2、选择“文件”菜单下的“新建”命令,再打开的新建对话框中选择“文件类型”选项组中的“查询”按钮,再单击“新建查询”按钮,则启动查询设计器。,查询设计器下部分的窗口中有几个选项卡,其含义简介如下:(1)“字段”:用来选定包含在查询结果中的字段;(2)“排序依据”:用来决定查询结果输出中记录或行的排列顺序;(3)“联接”:用来确定各数据表或视图之间的联接关系;(4)“筛选”:相当于命令SET FILTER TO,利用过滤的方法查找一个特定的数据子集;(5)“分组依据”:所谓分组就是将一组类似的记录压缩成一个结果记录,这样就可以完成基于一组的计算。要设计一个查询文件,首先必须明确查询的目的是什么,即想要得到哪些数据,并以什么方式存在;或者想要得到满足某些条件的特定记录,或者想要知道某些记录的字段值组合成的表达式按某一方式输出。明确了输出的数据后,就可以开始设计查询了,一般要通过以下几个步骤进行:(1)启动查询设计器;(2)选择出现在查询结果中的字段;(3)设置选择条件来查找可给出所需结果的记录;(4)设置排序或分组选项来组织查询结果;(5)选择查询结果的输出类型:表、报表、浏览等;(6)运行查询。,返回,”字段“选项卡用与选择查询结果中的输出字段。向导里已经详细介绍过,在这不再详细讲解。当在多个表间进行查询时,需要指出这些表间的联接关系。如前面所述,启动查询设计器,在“添加表和视图”对话框中从“数据库”中选择GXGLXT库,在“数据库中的表”中选择Student表,单击【添加】按钮,再选择Grade表,再单击【添,加】,此时系统自动弹出一个“联接条件”,询问是否根据两表中都有的“学号”字段建立内部联接,单击“确定”,两表间就有了一条连线,代表它们之间的联接。然后再添加Courses表,最后关闭对话框。,选择输出字段,关联表,在“查询设计器”中选择“联接”选项卡,如图:,在VFP6中表间的联接有四种类型,分别是:,(1)Inner Join:内部联接,指在查询结果中,只列出左字段列表与右字段列表相匹配的记录,此类型是默认的,也是最常用的;(2)Right Outer Join:右联接,列出右字段列表中的所有字段与左字段中相匹配的记录;(3)Left Outer Join:左联接,列出左字段列表中的所有记录与右字段列表中相匹配的记录;(4)Full Join:完全联接,列出两个字段列表中的所有记录;,筛选记录,通过设置筛选条件,将筛选出表中满足条件的记录并显示在查询结果中。,排序查询,排序查询是指按一个或多个字段的值进行升序或降序显示排序决定了查询输出结果中记录或行的先后顺序,我们可以通过“排序依据”选项卡设置查询的排序次序,方法同在用查询向导设计查询介绍的一样,首先从“选定字段”框中选定要使用的字段,并把它们移到“排序条件”框中,然后利用“排序选项”(从中选择升序或降序)来设置排序条件。本例中设置Student.学号,升序为排序依据。,分组查询,分组是指将数据表中某关键字段相同的记录分组生成一条记录。,所谓分组就是将一组类似的记录压缩成一个结果记录,这样就可完成基于一组记录的计算。分组在与某些累计功能联合使用时效果最好,例如SUM(),COUNT(),AVG()等。,表达式中可用的函数:COUNT():求某字段值的指定个数SUM():求某数值字段的和AVG():求某数值字段的平均值MIN():求某字段中的最小值MAX():求某字段中的最大值,操作步骤如下:(1)在查询设计器的“字段”选项卡中,单击“函数和表达式”右边的按钮,出现“表达式”生成器;(2)在“数学”下拉式列表框中双击AVG(expN),在“来源于表”下拉框中选择Grade表,在“字段”列表框中双击“课程成绩”,单击【确定】。即在“函数和表达式”框中自动生成了“AVG(Grade.课程成绩)”这个表达式,用以计算Grade表中课程成绩的平均值。(3)单击“添加”按钮,该表达式被添加到“选定字段”列表框中。将来查询结果中就会有一列数据求平均值;(4)单击“分组依据”选项卡,进入“分组依据”窗口,在“可用字段”中选择Grade.课程名称,再单击【添加】按钮,该字段即成为分组字段。,运行查询,方法:1.在”项目管理器“窗口中,选择”数据“选项卡,单击”查询“选项前面的”+“按钮,选择要查询的文件名,单击”运行“即可。2.选择”程序“菜单中的”运行“命令,3.在查询设计器区域内单击右键,在弹出菜单中选择“运行查询”;4.在命令窗口中键入DO 查询名.qpr5.在“查询”菜单中选择“运行查询”:,查询菜单,1.查看SQLSQL是结构化查询语言(STRUCTURED QUERY LANGUANGE)的缩写。一条SQL语句可以代替许多条VFT命令。,2.为查询添加注释方法:选择”查询“菜单下的”备注“命令,在其对话框中可以为查询输入注释。,3.查询去向,方法:选择”查询“下拉菜单下的”查询去向“命令,打开其对话框,在此可以查询结果不同的7种输出类型,6.1.5 建立交叉表,操作过程如下,下面通过示例来介绍如何建立交叉表。用Grade表中的数据建立一个交叉表,以显示每个学生所有课程的总成绩。Grade表中的部分数据如:前面的设计过程同以上内容,但是在第二步需要确定交叉表的行和列。,交叉表设计向导字段选取,说明:在这一步先在“数据库和表”一选择一个数据库,再选择用以建立交叉表的数据表,然后再从可用字段列表框中选择要用的字段,交叉表只用三个字段,这一步可多选 字段。,交叉表向导定义布局,说明:(1)行,将要加入到交叉表中的第一个字段名,本示例中选择字段“学号”;(2)列,将要加入到交叉表中的从第二个字段开始的若干个字段的字段名,注意这些从源表中选择的数据不能超过254个。本示例中选择字段“课程代号”;(3)数据,对应行和列的运算结果,本示例中选择“课程成绩”。,按提示操作:从可用字段列表框中将“学号”字段拖入“行”框,将“课程代号”拖入“列”框,将“课程成绩”拖入“数据”框。,交叉表查询向导加入总结信息,说明:这一步的操作,决定在生成的交叉表中要加入的一个字段的内容。,(1)求和:求出对应行和列的数据字段的和;(2)计数:求出对应行和列的数据字段的数目;(3)平均值:求出对应行和列的数据字段的平均值;(4)最大值:求出对应行和列的数据字段的最大值;(5)最小值:求出对应行和列的数据字段的最小值。,本示例中选择“求和”运算。如果不想加入总结信息,可以在“分类汇总”中选择“无”。,交叉表向导完成,将交叉表查询以文件的形式(.QPR)保存到一个指定的目录中。,将交叉表查询保存到一个指定的目录中并运行该文件。,说明:系统默认值是“保存交叉表查询”和“显示NULL值”。,将交叉表查询保存到一个指定的目录中并打开“查询设计器”修改它。,对于值为空的记录是否以.NULL.填充,交叉表保存及运行结果,保存后,系统进入到数据查询过程,稍候系统将查询结果显示出来。如:,从中可以看到,凡是没有数据的栏,就被.NULL.值填充,且有许多数据丢失。,返回,6.2 创建本地视图,6.2.1 利用向导创建本地视图,6.2.3 创建参数视图,返回,退出,6.2.2 利用视图设计器创建本地视图,6.2 创建本地视图,视图可以通过向导和设计器两种方法来创建。1、利用向导创建本地视图用本地视图向导创建本地视图,可采取以下方式:方式一:(1)在主窗口下打开【工具】菜单,选择【向导】菜单命令。(2)再选择【全部】菜单,出现【向导选取】对话框,如图,单击滑动按钮,选择“本地视图向导”,单击【确定】,进入到“本地视图向导步骤1字段选取”,。方式二:(1)在项目管理器中选定数据库。(2)选定本地视图,单击【新建】按钮。(3)单击【视图向导】按钮,(4)然后按照向导屏幕上的指示操作。方式三:(1)打开数据库设计器,打开【数据库】菜单。(2)选择【新建本地视图】,再单击【视图向导】按钮。(3)然后按照向导屏幕上的指示操作。,本地视图向导:步骤1字段选取,说明:按照上述几种方式,可以快速建立本地视图,但要强调的是,在项目管理器中创建或使用视图时,项目管理器会自动打开数据库。如果要使用项目以外的表或视图,则必须先打开数据库或事先确认数据库在作用范围内。,本地视图向导对话框如图,可以看到,创建视图大体要经过以下步骤:(1)字段选取。选择数据库,数据库中的表和表中的字段。如果当前已经打开了一个数据库,则第一步的对话框中显示的,是创建当前数据库的视图,也可以选择其它的数据库。(2)关联表。建立数据库中表与表之间的关系。(3)筛选记录。选定符合条件的记录。(4)排序记录。为选定的记录按照某一字段进行排序。(6)限定记录。定制显示一定数量的记录。(7)完成视图。选择保存视图后浏览还是修改。例:创建包含Grade表和Courses表的本地视图“视图1”。,选择表Grade,单击全部添加按钮,选择Courses表,单击单个添加按钮,添加课程名、学时数、学分数,字段选择完成后,单击【下一步】,步骤2为表建立关系。,本地视图向导:步骤2为表建立关系,父表字段选择下拉选择框,子表字段选择下拉选择框,说明:在这一步要建立用来建立本地视图的表间的关系。1、先在父表字段选择下拉选择框中选择要用来建立关系的主关键字;2、再在子表字段选择下拉选择框中选择用来建立关系的子表关键字;3、单击【添加】,将设定关系添加到关系列表框中。,上面的字段符合要求,单击【添加】,关系设置完成后单击【下一步】进入到步骤2a字段选取对话框。,本地视图向导:步骤2字段选取,生成的本地视图中只包含表中关系相匹配的记录,对应于关系中的内联接的设置结果。,生成的本地视图中包含Grade表中的全部记录和子表中关键字段相匹配的记录,对应于关系中的左联接的设置结果。,生成的本地视图中包含Courses表中全部记录和父表中关键字段相匹配的记录,对应于关系中的右联接的设置结果。,生成的本地视图中包含表中所有的记录,对应于关系中的完全联接的设置结果。,本例中选用默认值:仅包含匹配的行。然后单击【下一步】,进入步骤3筛选记录。,本地视图向导:步骤3筛选记录,说明:本地视图向导的筛选记录与查询向导的筛选记录的方式类似。在本例中不筛选记录。,单击【下一步】,进入到本地视图向导的步骤4排序记录。,本地视图向导:步骤4排序记录,说明:在这一步中设置在本地视图的记录顺序。本例中可先按“学号”排序,学号相同的再按“课程代号”排序。操作方法与建立查询的记录排序方法相同。先在“可用字段”列表框中选择,“学号”,然后单击【添加】,再选择“课程代号”,再单击【添加】如上图。,排序字段及顺序设置后单击【下一步】,进入本地视图向导:步骤4a限制记录。,本地视图向导:步骤4a限制记录,限制记录的方法与建立查询的限制记录的方法完全相同。在本例中仍保持在本地视图中包含所有的记录,因而取默认值,直接单击【下一步】,进入本地视图向导:步骤5完成。在第5步中的操作方法也与建立查询的方法相同,现选择“保存本地视图并浏览”,然后单击【完成】。弹出“视图名”对话框。,在“视图名”文本框中输入“视图1”。,输入视图名后单击【确认】按钮,系统显示所建立的本地视图的结果。本地视图向导结束。,2.利用视图设计器创建本地视图通过本地视图向导建立数据库视图虽然方便,快捷,但这仅对入门者如此,何况用视图向导建立数据库视图最终还要依赖视图设计器。因此,倾向独立进行开发的程序员来说,仅仅学会使用向导是远远不够的,还应学会使用视,图设计器的强大功能来创建视图。(1)进入视图设计器进入视图设计器的方法与进入查询设计器的方法基本相同,如图所示。,启动视图设计器方法,新建一个视图可按以下步骤进入视图设计器:在项目管理器中,单击“数据”选项卡,在列表框中选定“本地视图”,再单击【新建】按钮,单击【新建视图】按钮。修改一个视图可按以下步骤进入视图设计器:在数据库设计器窗口中,单击选定需要修改的视图,选择【数据库】|【修改】命令。在数据库设计器窗口中,右击需要修改的视图,在出现的快捷菜单中选择【修改】命令。在项目管理器中,单击【数据】选项卡,在列表框中选定需要修改的视图,单击【修改】按钮。,“视图设计器”工具栏说明,添加表:显示“添加表或视图”对话框,从而可以向设计器窗口添加一个表或视图移去表:从设计器窗口的上窗格中移去选定的表。添加联接:在视图中的两个表之间创建联接条件显示/隐藏SQL窗口:显示或隐藏建立当前视图的SQL语句最大化/最小化上部窗口:放大或缩小视图设计器的上窗格,(2)从表中选择所需字段在进行本地视图设计器之前,先建立Classzc表和Department表,表结构和数据如下:,通过上述方式之一打开视图设计器,在进入设计器之前,需要选定数据库和表,现选定GXGLXT数据库,如右图:,从中选定表Classzc并单击【添加】按钮,然后单击【关闭】按钮,启动视图设计器。,视图设计器,进入视图设计器后,第一步先需要选定字段,选定字段可直接通过字段选项卡进行。其操作方法与查询设计器中选择字段的方法相同。,“字段”选项卡还有一个【属性】按钮和一个“函数和表达式”文本框。只要“选定字段”列表框中有一个值,【属性】命令按钮就成为可选的了。选择【属性】后,出现图:,属性设置可分为五种类型:字段有效性、显示、匹配字段到类、数据匹配和注释。其中字段有效性、显示、匹配字段到类和注释在第3章中介绍数据表设计时已经作过说明,视图设计和数据表设计在字段属性上基本类似。“函数和表达式”文本框及其按钮:“函数和表达式”文本框用于输入一个函数和表达式,具体操作只需单击“函数和表达式”文本框后的对话按钮,在随后出现的表达式生成器中书写函数或表达式。此选项的功能是为了生成一个虚拟的字段。后面的创建步骤与本章前述的用查询设计器设计查询相似,在此不一一阐述。(3)建立多表关联 前面主要是针对单一的本地表建立视图,虽然很容易,但它的实际功能不大。因为在实际开发中,系统的数据库很复杂,表的关联性很强,用户关心的往往是一些复杂的数据,因此需要建立多表视图。,从定义上讲,多表视图指的是:视图中的字段来源于两个或两个以上的表。但是,在视图中表间的关系既不像数据库中的关系是永久的,也不像表中的关系是暂时的,它不靠索引字段进行联接,而是通过定义一个联接表达式来进行联接,表间的关系是松散的。可以按如下办法建立表间的联接:在视图设计器中单击“联接”选项卡即可设置多表间的关联。在“添加表或视图”对话框中,选定表后,单击【添加】按钮,当视图设计器中的表在两个及以上时,视图设计器就会为选定的表建立关联。说明:用以上的方法建立多表关联,必须有多个表添加到了视图设计器中。后续的操作方法与设计多表查询相似,除不同点外,相同的部分这里不再讲述。下面我们来建立表Department、Classzc、Student、Courses和Grade五表之间的关联的视图,起名为视图3。,(4)与设计多表查询不相同的部分更新条件视图的最大特点在于能用视图更新数据,这也是建立视图与建立查询的主要区别,也是视图的重点所在。视图设计器中的“更新条件”选项卡可以用来设置允许视图更新表字段的条件。,“更新条件”选项卡选项包括如下内容:,“表”:指定视图所使用的哪些表可以修改。选择这个下拉列表框中的选项,可以确定哪些表中的字段可以在“字段名”列表框中,以便设置更新条件。此列表中所显示的表都包含了“字段”选项卡“选定字段”列表中的字段。【重置关键字】:这个按钮作用是从每个表中选择主关键字字段作为视图的关键字字段。每个主关键字字段是在“字段名”列表中的、在钥匙符号下面打一个对钩的字段,关键字字段可,可用来使视图中的修改与表中的原始记录相匹配。【全部更新】:可以从字段名文本框中看到一些字段前的铅笔符号下打了一个对钩,这表明这些字段可以更新。在这个按钮中可以选择除了关键字字段以外的所有字段来进行更新,并在“字段名”列表的铅笔符号下打一个对钩。“发送SQL更新”:指定是否将视图记录中的修改传送给原始表。如果选择了这个复选框,将把在视图中对记录字段的修改返回到源表中。“字段名”列表框:显示了从“表”列表框中所选的表中的字段、并用来输出这些字段,不过这些字段都是可以更新的。在字段文本框中共有下列3种方式字段:关键字段(使用钥匙符号作标记),指定该字段是否为关键字段。可更新字段(使用铅笔符号作标记),指定该字段是否为可更新字段。字段名,显示可标志为关键字字段或可更新字段的输出字段名。,“SQL WHERE 子句包括”:“关键字段”:如果在原始表中有一个关键字字段被改变,设置WHERE子句来检测冲突,对于由另一用户对表中原始记录的其他字段所做修改不进行比较。“关键字和可更新字段”:设置WHERE子句来检测由某一用户修改了任何可更新的字段的冲突。“关键字和已修改字段”:如果从视图首次检索(默认)以后,关键字字段或原始表记录的已修改字段中,某个字段做过修改,设置WHERE子句来检测冲突。“关键字段和时间戳”:如果自原始表记录的时间戳首次检索以后,它被修改过,设置WHERE子句来检测冲突。只有当远程表有时间戳列时,此选项才有效。“使用更新”:此单选按钮组用于指定字段如何在后端服务器上进行更新。“SQL DELETE然后INSERT”:指定先删除原始表记录后,再创建一个新的在视图中被修改的记录。“SQL UPDATE”:指定用视图字段中的内容来修改原始表中的字段。具体说明如何设置更新条件详见课堂讲解中的更新数据操作。,返回,(5)更新记录,更新条件设置完后,就可再浏览窗口修改更新的字段,并将更新后的结果回存到表中,(6)保存视图,(7)运行视图,单击“查询”菜单中的“运行查询”命令或单击工具栏上的“!”按钮,即可运行该视图文件。,(8)查看SQL语句,单击“查询”菜单中的“查看SQL”命令,3.创建参数化视图,功能:每次运行视图时根据输入值的不同产生不同的查询结果。这样的视图具有更大的灵活性和更强的适应性。可避免每取一部分记录值就要建立视图的情况。,创建参数化视图步骤方法:(1)打开视图设计器,从【查询】菜单中选择【视图参数】命令,此时系统弹出视图参数对话框,如图,(2)在视图参数对话框中输入参数名及其数据类型。,例.建立一个名为“系部代号”的视图参数,此视图参数可以任意取,但数据类型要和所要查询的记录类型一致。参数名可以是字母字符、数字和单引号的任意组合。,(3)按下确定按钮,就为此视图建立了一个视图参数了。,下面设计一个带参数的视图:,(1)打开“视图设计器”,选定表Classzc、Student、Course和Grade四个表,并选取.Classzc.系部代号、Classzc.班级名称、Student.学号、Student.姓名、Course.课程名、Grade.开课学期、Grade.课程成绩这7个字段名作为输出字段。,(2)在“筛选”选项卡中的“字段名”下拉列表框中选择Classzc.系部代号,在“条件”列表框中选定“=”,在“实例”文本框中输入“?系部代号”。这个问号表示引用一个表达式所需要的参数。问号后的文字标识了这个参数的名称。同时还可以设定如“Grade.开课学期=?开课学期”。,(3)选择【查询】|【视图参数】,进入“视图参数”对话框,在“参数名”文本框中输入参数名称“系部代号”,在“类型”下拉列表框中选定参数的类型为“字符型”,同样还输入“开课学期”、“字符型”,然后单击【确定】按钮。,(4)通过选择【查询】|【运行查询】命令,或通过单击鼠标右键 再选择【运行查询】命令,系统弹出如图所示的视图参数对话框。,在此对话框中可以输入将要查询的参数的某一具体数值,在此输入“05”;在后面弹出的“输入一个字符型值,供开课学期使用”对话框中输入第1学期。单击确定按钮,查询的结果即显示在屏幕上。,返回,6.3 创建远程视图,1、与远程数据连接 建立远程数据连接的操作步骤:(1)从项目管理器中选择”数据库“下的”连接“选项。(2)单击”新建“按钮,打开连接设计器。(3)在连接设计器中,按要求在”数据源“下拉列表中选数据源(4)如果有必要输入”用户标识“,”密码“、及”数据库“文本框的内容。(5)指定显示ODBC登陆提示的时刻,设置数据处理方式,设置超时间隔,单击”验证连接“按钮,则可对刚输入信息内容进行检查。(6)单击”文件“下的”保存“命令,为此连接命名并保存。,2.创建远程视图,远程视图与本地视图方法类似,只是再定义是需要加入连接名称或数据源名称。,利用视图设计器创建远程视图,(1)首先必须要有同数据源的连接。(2)再项目管理器中的一个数据库下选择”远程视图“选项,然后单击”新建“按钮,打开”选择连接“或”数据源“对话框,如下图,(3)在”选择连接或数据源“对话框中,选择可用的数据源或连接并单击”确定“按钮。,(4)如果已经存在定义的连接,该对话框中就显示所定义的连接。如果要定义新的连接,可单击【新建】按钮,出现图示的“连接设计器”。,连接成功后,系统将弹出”打开“对话框,选择远程数据库中的表后,将显示视图设计器。,小 结,1.利用查询向导建立单表查询,并在查询设计器中修改查询2.利用查询向导建立交叉表查询3.利用查询设计器建立多表查询4.设置查询连接条件及查询筛选条件5.设置查询的排序依据和查询的输出去向6.为查询添加注释及查看SQL查询语句7.利用视图向导创建单表视图,然后在视图设计器中进行修改8.利用视图设计器创建多表视图9.设置视图的输出字段、筛选条件和排序方式10.设置更新条件节创建参数化视图,