版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2022-6-151第第5章章 使用视图查询和修改数据使用视图查询和修改数据 创建视图 使用视图 在视图中更新数据 集成视图 处理游离数据 优化视图性能 小结2022-6-1525.1 创建视图 使用向导创建视图 创建本地视图 用已有的SQL SELECT语句创建视图 修改视图 重新命名视图 删除视图 创建多表视图 访问远程数据2022-6-153创建视图 视图是VFP 6.0中为应用程序和用户提供的另一种定制的、可更新的数据集合,它具备了表和查询的特点并被保存在数据库中。 视图为用户提供了浏览、使用VFP 6.0表中数据的一种有力工具。 视图和查询有很多类似处,创建视图与创建查询的步骤相似:
2、选择要包含在视图中的表和字段,指定与表的连接条件,指定过滤器选择特定的记录。 与查询不同的是,视图可选择如何将在视图中做的数据修改传给原始文件,或建立视图的基表。 2022-6-154创建视图(续) 创建视图时,VFP在当前数据库中保存一个视图定义,该定义包括图中的表名、字段名以及它们的属性设置。 在使用视图时, VFP根据视图定义构造一条SQL语句,定义视图的数据集合。 在VFP中,可以创建两种类型的视图:本地视图和远程视图。 本地视图利用VFP的SQL语句从表或者其他视图中选取信息; 远程视图利用远程SQL语句从远程ODBC数据源表中选取信息。 可以将一个或多个远程视图加入到本地视图中,以
3、便能在同一个视图中同时访问VFP数据和远程ODBC数据源中的数据。 2022-6-1555.1.1 使用向导创建视图 用户可以使用本地视图向导创建本地视图。 若要在ODBC数据源的表上建立可更新的视图,可以使用远程视图向导。 使用向导创建视图的步骤如下: (1)在项目管理器中选择一个数据库。(2)选定“本地视图”或“远程视图”,然后选择“新建”按钮。(3)选择“视图向导”按钮。(4)按照向导屏幕上的指令操作。 2022-6-1565.1.2 创建本地视图 创建本地视图,可以采用以下方式之一进行: 在项目管理器中选定一个数据库,单击“数据库”符号旁的加号;选定“本地视图”,然后单击“新建”按钮,
4、打开“视图设计器”。 在数据库已打开时,使用CREATE SQL VIEW命令显示“视图设计器”。 使用带有AS子句的CREATE SQL VIEW命令。 2022-6-1575.1.2 创建本地视图(续) 例如,可以使用以下代码创建包含dz(读者信息)表中所有字段的视图,运行结果如图5-1所示。CREATE SQL VIEW dz-view AS SELECT *;FROM 图书馆管理!dz图图5-1 读者信息视图读者信息视图2022-6-1585.1.2 创建本地视图(续) 新视图的名称将显示在项目管理器中。 如果打开“数据库设计器”,会看到视图的显示方式与表在分层结构中的显示方式相同,所
5、不同的是视图名代替了表名。 在创建视图时,如果表名前限定有数据库名,VFP将在已打开的数据库中(包括当前的和所有非当前的数据库)及默认搜索路径中寻找该表。 如果在视图定义中没有给表限定数据库名,那么在使用该视图前,数据库必须打开。 2022-6-1595.1.3 用已有的SQL SELECT语句创建视图 可以使用宏替换将SQL SELECT语句存入一个变量,再用CREATE SQL VIEW命令的AS子句来调用。 例如,下面的代码将一条SQL SELECT语句存入dz-jy变量,然后用它创建一个新视图:dz-jy = SELECT dz.dzxm, dz.dzbh, jy.jybh, jy.j
6、yri;FROM dz, jy WHERE jy.dzbh = dz. dzbh“CREATE SQL VIEW dz-jy AS &dz-jy 2022-6-15105.1.4 修改视图 使用项目管理器或命令语言,可在“视图设计器”中修改已有的视图。 若要以编程方式修改视图的SQL命令串,则必须创建新视图,保存视图定义并覆盖旧视图。 注意:用编程方式创建视图时有一个小技巧,即在“视图设计器”中,可打开一个已有的视图,复制只读的SQL字符串,并粘贴到代码中。 2022-6-15115.1.4 修改视图(续) 若要在“视图设计器”中修改视图,可以采用以下方式之一进行: 在项目管理器中选择
7、视图名,再选择“修改”按钮,打开“视图设计器”。 先打开数据库,再使用带视图名的MODIFY VIEW命令。 在“视图设计器”中,可使用“查询”菜单或“视图设计器”工具栏将新表添加到视图中。 下面的代码在“视图设计器”中显示dz-view视图。OPEN DATABASE 图书馆管理MODIFY VIEW dz-view 2022-6-15125.1.5 重新命名视图 可以使用项目管理器或RENAME VIEW命令重新命名视图,采用以下方式之一进行: 在项目管理器中先选择一个数据库,再选择要重命名的视图,然后从“项目”菜单中选择“重命名文件”。 使用RENAME VIEW命令。 例如,下面的代码
8、将视图dz-view重命名为“读者视图”:RENAME VIEW dz-view TO 读者视图 2022-6-15135.1.6 删除视图 可以使用项目管理器或DELETE VIEW命令从数据库中删除视图定义。 删除视图前,包含此视图的数据库必须已打开并已设置为当前数据库。 若要删除视图,可以: 在项目管理器中先选择一个数据库,再选定要删除的视图,然后选择“移去”; 或者使用DELETE VIEW或DROP VIEW命令。 例如,下面的代码从数据库中删除dz-view视图和sj-view视图: DELETE VIEW dz-viewDROP VIEW sj-view & ANSI S
9、QL标准语法 2022-6-15145.1.7 创建多表视图 要想访问存储在不同表中的相关信息,可以创建一个视图并加入两个或更多的表,或在已有的视图中加入表。 可以使用“视图设计器”或CREATE SQL VIEW命令添加表。加入表后,使用表之间定义的连接条件,进一步对视图结果进行控制。 要创建多表视图,可以指定以下方式之一进行: 在项目管理器中,创建一个视图,并在“视图设计器”中加入需要的表。 打开数据库,用CREATE SQL VIEW命令将表名及连接条件加入FROM子句中。2022-6-15151. 定义和修改连接条件 只使用CREATE SQL VIEW命令将表加入视图,而不定义相应的
10、连接条件,会得到表之间的“叉乘”,即表中记录的任意可能组合。 需要在语句的FROM或WHERE子句指定连接条件。只有符合连接条件的不同表中的记录才被组合在一起。 如果表间存在永久关系,将自动用作连接条件。 典型情况下,可使用由表间的主关键字和外部关键字建立的关系,定义连接条件。 在连接条件中比较它们公有的字段值(通常使用相等作为比较条件)。 例如,要查阅有关读者信息,要求包括读者的借阅信息,可创建一个由dz表和jy 表生成的视图。在这个例子中,dz表和jy表有同一字段dzbh。 2022-6-15161. 定义和修改连接条件(续) 若要在视图中定义连接条件,可以采用以下方式之一: 在项目管理器
11、中,创建和修改视图,并在“视图设计器”中加入需要的表。 打开数据库,用CREATE SQL VIEW命令将表名及连接条件加入FROM子句。 图5-2说明了视图设计器中指定的内部连接及它在SELECT-SQL语句中的表示。图图5-2 视图设计器视图设计器2022-6-15171. 定义和修改连接条件(续) 以下代码创建一个如上例描述的新视图,用FROM子句指定视图的连接条件:OPEN DATABASE 图书馆管理CREATE SQL VIEW 读者借阅视图AS;SELECT * FROM dz;INNER JOIN jy; ON dz.dzbh = jy.dzbh 比较第1章的表1-3(借阅信息
12、表)可以发现,“读者借阅视图”的dzbh与表1-3的dzbh排列顺序是一致的 图图5-3 读者借阅视图读者借阅视图2022-6-15181. 定义和修改连接条件(续) 连接条件有以下几个要素:连接类型,建立连接的字段和用于连接字段的比较操作符。 在上面的例子中,连接的类型为内部连接,表读者信息的记录只有与借阅信息表的一个或多个记录相匹配,才会被包含在结果中。 若要改变视图的结果以满足特定需求,可指定: 建立连接的字段。 字段间的比较操作符。 如果视图中有两个表,须考虑连接的顺序。 连接的类型。 2022-6-15191. 定义和修改连接条件(续) 在主关键字和外部关键字以外的字段间建立连接在特
13、定的实例中也很有用,但并不常用。 通过比较操作符,可以控制比较和返回的记录,这种方式类似于过滤器。 例如,如果连接条件中使用的是日期型字段,可选用适当的比较操作符,使得返回结果中只包括某段时间内的记录。 选择不同的连接类型,可以扩展查询结果,使结果中既包括与连接条件匹配的记录,也包括与连接条件不匹配的记录。如果视图中不止两个表,还可以通过改变FROM子句中的连接顺序改变结果。 2022-6-15201. 定义和修改连接条件(续) 可用“视图设计器”和编程语言修改视图中的连接类型。 若要修改连接类型,可以采用以下方式之一: 选择“联接”选项卡。 双击连接线。 打开数据库,用CREATE SQL
14、VIEW 命令将表名和连接条件加入FROM 子句。 2022-6-15212. 在结果中包含不匹配记录 如果要在结果中包含不匹配的行,可用外部连接。 当使用外部连接,不匹配行的空字段将返回NULL值。以下代码生成的视图如图5-4所示。OPEN DATABASE 图书馆管理CREATE SQL VIEW 读者借阅视图2 AS;SELECT * FROM dz;LEFT OUTER JOIN jy; ON dz.dzbh = jy.dzbh比较图5-3和图5-4可以发现,在图5-4中多了没有借书的读者,例如,读者“刘哲”。 图图5-4 读者借阅视图读者借阅视图22022-6-15222. 在结果中
15、包含不匹配记录(续) 若要控制那些包含在视图中的不匹配记录,可选择表5-1的连接类型。表表5-1 控制视图中不匹配记录可选择的连接类型控制视图中不匹配记录可选择的连接类型 若要请使用只返回完全满足连接条件的记录内部连接返回JOIN关键字左侧表中的所有记录及右侧表中匹配的记录左外部连接返回JOIN关键字右侧表中的所有记录及左侧表中匹配的记录右外部连接返回两个表中的匹配和不匹配的所有记录全外部连接2022-6-15233. 定义多表间的连接条件 如果创建包含两个以上表的视图,可通过改变连接条件的顺序来改变结果。 例如,要查找有关被读者借阅的书籍的信息,可创建一个基于书籍信息表、读者信息表和借阅信息
16、表的视图,在它们公有的字段间建立内部连接:读者信息表和借阅信息表都有读者编号字段,借阅信息表和书籍信息表都有书籍编号字段。此视图基于如下的SQL语句: OPEN DATABASE 图书馆管理CREATE SQL VIEW 书籍-读者视图 AS;SELECT * FROM sj;INNER JOIN jy;ON sj.sjbh = jy.sjbh;INNER JOIN dz;ON dz.dzbh = jy.dzbh 2022-6-15244. 在WHERE子句中使用连接 可以在WHERE子句中指定连接条件,但不能像在FROM子句的连接中那样指定连接类型。对于远程视图,连接条件通常出现在WHERE
17、子句中。 以下代码创建的视图与前例相同,使用WHERE子句指定此视图的连接条件:OPEN DATABASE 图书馆管理CREATE SQL VIEW 书籍-读者视图 AS;SELECT * FROM sj, jy, dz WHERE sj.sjbh = jy.sjbh AND jy.dzbh = dz.dzbh 2022-6-15255.1.8 访问远程数据 若要使用远程服务器上的数据,可以创建远程视图。 为了创建远程视图,必须首先连接一个数据源。 1. 连接远程数据源 一个远程数据源通常是一个远程服务器,已为它在本地安装了ODBC驱动程序,并设置了ODBC数据源的名称。 为得到有效的数据源,
18、必须在本地安装ODBC。从内部定义数据源和连接。 2022-6-15262. 定义连接 在VFP中,可以在数据库中创建并保存一个命名连接的定义,以便在创建远程视图时按其名称进行引用,而且还可以通过设置命名连接的属性来优化VFP与远程数据源的通信。 当激活远程视图时,视图连接将成为通向远程数据源的管道。 若要创建命名连接,采用以下方式之一进行: 在项目管理器中,先从“数据库”列表中选择“联接”,然后再单击“新建”按钮,打开“联接设计器”。 先打开数据库,再使用CREATE CONNECTION命令打开“联接设计器” 。 使用带有连接名称的CREATE CONNECTION命令。 2022-6-1
19、5272. 定义连接(续) 例如,为了从ODBC数据源获取所需的有关信息,可以用以下代码在图书馆管理数据库中创建连接:OPEN DATABASE 图书馆管理CREATE CONNECTION remote_01 DATASOURCE sqlremote userid password 这时,项目管理器的“联接”中将出现remote_01。 在数据库中,创建命名连接并不会用到任何网络或远程资源,因为VFP只在使用视图时才激活连接。 在激活连接之前,命名连接只作为一条连接的定义,在数据库的.dbc文件中占据一行。当使用远程视图时,VFP根据视图中引用的命名连接,创建一个活动连接与远程数据源相连,然
20、后将此活动连接作为管道向远程数据源发送数据请求。 2022-6-15283. 命名连接和数据源的使用优先权 在使用带有CONNECTION子句的CREATE SQL VIEW命令时,既可以使用连接的名称也可以使用数据源的名称。 VFP首先在当前数据库中搜索具有此名称的连接,如果该数据库中不存在此命名连接, VFP再根据此名称查找已建立的ODBC数据源。如果当前数据库中的命名连接与用户系统上的ODBC数据源同名,则VFP将首先查找并使用命名连接。 2022-6-15294. 显示ODBC注册提示 当使用一个视图而又未充分指定其连接注册信息时, VFP将显示一个与数据源相关的对话框,提示输入漏掉的
21、信息。 在进行连接时,也可以控制VFP是否提示输入未指定的信息。 若要控制ODBC注册提示的显示,可以采用以下方式之一进行: 在项目管理器中先选择连接名,再选择“修改”按钮,打开“联接设计器”。 在“显示ODBC注册提示”区域中,选择一个选项。 使用DBSETPROP()或SQLSETPROP()函数的DispLogin属性。2022-6-15305. 使用已有的连接 可以使用已有的命名连接来创建远程视图。 使用项目管理器或DISPLAY CONNECTIONS命令可以在数据库中看到一个可用连接的列表。 若要了解已有连接的情况,可在项目管理器中先选择一个数据库,然后选择“联接”;或使用DISP
22、LAY CONNECTIONS命令。例如,下面的代码显示图书馆管理在数据库中的连接:OPEN DATABASE 图书馆管理DISPLAY CONNECTIONS 2022-6-15316. 创建远程视图 在建立了有效的数据源或命名连接之后,就可以使用项目管理器或以编程方式来创建远程视图。 远程视图与本地视图类似,只是在定义它时需要加入连接名称或数据源名称。 远程视图的SQL语句使用相应服务器上的语法。 若要创建远程视图,可以采用以下方式之一进行: 在项目管理器中选择一个数据库,选择“远程视图”,然后选择“新建”按钮,打开“视图设计器”。 使用带有REMOTE和(或)CONNECTION子句的C
23、REATE SQL VIEW命令。2022-6-15326. 创建远程视图(续) 如果使用了带有CONNECTION子句的CREATE SQL VIEW命令,就可以不加入REMOTE关键字 VFP根据CONNECTION关键字是否存在来判断视图是否为远程 例如,若将图书馆管理数据库中的书籍信息表放到远程服务器上,则可用下面的代码创建此表的远程视图:OPEN DATABASE 图书馆管理CREATE SQL VIEW书籍远程视图;CONNECTION remote_01;AS SELECT * FROM sj 2022-6-15336. 创建远程视图(续) 在创建远程视图时,可以使用数据源而不使
24、用命名连接。 在使用带有REMOTE子句的CREATE SQL VIEW命令时,也可以忽略连接名或数据源名,这时VFP将显示“选择连接或数据源”对话框,用户可以在这个对话框中选择一个有效的连接或数据源。 创建了视图后,打开“数据库设计器”,可看到视图在分层结构中与表具有相同的显示方式,只不过是视图的名称和图标代替了表的名称和图标。2022-6-1534第第5章章 使用视图查询和修改数据使用视图查询和修改数据 创建视图 使用视图 在视图中更新数据 集成视图 处理游离数据 优化视图性能 小结2022-6-15355.2 使用视图 限制视图的取值范围 创建参数化视图 提示用户输入参数值 打开视图的多
25、个实例 显示视图结构 创建视图索引 创建视图的临时关系 设置视图属性和连接属性 关闭视图的基表 2022-6-1536使用视图 视图建立之后,用户不但可以用它来显示和更新数据,而且还可以通过调整它的属性来提高性能。 处理视图类似于处理表,可以采用下列步骤进行各种操作: 使用USE命令并指定视图名来打开一个视图。 使用USE命令关闭视图。 在“浏览”窗口中,显示视图记录。 在“数据工作期”窗口中显示打开的视图。 在文字框、表格控件、表单或报表中使用视图作为数据源。 2022-6-1537使用视图(续) 要使用一个视图,可以采用以下方式之一: 在项目管理器中先选择一个数据库,再选择视图名,然后选择
26、“浏览”按钮,在“浏览”窗口中显示视图。 使用USE命令以编程方式访问视图。 下面的代码在浏览窗口中显示读者借阅视图:OPEN DATABASE 图书馆管理USE 读者借阅视图BROWSE 2022-6-1538使用视图(续) 一个视图在使用时,将作为临时表在自己的工作区中打开。 如果此视图基于本地表,则在VFP的另一个工作区中同时打开基表。 视图的基表是指由SELECT-SQL语句访问的表,此语句在创建视图时包含在CREATE SQL VIEW命令中。 在上面的示例中,使用读者借阅视图的同时,读者信息表和借阅信息表也自动打开。 图5-5所示为“数据工作期”对话框示例。 2022-6-1539
27、使用视图(续) 如果此视图基于远程表,则基表将不在工作区中打开,而只在数据工作期窗口中显示远程视图的名称。 图图5-5 “数据工作期数据工作期”对话框对话框 2022-6-15405.2.1 限制视图的取值范围 在访问远程数据源时,很可能会访问大量数据。 可以在视图中限定被选数据的范围,以便在某一时刻只出现所需的记录,从而降低网络通信量,改善视图性能。 例如,如果想要浏览某个读者的基本情况时,可以仅下载想要的读者记录来提高性能。 一种限定视图作用范围的方法是在视图的SQL语句中加入WHERE子句。 若要查询北京读者的记录,可以创建如下SQL WHERE 子句,运行结果如图5-6所示。 SELE
28、CT * FROM dz WHERE jyzz = 北京 2022-6-15415.2.2 创建参数化视图 参数化视图也可以用来限定视图的作用范围,而使用参数化视图可以避免每取一部分记录就需要单独创建一个视图的情况。 参数化视图在视图的SQL SELECT语句中加一条WHERE子句,从而仅下载那些符合WHERE子句条件的记录,其中的子句是根据所提供的参数值建立的,参数值可以在运行时传递,也可以通过编程方式传递。 对于前面的示例,可以创建一个通用视图,在需要得到某一个城市的读者记录时,只需键入相应城市的名称即可。2022-6-15425.2.2 创建参数化视图(续) 创建参数化视图,可以采用以下
29、方式之一: 首先打开“视图设计器”,然后从“查询”菜单中选择“视图参数”项。 使用CREATE SQL VIEW 命令并带上“?”符号和一个参数。 这个参数可以是一个VFP的表达式,计算出来的值将作为视图SQL 语句的组成部分。若计算无效,VFP将提示输入该参数值。 2022-6-15435.2.2 创建参数化视图(续) 例如,如果将图书馆管理数据库中的读者信息表放在远程服务器上,则可用下面的代码创建一个远程参数化视图。OPEN DATABASE 图书馆管理CREATE SQL VIEW 男读者视图;CONNECTION remote_01;AS SELECT * FROM dz;WHERE
30、dz.dzxb = ?dzxb 在使用这个视图时,也可以通过编程方式来提供? dzxb参数值。例如,可以输入如下代码:dzxb = 男USE 图书馆管理!男读者视图 IN 0BROWSE 2022-6-15445.2.2 创建参数化视图(续) 这时,在男读者视图的浏览窗口中,VFP显示男读者的记录,如图5-7所示。 注意:注意:如果参数是表达式,则用圆括号将该表达式括起来,如果参数是表达式,则用圆括号将该表达式括起来,使整个表达式被当作参数的一部分进行计算。使整个表达式被当作参数的一部分进行计算。图图5-7 男读者视图男读者视图2022-6-15455.2.3 提示用户输入参数值 如果要求输入
31、的参数不是一个变量或表达式,那么用户也许会希望得到一个提示。 可以将字符串用引号括起来并以此作为视图参数。 若在创建视图参数时使用“?”符号,后面加上一个用单引号括起的字符串,VFP就不把该字符串看作一个表达式,而是在运行时将其作为提示,提示用户输入参数值。 例如,下面的代码创建了一个远程参数化视图,提示用户为? dzxb参数提供一个值。OPEN DATABASE 图书馆管理CREATE SQL VIEW 女读者视图 ; CONNECTION remote_01 ;AS SELECT * FROM dz ;WHERE dz.dzxb = ?dzxbUSE 女读者视图 2022-6-15465.
32、2.3 提示用户输入参数值(续) 在使用上例的视图时,显示一个“视图参数”对话框,在对话框中会提示:为dzxb输入值。 在输入有效的性别值后,VFP将检索与此性别值相匹配的记录。 若在上例中输入“女”,然后浏览女读者视图,将在浏览窗口中看到相应的读者记录,如图5-8所示。 注意:注意:使用加引使用加引号的字符串作为号的字符串作为视图参数,可以视图参数,可以确保确保VFP在要求在要求得到参数时,总得到参数时,总是对用户作出提是对用户作出提示。示。 图图5-8 女读者视图女读者视图2022-6-15475.2.4 打开视图的多个实例 与可在多个工作区中打开同一个表一样,可以在不同的工作区中打开一个
33、视图的多个实例。 与表不同的是:在默认情况下,每次使用视图时,都要去取一个新的数据集合。 若要在多个工作区中打开一个视图,可以采用以下方式之一进行: 在项目管理器中先选择视图名,然后单击“浏览”按钮,在“浏览”窗口中显示该视图,重复这一过程,在其他工作区中打开此视图。 在“数据工作期”窗口中,单击“打开”按钮,然后选择视图名。重复这一过程,在其他工作区中打开此视图。 使用USE命令以编程方式访问视图。2022-6-15485.2.4 打开视图的多个实例(续) 在使用USE命令以编程方式访问视图时,不必重新查询数据源就可以打开视图的另一个实例。 若要不下载数据再次使用视图,可以: 在USE命令中
34、,使用NOREQUERY子句; 或者在USE命令中,使用AGAIN子句。 下面的代码使用NOREQUERY子句,在两个浏览窗口中显示从女读者视图第一个实例中得到的临时表,而不重新查询远程数据源:OPEN DATABASE 图书馆管理CREATE SQL VIEW女读者视图;CONNECTION remote_01;AS SELECT * FROM dzUSE 女读者视图 BROWSESELECT 0USE 女读者视图 NOREQUERYBROWSE 2022-6-15495.2.4 打开视图的多个实例(续) 在使用NOREQUERY子句时,可以指定一个工作期编号。 如果不指定工作期编号,VFP
35、将对全部工作期进行搜索以查找结果集合。 若找到了打开的结果集合,就将在这个结果集合上再次打开一个临时表;若没找到打开的结果集合,则为该视图取一个新的结果集合。 和处理表一样,若未找到视图,则打开一个新的视图临时表。 2022-6-15505.2.4 打开视图的多个实例(续) 如果要求VFP只在当前工作期内搜索已打开的视图结果集合,可以使用AGAIN子句。 下面的代码在两个浏览窗口中显示女读者视图:OPEN DATABASE 图书馆管理USE女读者视图BROWSEUSE女读者视图 AGAIN in 0BROWSE 在使用AGAIN子句时,VFP在当前工作期中查找一个已存在的视图临时表,并打开一个
36、指向该视图临时表的附加别名。 打开视图的另一个实例时,使用AGAIN子句与使用属于USE的NOREQUERY子句(带当前工作期编号)等效。 2022-6-15515.2.5 显示视图结构 若要打开一个不带数据的视图,可使用USE命令,并加上NODATA子句以编程方式访问视图。 下面的代码在浏览窗口中显示不带数据的女读者视图:OPEN DATABASE 图书馆管理USE 女读者视图 NODATA in 0BROWSE 2022-6-15525.2.5 显示视图结构(续) 使用带NODATA子句的视图总会打开一个新的视图临时表。 NODATA子句是获取视图结构最快的方法,因为它在远程数据源上创建最
37、小的临时表。 使用NODATA子句时,VFP为视图创建一个永远返回“假”值的WHERE子句。 数据源上没有记录能够匹配WHERE子句的条件,所以没有记录被选择进入远程数据源的临时表。 该视图可被快速检索,因为不必等待远程数据源去建立一个可能很大的临时表。 2022-6-15535.2.6 创建视图索引 可以使用INDEX ON命令,为视图创建本地索引,创建过程与表一样。 与表的索引不同,在视图上创建的本地索引非永久保存,它们随着视图的关闭而消失。 注意:在决定是否要在视图上创建本地索引时,必须考虑视图结果集合的大小。对一个大的结果集合建立索引,要花费很长的时间并降低视图的性能。2022-6-1
38、5545.2.7 创建视图的临时关系 使用SET RELATION命令,可在视图索引之间或视图索引与表索引之间创建临时关系。 在使用SET RELATION命令对一个视图与一个表进行关联时,若要获得较好的性能,要在关系中设视图为父表,设表为子表。 在临时关系中,子对象必须按其索引排序。 表的结构索引是不断被维护的,因此可以快速访问;而对于视图,VFP要在视图每次激活时为其重建索引,因此很浪费时间。 如果使用数据环境,视图将不能被当作子对象,因为子对象的索引必须是定义的一部分,而视图并不支持此功能。 2022-6-15555.2.8 设置视图属性和连接属性 在创建一个视图时,这个视图将从环境临时
39、表或从当前工作期的临时表0中继承属性设置,例如,UpdateType和UseMemoSize。 可以使用CURSORSETPROP()函数并以0作为临时表编号来更改默认的属性设置。 在视图建立并存入数据库之后,可使用DBSETPROP()函数修改视图属性。 在数据库中,修改的视图属性将长期保存在数据库中。 2022-6-15565.2.8 设置视图属性和连接属性(续) 在使用视图时,数据库中保存的视图属性设置将被活动视图临时表继承。 可以使用CURSORSETPROP()函数,为视图临时表修改活动临时表的属性。 但是使用该函数进行的修改是临时的,在关闭视图后,活动视图的临时设置将消失;在结束V
40、FP工作期时,0号临时表的临时设置也将消失。 2022-6-15575.2.8 设置视图属性和连接属性(续) 连接也以类似方式继承属性。 当用户在数据库中创建并保存一个命名连接时,0号连接的默认属性将被继承,可以使用SQLSETPROP()函数修改0号连接的默认属性。 在数据库中创建并保存连接之后,可以使用DBSETPROP()函数修改连接属性。 在使用连接时,数据库中为连接保存的属性设置将被活动连接继承。 用户可以使用SQLSETPROP()函数并使用该活动连接的句柄来修改连接的这些属性。 2022-6-15585.2.8 设置视图属性和连接属性(续) 视图与连接都可以使用一个有指定名称的O
41、DBC数据源。 若在视图中使用ODBC数据源,连接将继承工作期的默认属性。 图5-9展示了视图和连接的属性继承关系。灰线代表属性继承关系,黑线代表VFP的命令。 激 图图5-9 视图属性和连接属性及其继承关系视图属性和连接属性及其继承关系2022-6-15591. 下载远程视图时改变默认数据类型 当创建视图时,视图中所有字段的DataType属性设为默认值。 对于固定长度的数据类型,用字母(D、G、I、L、M、P、T、Y)表示 对于可变长的数据类型,用字母及其后圆括号中的表示精度和范围的参数B(D), C(N), N(N, D)来表示。 对本地视图此属性为只读属性。 可用DBSETPROP()
42、函数修改远程视图的字段DataType 属性的设置,如表5-2所示。2022-6-15602. 使用DataType属性 可用DataType属性选择默认值以外的数据类型。 例如,要将服务器上的时间戳型字段下载到VFP中。 默认对应VFP的DataTime字段的数据类型将截断服务器时间戳中表示秒的小数部位。 可用DataType属性将远程时间戳字符映射到VFP的字符字段,以保留秒的小数部位。 2022-6-15615.2.9 关闭视图的基表 在使用视图时,自动打开的本地基表并不在关闭视图时自动关闭,必须另发命令关闭它们,这与SELECT-SQL命令保持一致。 2022-6-15625.3 在视
43、图中更新数据 在视图中更新数据与在表中更新数据类似。 使用视图还可以对其基表进行更新。 视图在默认情况下使用开放式行缓冲,但也可以将其改为表缓冲。2022-6-15635.3.1 更新视图的基本操作 可以通过交互方式更新视图中的数据,也可以使用语言进行更新。 更新视图数据的第一步就是设置该视图为可更新。 在多数情况下,属性的默认设置将自动使视图可更新,但只有将SendUpdates属性设置为On来通知VFP进行更新时,更新信息才被发送到数据源。 视图可使用5个属性控制更新,在表5-3中列出。 视图属性默认设置Tables具有可更新字段和至少一个主关键字段的全部表KeyField数据库关键字段和
44、表的远程主关键字UpdateName所有字段,形式为Table_name.column_nameSendUpdates除主关键字段的所有字段,默认设置只在工作期内有效,初始值为“假”(.F.),若将其改为“真”(.T.),则成为在工作期内所创建的全部视图的默认值CompareMemo默认为真(.T.),指备注字段包含在WHERE子句中,用来检测更新冲突表表5-3 表视图更新属性及其默认设置表视图更新属性及其默认设置2022-6-15645.3.1 更新视图的基本操作(续) 在更新数据时,虽然以上5个属性都需要,但SendUpdates属性是其中的“主开关”,它控制了是否发送更新信息。 在应用程
45、序的开发阶段,用户可以先关闭SendUpdates属性,设置其他属性使想要更新的字段可以被更新。 在测试应用程序时,可以打开SendUpdates属性允许发送更新数据流。 2022-6-15655.3.1 更新视图的基本操作(续) 在一些复杂情况下,默认的更新设置可能不支持用语言创建的视图进行更新。 若要使其能够更新数据,必须检查每个更新属性的默认设置,并根据需要调整它们。 也可以根据需要,指定附加的属性,例如,UpdateType、WhereType等。 若要在“视图设计器”中使视图可更新,可在“视图设计器”中,选择“更新条件”选项卡并检查默认设置。 2022-6-15665.3.1 更新视
46、图的基本操作(续) 通过“视图设计器”创建的视图,默认设置通常允许视图被更新,用户所需要做的只是选中“发送SQL更新”复选框来打开更新开关。 如果愿意,还可以修改表、字段、SQL WHERE子句和更新选项。 若要通过设置视图更新属性使视图可更新,可以使用DISPLAY DATABASE命令检查当前默认设置,然后使用DBSETPROP()函数,根据需要修改视图的属性。 2022-6-15675.3.1 更新视图的基本操作(续) 以编程方式指定5个视图更新属性的步骤:(1)对Tables属性至少设置一个表名。 例如,如果有一个表为kcb(课程表)表,基于此表有一个为kcb_view视图,可以使用以
47、下函数设置表名:DBSETPROP(kcb_view, View, Tables, kcb)(2)用一个或多个本地VFP字段名来设置KeyField属性,这些字段名的组合可作为这个可更新表的惟一关键字。 对于上例,可以用以下代码使kcbm成为关键字段:DBSETPROP(kcb_view.kcbm, Field, KeyField, .T.) 2022-6-15685.3.1 更新视图的基本操作(续)(3)利用UpdateName属性,在视图字段与基表字段之间建立映射关系。当视图是根据具有共同字段名的两个表之间的连接建立起来的时,或者当字段在视图中有别名时,这个属性尤其有用。DBSETPROP
48、(kcb_view.kcbm, Field, UpdataName, kcb.kcbm)(4)指定要用UpdateField属性进行更新的字段范围。只能指定已包括在UpdateName属性中的字段。DBSETPROP(kcb_view.kcbm, Field, Updatable, .T.)(5)设置SendUpdates属性为“真”(.T.)。这是一个主开关,它允许VFP将创建的更新信息发送到可更新表和可更新字段中。DBSETPROP(kcb_view, View, SendUpdates,.T.) 2022-6-15695.3.2 在视图中更新多个表 可以在一个视图中更新多个表。若视图组合
49、了两个或多个表,那么设置相应属性,使得只有视图查询中一对多关系的“多”方可被更新。 视图的更新是对表进行的。对于视图访问的每一个表,其关键字段集合无论对视图结果集合还是对基表都是惟一关键字。 若要使一个多表视图可更新,可以: 在“视图设计器”中,选择“更新条件”选项卡,再选择需要更新的表和字段名; 或者使用DBSETPROP函数。 在多数情况下,VFP的默认值允许多表视图可更新,即使是对于以编程方式创建的多表视图也是如此。 2022-6-15705.3.3 用数据字典定制视图 视图存于数据库中,用户可以对视图创建下列内容: 标题。 视图注释及视图的字段注释。 视图字段的默认值。 字段级和记录级
50、规则及规则的错误信息。 视图的数据字典在功能上与数据库表中的相应部分非常相似。 用户必须以语言方式而不能用表设计器为视图创建标题、注释、默认值和规则。 2022-6-15715.3.4 为视图字段创建默认值 与表的字段默认值相似,视图的字段默认值存于数据库中,并且在每次使用视图时都可用。 VFP并不对本地创建的默认值与远程数据源创建的默认值相比较,但用户创建的默认值必须能让数据源接受。 若要给视图字段指定默认值,可以: 在“视图设计器”的“字段”选项卡中,选定一个字段,并选择“属性”,输入字段的默认值; 或者使用DBSETPROP()函数的DefaultValue属性。 下面的示例创建了一个默
51、认值为2的xf字段:USE kcb_view? DBSETPROP(kcb_view.xf, Field, DefaultValue, 2) 2022-6-15725.3.5 在视图的字段和数据行上创建规则 对远程数据源规则创建相应的本地版本,可以带来以下好处: 减少响应时间。 减轻网络资源的压力。 在向远程数据源发送数据前,先进行测试。 避免向远程数据源发送错误数据。 VFP并不将本地创建的规则与远程规则进行比较,用户必须保证创建的规则可被数据源接受。 如果远程规则有所更改,本地规则也必须随之更改。 2022-6-15735.3.5 在视图的字段和数据行上创建规则(续) 若要在视图字段或记录
52、上创建规则,可以: 在“视图设计器”的“字段”选项卡中,选定一个字段,并选择“属性”,输入字段的表达式规则及规则提示信息文本; 或者使用DBSETPROP()函数的RuleExpression和RuleText属性。 例如,下面的代码对kcb_view视图创建了字段级规则,防止输入的ks小于16:OPEN DATABASE 成绩管理USE kcb_viewDBSETPROP(kcb_view.ks, Field, RuleExpression, ks = 16)DBSETPROP(kcb_view.ks, Field, RuleText, ks must be greater than or
53、equal to 16 ) 也可以使用DBSETPROP()函数创建数据行级规则。 2022-6-15745.4 集成视图 可以在其他视图的基础上再创建视图。 理由是:有时需要从多个其他视图中获取一部分信息,或者需要将本地和远程数据集成到单个视图中。 一个基于视图的视图,或基于集成了本地表、本地视图或远程视图的视图,称为多级视图。 集成了其他视图的视图,称为顶层视图。 在顶层视图与本地基表或远程基表之间,可以有多层次的视图。 在使用多级视图时,顶层视图所基于的视图和各级视图的VFP基表将出现在“数据工作期”窗口中,远程表不会出现在“数据工作期”窗口中。 2022-6-15755.4.1 在视图
54、中集成本地数据和远程数据 通过创建基于本地视图和远程视图的新本地视图,可以在一个视图中集成本地数据与远程数据。 若要创建集成本地数据与远程数据的视图,可以: 在项目管理器中先选择一个数据库,再选择“本地视图”,然后单击“新建”按钮,打开“视图设计器”,在视图中加入表、本地视图或远程视图; 或者直接使用CREATE SQL VIEW命令。 例如,可以使用如下代码创建一个集成了本地xk表和远程kcb表中信息的本地视图:OPEN DATABASE 成绩管理CREATE SQL VIEW remote_kcb_view ;CONNECTION remote_01 ;AS SELECT * FROM k
55、cbCREATE SQL VIEW local_xk_remote_kcb_view ;AS SELECT * FROM 成绩管理!local_xk_view, ;成绩管理!remote_kcb_view ;WHERE local_xk_view.kcbm=Remote_kcb_view.kcbm2022-6-15765.4.2 在视图中更新本地数据与远程数据 在多级视图中更新数据时,更新将向下延续一层视图。 如果要更新多级视图的基表,则必须为多级结构中的每一个视图都发送一条TABLE UPDATE命令。2022-6-15775.5 处理游离数据 使用游离数据功能,可以用与主数据库相连接的视图
56、建立数据的子集,这样就脱离了主数据库对游离数据进行操作。 可以直接访问视图,也可以通过应用程序访问,之后,还可以将数据上载回主数据库。 在下面这些情况下,可以使用游离数据:(1)数据大量存放在一个地方。(2)用于地理位置较远的情况。(3)与时间有关的数据。 2022-6-1578创建和使用游离视图数据 可用下列函数或命令创建和使用游离视图数据: CREATEOFFLINE()函数 带有ADMIN 和ONLINE子句的USE SQL ViewName命令 TABLEUPDATE函数 DROPOFFLINE()函数 如果要在创建游离视图的计算机以外的机器上使用此视图,必须在这台机器(目标机)上建立
57、主数据库文件(.DBC)的拷贝,确认目标机上的视图使用了ODBC数据源,并分析数据需求以决定所需的视图内容。 2022-6-15795.5.1 创建游离视图 和用联机数据一样,在创建游离视图前,应分析需求以决定所需要的视图设计。 确定了脱机使用的数据子集之后,就可使用已有的视图或是创建新视图。 如果已有视图返回的记录正是脱机操作时想要的,则可直接使用它;否则就需要以编程方式创建视图。 游离视图中包含的数据存储在本地机数据库的一个.DBF文件中。2022-6-15805.5.1 创建游离视图(续) 若要使用已有的游离视图,可使用CREATEOFFLINE()函数和视图的名称。 例如,如果要添加学
58、生、增加新的课程、需要当前选课信息,可以建立一个名称为stuinfo的视图,组合了来自xsb表、xk表和kcb表的信息。可用下列代码创建视图:CREATEOFFLINE(stuinfo) 若希望以编程方式创建游离视图,可使用CREATE SQL VIEW命令,跟之以CREATEOFFLINE()命令。 例如,以下代码创建一个游离视图,用于显示来自联机数据库中xsb表和xk表中的数据。由于没有指定更新条件,因此视图是只读的。CREATE SQL VIEW showxsb;CONNECTION dsource;AS SELECT * FROM xsb INNER JOIN xk;ON xsb.xh
59、=xk.xhCREATEOFFLINE(showxsb) 2022-6-15815.5.2 显示和修改游离数据 为游离数据创建了视图后,就可以在应用程序中像使用其他视图一样使用这些视图:添加、修改、删除记录。 多个用户可以以共享模式同时访问同一数据库中的游离视图。 如果不想保留对游离数据的任何修改,可以恢复信息重新反映原始信息。2022-6-15821. 使用游离数据 使用游离数据视图,可以像使用联机视图那样使用表单、报表或应用程序来显示和更新数据。 例如,以下代码打开Showxsb视图:USE Showxsb 注意:如果在游离视图中没有得到所需的数据子集,可检查远程视图的优化设置。 如果使用
60、DBSETPROP()函数设置了MaxRecords属性,则视图中最多只能包含设置的记录数。 如果在视图的字段列表中包含一个备注字段,则即使将FecthMemo设置为“否”(.F.),该备注字段也将自动包含在结果集合中。 2022-6-15832. 管理游离数据 在一些情况下,尤其在多用户环境中,很多人会同时操作相同的数据,在把游离数据更新到源数据库之前,可能希望检查一下那些被改动过的数据。 使用带有ADMIN子句的USE命令,可以查看对游离数据的所有修改,还可以有选择地放弃一些还没有与数据源相连接的那些修改。 例如,以下代码在管理员模式下打开Showxsb视图:USE Showxsb ADMIN 2022-6-1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- ktv规章制度奖惩制度
- 招商奖惩制度实施细则
- 搅拌站领导带班奖惩制度
- 政教处量化管理奖惩制度
- 教师岗位大练兵奖惩制度
- 教育教学质量奖惩制度
- 文明创建考核奖惩制度
- 新疆小学师生奖惩制度
- 施工现场消防奖惩制度
- 无人机协会奖惩制度范本
- 五个带头方面整改措施
- DB31∕T 1597-2025 老年人屈光不正社区筛查规范
- DB32∕T 5276-2025 木结构人行桥梁技术规程
- 药品供应链管理与安全
- 2025年初级特种消防车驾驶员《理论知识》考试真题(含新版解析)
- 2025年REACH第35批SVHC高度关注物质清单251项
- 叙事护理在肿瘤患者护理中的实践
- 征兵考试试题与答案详解
- 新教材高考化学一轮三讲常见物质的制备教案(2025-2026学年)
- 2025年CCAA注册审核员《产品认证基础》(真题卷)附答案
- 2025年海南公务员考试申论试题及答案
评论
0/150
提交评论