290 likes | 442 Views
第 6 章 查询与视图. 本章要点. 查询的概念、利用查询设计器建立查询 、 利用查询向导建立查询、查询设计器的局限性、运行查询 视图的定义、视图的分类 、使用本地视图向导创建本地视图、使用视图设计器创建本地视图、创建远程视图、建立远程视图与建立连接、视图与数据更新、如何使用视图. 6.1 查询. 6.1.1 查询设计器. 1 .查询的概念 定义: 查询是指向一个数据库发出的检索信息的请求,它使用一些条件提取特定的记录。实质上就是一个预先定义好的 SOL SELECT 语句,以扩展名为 qpr 的文本文件保存在磁盘上的。
E N D
本章要点 • 查询的概念、利用查询设计器建立查询、利用查询向导建立查询、查询设计器的局限性、运行查询 • 视图的定义、视图的分类 、使用本地视图向导创建本地视图、使用视图设计器创建本地视图、创建远程视图、建立远程视图与建立连接、视图与数据更新、如何使用视图
6.1.1查询设计器 • 1.查询的概念 • 定义: • 查询是指向一个数据库发出的检索信息的请求,它使用一些条件提取特定的记录。实质上就是一个预先定义好的SOL SELECT语句,以扩展名为qpr的文本文件保存在磁盘上的。 • 查询的运行结果是一个基于表和视图的动态的数据集合。
6.1.2 建立查询 • 1.打开查询设计器建立查询 • 方法: • 打开查询设计器 • 选择字段 • 设置联接 • 设置筛选条件 • 设置排序依据 • 设置分组依据 • 设置输出范围 • 运行查询
2.利用查询向导建立查询 • 方法: • 打开查询向导 • 字段选取 • 为表建立关系 • 设置筛选条件 • 设置排序记录 • 设置记录的输出范围 • 设置查询的保存方式 • 例如:建立一个含有职工号、供应商号、订购单号和地址信息的查询。
6.1.3 查询设计器的局限性 • 当建立查询并存盘后将产生一个扩展名为qpr的文本文件。 • 如果熟悉SOL SELECT,则可以直接用各种文本编辑器,通过自己写的SOL SELECT语句建立查询,最后把它保存查询设计器的局限性为扩展名为qpr的文件。 • 查询设计器只能建立一些比较规则的查询,而复杂的查询(嵌套查询)就不行了。
例如:第五章例26列出每个职工办理的具有最高总金额的订购单信息,SQL SELECT语句如下: • SELECT out.职工号,out.供应商号,out.订购单号,out.订购日期,out.总金额;FROM dgd out WHERE 总金额=; (SELECT MAX(总金额)FROM dgd inner1;WHERE out.职工号= inner1. 职工号) • 上述的查询用查询设计器是设计不出来的,像这种复杂的内外层相相关的嵌套查询不能用查询设计进行修改。
6.1.4 运行查询 • 1.查询的运行 • 方法: • 打开查询设计器后运行查询 • 打开项目管理器后运行查询 • 通过命令运行查询 • 命令格式: • DO QueryFile • 命令说明: • QueryFile是查询文件名,必须给出查询文件的扩展名.qpr,因为系统默认的是以.prg为扩展名的程序文件。
2.查询的修改 • 方法: • 打开“文件”菜单,选择“打开”命令,或者在工具栏上单击“打开”按钮,在“打开”对话框中选择要修改的查询文件,单击“确定”按钮,进入查询设计器中修改。 • 在项目管理器中,选择要修改的查询文件,单击右边的“修改”按钮,进行查询设计器中修改。 • 在命令窗口中,输入MODIFY QUERY<查询文件名>
3.设计查询的输出形式 • 方法: • 选择“查询”菜单下的“查询去向”,或在“查询设计器”工具栏中单击“查询去向”按钮,将打开一个“查询去向”对话框,在其中可以选择一种去向。 • 几种输出去向 • 浏览 • 在浏览窗口中显示查询结果(默认的查询去向)。 • 临时表 • 将查询结果存储在张临时命名的只读表中,临时表被关闭时,表将从内存中删除,因为临时表存放在内存中。
表 • 将查询结果保存为一个表文件,表文件将永久地保存在磁盘上。 • 图形 • 使查询结果可用于Microsoft Graph应用程序。 • 屏幕 • 在Visual FoxPro主窗口或当前活动输出窗口中显示查询结果。 • 报表 • 将查询结果输出到一个报表文件(扩展名为.frx)。 • 标签 • 将查询结果输出到一个标签文件(扩展名为.lbx)。
6.2.1视图的定义 • 1.视图 • 定义: • 视图是一种基于表或其他视图而定制的虚拟表,因此,视图兼有“查询”和“表”的特点。 • 命令建立视图 • 格式: • CREATE VIEW <视图名>[(<列名>[,<列名>]...)] AS <子查询> [WITH CHECK OPTION] • WITH CHECK OPTION表示对视图进行UPDATE、INSERT和DELETE操作时保证更新、插入或删除的行满足视图定义中的条件。
2.视图中的虚字段 • 定义: • 用一个查询来建立一个视图的SELECT子句可以包含算术表达式或函数,这些表达式或函数与视图的其他字段一样,它们是通过计算得来的,并不存储在表内,所以称为虚字段。 • 3.视图的说明 • 在Visual FoxPro中视图是可以更新的,但是这种更新是否反映在基本表中取决于视图更新属性的设置。
6.2.2视图的分类 • 1.分类 • 本地视图 • 使用当前数据库中Visual FoxPro表建立的视图是本地视图。 • 远程视图 • 使用当前数据库之外的数据源(如SOL SELECT)中的表建立的视图是远程视图。
6.2.3 建立视图 • 1.使用本地视图向导创建本地视图 • 方法: • 打开本地视图向导 • 字段选取 • 为表建立关系 • 设置筛选条件 • 设置排序记录 • 设置记录的输出范围 • 设置视图的保存方式
2.使用视图设计器创建本地视图 • 方法: • 打开视图设计器 • 字段选取 • 设置数据表之间的联接 • 设置筛选条件 • 设置排序依据 • 设置分组依据 • 设置记录的输出范围 • 设置视图的保存方式
3.创建远程视图 • 远程包括两个方面: • 一是数据源不在本地,需要进行远程连接才能获得需要的数据源表中的信息。 • 二是数据源表不是VFP表或视图,而是其他数据库系统的数据。 • 如何创建 • 只要满足其中一种情况就需要创建远程视图。 • VFP允许将一个或多个远程视图添加到本地视图中,这样在同一视图中就可以同时访问VFP数据和远程ODBC数据源中的数据。
例如:定义视图xs_xm,生成含有字段学生号和姓名的视图。例如:定义视图xs_xm,生成含有字段学生号和姓名的视图。 • CREATE VIEW xs_xm AS; SELECT 学生号,姓名 FROM XS • 例如:定义视图xs_xh,查询学生号是001号的学生。 • CREATE VIEW xs_xh AS;SELECT 学生号,姓名 FROM XS;WHERE 学生号=001
4.视图设计器 • 视图设计器和查询设计器相比不同之处 • 查询设计器的结果是以扩展名qpr的文件保存在磁盘中;而视图设计完后,在磁盘中找不到相似的文件,视图的结果保存在数据库中。 • 由于视图是可以用于更新的,所以在视图设计器中多了一个“更新条件”选项卡。 • 与查询设计器相比,视图设计器中没有“查询去向”选项卡。
6.2.4 远程视图与连接 • 1.定义数据源和连接 • 可以在VFP内部定义数据源和连接。 • 2.建立连接 • 方法: • 使用项目管理器建立连接 • 使用菜单方式建立连接 • 使用命令方式 • CRETE CONNECTION 命令
3.建立远程视图 • 连接建立好之后就可以建立远程视图了。 • 建立远程视图和建立本地视图的方法基本上是一样的,只是在打开视图设计器时有所不同。 • 建立远程视图时,一般要根据网络上其它计算机或其它数据库中的表建立视图,所以需要首先选择“连接”或“数据源”,然后再进入界面建立远程视图。
6.2.5 视图与数据更新 • 1.指定可更新的表 • 如果视图不是基于一个表而是基于多个表的,默认可以更新“全部表”的相关字段。 • 如果指定只能更新某个表的数据,则可以通过“表”下拉列表框选择所需的表。 • 2.指定可更新的字段 • 在“字段名”列表框中列出了与更新有关的字段,在字段名左侧有两列标志,“钥匙”图标和“铅笔”图标,其中“钥匙”图标表示关键字,“铅笔”图标表示更新,通过单击相应列可以改变相关的状态。
3.检查更新合法性 • “SQL WHERE子句包括”框各选择项的含义 • 关键字段 • 当基本表中的关键字字段被修改时,更新失败。 • 关键字和可更新字段 • 基本表中任何标记为可更新的字段被修改时,更新失败。 • 关键字和已修改字段 • 当在视图中改变的任一字段的值在基本表中已被修改时,更新失败。 • 关键字和时间戳 • 当远程表上记录的时间戳在首次检索之后被修改时,更新失败。
6.2.6 使用视图 • 1.视图操作 • 使用USE命令在数据库中打开视图或关闭视图。 • 在“浏览器”窗口显示或修改视图中的记录。 • 使用SQL语句对视图进行操作。 • 使用视图在文本框、表格控件、表单或报表中作为数据源等。
2.使用视图 • 在项目管理器中使用视图 • 通过命令使用视图 • 例如:OPEN DATABASE 订单管理 && 打开订单管理数据库 • USE dgd_gys && 根据dgd表和gys表建立视图 • BROWSE && 浏览视图MODIFY VIEW && 修改当前视图
3.视图的删除 • 视图由于是从表中派生出来的,所以不需要修改结构,但视图可以删除。 • 删除视图的命令格式为:DROP VIEW view_name