第五章:使用视图更新数据

使用视图,可以从表中提取一组记录,改变这些记录的值,并把更新结果送回到源表中。您可以从本地表、其它视图、存储在服务器上的表或远程数据源中创建视图,如从 Microsoft® SQL Server ODBC 中创建视图。通过打开“发送更新”选项,在更新或更改视图中的一组记录时,由 Visual FoxPro 将这些更新发送到源表中。

本章讨论创建一个简单的基于单表的本地和远程视图,有关创建多表视图及在一个视图中合并本地和远程数据的内容,请参阅第六章“查询和更新多表”

本章要点:

创建视图

创建视图和创建查询的过程类似,主要的差别在于视图是可更新的,而查询则不行。查询是一种 SQL - SELECT 语句,作为文本文件以扩展名 .qpr 存储。若想从本地或远程表中提取一组可以更新的数据,就需要使用视图。

查询、视图和远程视图

例如,您可以显示但不能更新由查询检索到的记录。但当编辑视图中的记录时,可以将更改发送回源表,并更新源表。

视图是数据库中的一个特有功能,只有在包含视图的数据库打开时,才能使用视图。

使用“视图向导”

可以使用“本地视图向导”创建本地视图。若要在 ODBC 数据源的表上建立可更新的视图,请使用“远程视图向导”

若要使用向导创建视图

  1. 在“项目管理器”中,选定一个数据库。

  2. 选定“本地视图”或“远程视图”,选择“新建”按钮。

  3. 选择“视图向导”按钮。

  4. 按照向导屏幕上的指令操作。

启动“视图设计器”

若要创建本地表的视图,请使用“视图设计器”。本地表包括本地 Visual FoxPro 表、任何使用 .dbf 格式的表和存储在本地服务器上的表。

若要使用“视图设计器”,首先应创建或打开一个数据库,当展开“项目管理器”中数据库名称旁边的加号 + 时,“数据”选项卡上将显示出数据库中的所有组件。

本地视图存储在数据库中。

若要创建本地视图

  1. 从“项目管理器”中选定一个数据库。

  2. 单击“数据库”符号旁的加号 +。

  3. 在“数据库”下,选定“本地视图”并选择“新建”按钮。

  4. 选择“新建视图”按钮。

  5. 在“添加表或视图”对话框中,选定想使用的表或视图,再选择“添加”。

  6. 选择视图中想要的表和视图后,选择“关闭”。

    出现“视图设计器”,显示选定的表或视图。

  7. 在“字段”选项卡上,选择要在视图结果中显示的字段。

  8. 若要查看视图中的结果,请选择“运行”按钮。

您也可以在“文件”菜单中,选择“新建”命令并选择“视图”来创建视图。

本地视图的“视图设计器”

使用“视图设计器”基本上与使用“查询设计器”一样,但“视图设计器”多了一个选项卡:“更新条件”选项卡,它可以控制更新。有关使用“更新条件”选项卡的详细内容,请参阅本章稍后的“更新数据”部分。有关使用“查询设计器”的详细内容,请参阅第四章“检索数据”

连接远程数据

使用远程视图,无需将所有记录下载到本地计算机上即可提取远程 ODBC 服务器上的数据子集。您可以在本地机上操作这些选定的记录,然后把更改或添加的值返回到远程数据源中。

有两种连接远程数据源的方法,可以直接访问在机器上注册的 ODBC 数据源,也可以用“连接设计器”设计自定义连接。

在安装 Visual FoxPro 时,选择 Visual FoxPro 的“完全”或“自定义”安装选项,就可以把 ODBC 安装在系统中。有关注册 ODBC 数据源的详细内容,请参阅《安装指南》的第一章“安装 Visual FoxPro”

创建连接

如果想为服务器创建定制的连接,可以使用“连接设计器”,创建的连接将作为数据库的一部分保存起来,并含有如何访问特定数据源的信息。

连接设计器

可以设置连接选项,命名并存储连接供以后使用。您也可能需要同系统管理员商量或查看服务器文档,以便找到“连接”到特定服务器上的正确设置。在《程序员指南》第八章“创建视图”中有“连接设计器”设置的详细说明。

注释 必须打开数据库才能创建连接。

若要创建新的连接

  1. 在“项目管理器”中选定一个数据库。

  2. 选定“连接”并选择“新建”。

  3. 在“连接设计器”中,根据服务器的需要输入选项。

  4. 从“文件”菜单中,选择“保存”命令。

  5. 在“保存”对话框中,向“连接名称”框中输入连接的名称。

  6. 选择“确定”。

也可以从“文件”菜单中,选择“新建”命令并选择“连接”选项来创建连接。

创建新的远程视图

若要在视图中访问远程数据,可使用已有的连接或用新视图创建连接。

若要创建新的远程视图

  1. 在“项目管理器”中,选取“远程视图”。

  2. 选择“新建”。

  3. 在“选择连接或数据源”对话框中,选择“可用的数据源”选项。

    — 或者 —

    如果有一个已定义并保存的连接,则选定“连接”选项。

  4. 选定一个数据源或连接并选择“确定”

  5. 在 Microsoft SQL Server 或其他注册对话框中,如果需要,请输入注册 ID 和密码。

您也可以从“文件”菜单中选择“新建”命令并选择“远程视图”选项。

一旦建立了连接,“打开”对话框就会显示出来, 从中可以选择远程服务器上的表。

远程服务器上的表

当选择表后,“视图设计器”将打开。

远程视图的“视图设计器”

若要创建远程视图,选择输出字段,再象本地视图一样设置筛选条件。

更新数据

可用本地或远程视图更新数据。

向表发送更新数据

在“视图设计器”中,“更新条件”选项卡可以控制把对远程数据的修改(更新、删除、插入)回送到远程数据源中的方式,也可以打开和关闭对表中指定字段的更新,并设置适合服务器的 SQL 更新方法。

使表可更新

如果希望在表的本地版本上所作的修改能回送到源表中,需要设置“发送 SQL 更新”选项,必须至少设置一个关键字段来使用这个选项。如果选择的表中有一个主关键字段并且已在字段选项卡中,则“视图设计器”自动使用表中的该主关键字段作为视图的关键字段。

若要允许源表的更新

设置关键字段

当在“视图设计器”中首次打开一个表时,“更新条件”选项卡会显示表中哪些字段被定义为关键字段。Visual FoxPro 用这些关键字段来唯一的标识那些已在本地修改过的远程表中的更新记录。

若要设置关键字段

在“更新条件”选项卡中设置关键字段

如果已经改变了关键字段,而又想把它们恢复到源表中的初始设置,请选择“重置关键字”。Visual FoxPro 会检查远程表并利用这些表中的关键字段。

更新指定字段

可以指定任一给定表中仅有某些字段允许更新。若使表中的任何字段是可更新的,在表中必须有已定义的关键字段。如果字段未标注为可更新的,用户可以在表单中或浏览窗口中修改这些字段,但修改的值不会返回到远程表中。

若要使字段为可更新的

更新所有字段

如果想使表中的所有字段可更新,可以将表中的所有字段设置成可更新的。

若要使所有字段可更新

控制如何检查更新冲突

如果在一个多用户环境中工作,服务器上的数据也可以被别的用户访问,也许别的用户也在试图更新远程服务器上的记录,为了让 Visual FoxPro 检查用视图操作的数据在更新之前是否被别的用户修改过,可使用“更新条件”选项卡上的选项。

在“更新条件”选项卡中,“SQL WHERE 子句包括”框中的选项可以帮助管理遇到多用户访问同一数据时应如何更新记录。在允许更新之前,Visual FoxPro 先检查远程数据源表中的指定字段,看看它们在记录被提取到视图中后有没有改变,如果数据源中的这些记录被修改,就不允许更新操作。

在“更新条件”选项卡中设置 SQL WHERE 子句

这些选项决定哪些字段包含在 UPDATE 或 DELETE 语句的 WHERE 子句中,Visual FoxPro 正是利用这些语句将在视图中修改或删除的记录发送到远程数据源或源表中,WHERE 子句就是用来检查自从提取记录用于视图中后,服务器上的数据是否已改变。

如果... 应选择的 SQL WHERE 选项
当源表中的关键字段被改变时,使更新失败 关键字段
当远程表中任何标记为可更新的字段被改变时,使更新失败。 关键字和可更新字段
当在本地改变的任一字段在源表中已被改变时,使更新失败。 关键字和已修改字段
当远程表上记录的时间戳在首次检索之后被改变时,使更新失败(仅当远程表有时间戳列时有效) 关键字和时间戳

有关检测和解决更新冲突的详细内容,请参阅《程序员指南》中第十七章“共享访问程序设计”

定制视图

可以在视图中包含表达式、设置提示输入值,也可以设置高级选项来协调与服务器交换数据的方式,您可用以下方法来定制视图。

控制字段显示和数据输入

因为视图是数据库的一部分,您可利用数据库提供的表中字段的一些相同属性。例如,可分配标题,输入注释,或设置控制数据输入的有效性规则。

若要控制字段显示和数据输入

  1. 在“视图设计器”中创建或修改视图。

  2. 在“字段”选项卡中,从“选定字段”列表中选择一个字段。

  3. 选择“属性”。

“视图字段属性”对话框

  1. 在“视图字段属性”对话框中,输入有效性规则,显示内容及字段类型设置。

有关字段有效性规则、显示和映射的详细内容,请参阅《程序员指南》中的第七章“处理表”

控制更新方法

若要控制关键字段的信息实际上在服务器上更新的方式,可使用“使用更新”中的选项。当记录中的关键字更新时,这些选项决定发送到服务器或源表中的更新语句使用什么 SQL 命令。

“更新条件”选项卡更新设置

您可指定先删除记录,然后使用在视图中输入的新值取代原值(SQL DELETE 然后 INSERT),也可指定为使用服务器支持的 SQL UPDATE 函数所改变的服务器记录。

在远程视图中添加表达式

与查询一样,可以在视图中加入函数和表达式作为筛选条件。

若要在视图中添加表达式

当视图基于远程数据源时,在“表达式设计器”中显示的函数反映了服务器所支持的函数。请查看服务器文档中列出的该服务器所支持的函数列表,Visual FoxPro 不对构造的表达式作语法分析,而是将它们发送到远程服务器上。

参数提示

您可设置视图,提示输入完成查询所需参数值。例如,假设要创建查询,查找指定国家/地区的客户。要做到这项任务,需要在国家/地区字段中定义一个过滤器并且指定一个参数作为过滤器的实例。参数名可以是任意字母、数字和单引号的组合。

若要对视图设置参数

  1. 在“视图设计器”中,添加新过滤器或从“筛选”选项卡中选择现有的过滤器。

  2. 在“实例”框,键入一个问号(?)和参数名。

    作为视图过滤器的一部分所键入的参数值

当使用视图时,信息框显示的提示信息要求提供一个包含在过滤器中的值。

设置超时间隔

如果想调整 Visual FoxPro 同服务器进行交互的方式,可以设置定时选项。

若要设置超时间隔

  1. 在“项目管理器”中,选定一个连接并选择“修改”。

  2. 在“超时间隔”框中,设置所需选项。

  3. 从“文件”菜单中,选择“保存”命令。

有关设置时间选项的详细内容,请参阅“连接设计器”

优化执行结果

可以优化视图,方法是设置数据获取和执行选项。可使用“高级选项”对话框,进一步选择在视图中记录的索引方式或服务器或源表的更新方式。

“高级选项”对话框

若要设置高级选项

  1. 从“查询”菜单中选择“高级选项”。

  2. “高级选项”对话框中,设置连接内容和需要的数据获取选项。

  3. 选择“确定”。

有关优化视图的详细内容,请参阅《程序员指南》中的第八章“创建视图”