您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > vfp中级教程(4)
第十课查询与视图一、查询这里所说的查询与用locate命令查询记录不太一样,这里的查询是一个名词,它可以说是一个表的子表(或叫子集),即将一些符合某些条件的记录筛选出来形成一个子表,而且此子表可象一个表一样保存起来以供随时调用。一定会有人要问了:这样把子表保存起来,要是主表的内容改变了,那么子表不是与主表不符了,这时再看子表不是就是错的?其实它并不是保存的子表,而保存的是形成子表的命令,换句话说,一个查询就是一个程序,打开查询就是运行这个程序,该程序将主表中的数据按一定条件筛选出来。那么您说上面的问题还存不存在?好了,下面我们就来看看怎样做一个查询,我们仍以人事管理软件为例,做一个专门显示电脑部门人员的查询:1.首先打开查询所需要用到数据库,注意不是表,表可以先不打开;2.在项目管理器中选择“数据/查询”,按“新建”,并选择“新建查询”(等您学会手工方式建立查询后,您应该会使用查询向导了);3.出现图1,4.在其中选择所需的数据库及表,选好后按添加,即将需要的表添加到查询的数据环境中,可添加任意多个表,如果是自由表,按“其它”选择,添加后可在查询的数据环境中看见该表,如图2,5.6.添加完后按“关闭”,得到图3;7.8.在“字段”页中选择查询所需要的字段,按“添加”,选择好后如图4;9.10.在“筛选”页中选择筛选的条件,选择好后如图5;11.12.这样一个简单的查询就做好了,在查询上按右键,选择“运行查询”,便可看到查询的结果;13.如没有问题,“保存”、“取文件名”,然后“关闭”。14.在项目管理器中的“查询”下面可看到刚做好的查询名称,按“运行”即可看到查询的结果。我们前面讲过,查询实际上是一个程序,它被存在“xxx.qpr”文件中,实际上与“xxx.prg”文件是一样的格式,可在程序中用“doxxx.qpr”来调用它。高级排序:您可以选择查询的结果按那个或那些字段排序,只需在“排序依据”中选择相应字段即可。无重复记录:如果希望在查询结果中没有重复的记录,可在“杂项”中选择“无重复记录”。显示排在前面的若干记录:一般情况下我们会要显示符合筛选条件的所有记录,但有时我们可能会只需要看排在前面的10个记录,比如找出分数最高的前10名,就可以按分数先排序,然后在“杂项”中将“全部”的钩去掉,在“记录个数”输入所要10。还可以显示查询结果中50%的记录,知道怎么做吗?记住:如要选择前若干记录,必须有排序。分组:如果要把一个字段中相同的内容做为了一个组,即显示一条记录,可以在分组中选择所需要的字段,但如果只是简单的分组,就和无重复记录差不多了,一般要结合统计函数使用,即在字段中输入“函数和表达式”,比如您可以选择“部门”字段,另外再输入一个表达式“sum(rsda.部门)”,然后在分组中按“部门”分组,猜猜会出现什么结果。其它可用的函数还有average(),min(),max(),count()等,不过这些函数只能在这儿用,不能在别的地方用,为什么?以后讲SQL语言时再讲。另外还可以按条件显示分组的信息。查询结果的去向一般情况查询结果是以一个临时表的方式来存放,并用browse显示出来。不过您还可以选择其它方式来存放结果,单击右键,选择“输出设置”,看到了吧。二、多表查询如果希望从多个表中获取数据来形成查询结果,可建立多表查询,比如人事管理的职务库(zwzd)中有个职务工资字段,而rsda中没有,我们就可以做个多表查询来看每个人的职务工资:1.将所需要的表添加到数据环境。当您添加新表时,系统会让您建立与新表与原有表的联接,添加后如图6,2.3.可以看到两个表的职务字段有一根线连在一起;另外可在需要的时候将一个表的字段拖到另一个表的字段上形成联接。也可以双击那根线或在“联接”页中修改联接。4.选择各表中所需要的字段;5.其它的就和前面讲的差不多。进一步连接的方式有以下几种,各自的含义如下:内部连接:只返回完全满足连接条件的记录;左外部连接:返回前一个表中的所有记录以及后一个表中匹配的记录;右外部连接:返回后一个表中的所有记录以及前一个表中匹配的记录;全外部连接:返回两个表中的匹配和不匹配的所有记录。三、视图“视图”,又是一个难以理解的名词,这都是老外创造出来的名词(view),我们的翻译也就照着字面直译。其实视图和查询差不多的,不同在哪呢?我们知道查询的数据来源于一个或几个表,这些表称之为基表,“查询”就是对基表进行“查看”,您是不能通过它来修改基表的,而视图就是这一点不同,您可以在视图上修改数据,并将修改后的数据传回给基表。既然视图和查询是基本一样的,我们就不多讲怎样来创建视图了,创建的方法也是差不多的,主要就来讲讲它们不同的地方。进入视图设计器,我们可以看到与查询设计器不同的就是多了一个“更新条件”页面(那是当然的,因为视图可更新,而查询不可更新嘛),如图7,在这里我们要做以下一些设置:1.设置“发送SQL更新”,这样才使基表可更新,至于什么是SQL,以后再讲;2.设置每个表的“关键字段”,关键字段是用来使视图中的修改与基表中原始记录相匹配,必须设置了关键字段,该表才可修改,设置的方法为:在作为关键字段的字段名前面的钥匙处打上钩。每个表只能有一个关键字段;3.设置“可修改字段”,在需要修改的字段名前面的铅笔处打上钩,一般说来关键字段应是不可修改的,但您一定要修改也可以;4.“SQLWHERE子句包括”又是什么意思呢?在多用户环境中,当要修改基表时,可能会有冲突,也就是您要改的时候,人家也要改,那么是不能两个人同时改一个数据的,当别人正在改一个数据时,您就不能改,怎样知道别人是否改了某个字段呢?这里就要为系统指定检测的方法,可以只检测“关键字段”,一般设置为“关键字段和已修改字段”。有人会问了,“关键字段和可更新字段”什么时候用呢?虽然它是可更新字段,但在实际中不是已修改字段,既然没修改就不用检测嘛。有时候会有这种情况,当一条记录中的某个字段改了,就不允许再改其它字段,这时候就有用了。5.“使用更新”也就是更新方式,一般用“SQLUPDATE”,用“SQLDELETE然后INSERT”会使修改的记录跑到最后。好了,这样一个视图就做好了。使用视图就和使用表一样,可以用USE将其打开,也可以使用其它命令象操作表一样来操作视图。重要一点当您在使用中打开视图并作了修改时,所修改的内容在您离开当前记录时自动地进入基表(这叫记录缓冲,关于缓冲我们以后再讲),如果您想在没有离开该记录时就更新基表,可使用如下命令(函数):tableupdate()如果您想放弃对当前记录的修改,使视图回复原状,在没离开当前记录前,可使用如下命令(函数):tablerevert()如果已离开了当前记录,那就不行了。
本文标题:vfp中级教程(4)
链接地址:https://www.777doc.com/doc-2854530 .html