第 11 章 sql 视图、 vfp8.0 的 cursoradapter 和客户/服务器编程

23
11 11 SQL SQL 第第第第VFP8.0 VFP8.0 CursorAdapte CursorAdapte r r 第第第 第第第第第 第第第 第第第第第 11.1 客客 / 客客客客客 (Client/Server) 客客 ODBC 客客客(1) 客客 Windows 客客客客 (Control Panel) 客客 ODBC 客客(2) 客客客客 (Data Sources) 客客客客客客 (Add) (3) 客客客客客客 (Add Data Source) 客客客客客 SQL Server OD BC 客客 客客客客 (OK) (4) 客 ODBC SQL Server 客客客客客 客客客客客客客 (Data Source Name 客客客 ,: SQL2000) 客客 (Description 客客客 ,: SQL ser ver Version 2000) 客客客客客客客客 客客客客客客 ,。 (5) 客客客客客客客客客客 (Close)

Upload: anneke

Post on 05-Jan-2016

185 views

Category:

Documents


0 download

DESCRIPTION

第 11 章 SQL 视图、 VFP8.0 的 CursorAdapter 和客户/服务器编程. 11.1 客户 / 服务器结构 (Client/Server) 安装 ODBC 数据源: (1) 转到 Windows 控制面板 (Control Panel) ,并选 ODBC 图标。 (2) 在数据源 (Data Sources) 对话框选添加 (Add) 。 (3) 在添加数据源 (Add Data Source) 对话框选择 SQL Server ODBC 程序,并选确定 (OK) 。 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第 11 章 SQL 视图、 VFP8.0 的 CursorAdapter 和客户/服务器编程

第第 1111 章章 SQLSQL 视图、视图、 VFP8.0VFP8.0 的的 CursorAdCursorAdapterapter 和客户/服务器编程和客户/服务器编程

11.1 客户 / 服务器结构 (Client/Server)安装 ODBC 数据源:(1) 转到 Windows 控制面板 (Control Panel) ,并选 ODBC 图

标。(2) 在数据源 (Data Sources) 对话框选添加 (Add) 。(3) 在添加数据源 (Add Data Source) 对话框选择 SQL Server

ODBC 程序,并选确定 (OK) 。(4) 在 ODBC SQL Server 安装对话框,键入数据源名称 (Data

Source Name ,例如: SQL2000) 、说明 (Description ,例如: SQL server Version 2000) 和其它合适的信息,然后选确定。

(5) 在数据源对话框选关闭 (Close) 。

Page 2: 第 11 章 SQL 视图、 VFP8.0 的 CursorAdapter 和客户/服务器编程

11.2 创建和使用视图 (SQL View)一、本地视图和远程视图远程视图:使用远程 SQL 句法从远程 ODB

C 数据源选择信息。本地视图:使用 VFP SQL 句法从表或视图

选择信息。

Page 3: 第 11 章 SQL 视图、 VFP8.0 的 CursorAdapter 和客户/服务器编程

数据库中使用的视图设计器与查询设计器基本类似,不同点:视图不象查询,它是可修改的,在 SQL View 中修改数据后, VFP 会自动修改与视图有关的基表 ( 即视图建立在之上的表 ) 中的数据;视图只能作为数据库的一部分保存下来而不是作为一个单独的文件 ( 选择文件 + 保存菜单项去存贮视图,视图名不能含路径 ) ,而查询可以作为单独的 QPR 文件存贮;视图可以包含远程服务器中的表,用户在自己的计算机上所作的修改可以送回到服务器。

Page 4: 第 11 章 SQL 视图、 VFP8.0 的 CursorAdapter 和客户/服务器编程

二、创建本地视图 (Local View)为创建本地视图,可在菜单“文

件” (File)→“ 打开” (open) ,打开一个项目后在项目管理器 (Project Manager) 选择一个数据库 (Database) ,然后选本地视图 (Local View) ,再选“新建” (New) 去打开视图设计器 (View Designer) ;或者使用 CREATE SQL VIEW命令带 AS 子句。

Page 5: 第 11 章 SQL 视图、 VFP8.0 的 CursorAdapter 和客户/服务器编程

例 11.2 :建立一个包括 Products 表中全部字段的视图:

CREATE SQL VIEW Product_View As ;SELECT * FROM testdata!products

Page 6: 第 11 章 SQL 视图、 VFP8.0 的 CursorAdapter 和客户/服务器编程

三、创建多表视图 用户若想访问存贮在两个或更多的表

中的相关信息时,可创建多表视图。在用视图设计器创建一个视图时,添加多个表,或者用 CREATE SQL VIEW 命令能建立多表视图。通过修改已存在的视图或通过创建新视图,创建多表视图。

Page 7: 第 11 章 SQL 视图、 VFP8.0 的 CursorAdapter 和客户/服务器编程

1. 修改一个视图例 11.3 :用程序码在视图设计器中显示 Pr

oduct_view 视图:OPEN DATABASE testdataMODIFY VIEW Product_view

Page 8: 第 11 章 SQL 视图、 VFP8.0 的 CursorAdapter 和客户/服务器编程

2. 用语言创建一个多表视图( 1 )在 WHERE 子句中使用联接条件例 11.4 :如果想知道订单的信息,包括接收订单雇员和发

出订单顾客的信息,可建立一个使用 Customer 、 Orders 和 Employee 表的视图,用 WHERE 子句指出连接条件 ( 即视图中只包含满足此条件的记录 ) 。

OPEN DATABASE testdataCREATE SQL VIEW cust_order_emp_wiew AS ;SELECT * ;FROM testdata!customer,testdata!orders,testdata!

empoyee ;WHERE customer.cust_id=orders.cust_id ;.AND. employee.emp_id=orders.emp_id

Page 9: 第 11 章 SQL 视图、 VFP8.0 的 CursorAdapter 和客户/服务器编程

( 2 )用 FROM 子句指定视图的联接条件例 11.5 :OPEN DATABASE testdataCREATE SQL VIEW cust_ orders_ view AS ;SELECT * FROM testdata! customer ;INNER JOIN testdata! orders ;ON customer.cust_id=orders.cust_id例 11.6 :OPEN DATABASE testdataCREATE SQL VIEW cust_orders_view AS ;SELECT * FROM testdata! customer ;LEFT OUTER JOIN TESTDATA! Orders ;ON customer.cust_id=order.cust_id

Page 10: 第 11 章 SQL 视图、 VFP8.0 的 CursorAdapter 和客户/服务器编程

11.2.3 定义一个连接 (Connection)1. 定义一个连接 (Connection)可采用如下方法之一:( 1 )在项目管理器数据库 (Database)列表中,

选择连接 (Connection) ,然后选“新建” (New) 去打开连接设计器 (Connection Designer) 。

( 2 )或,打开一个数据库,并使用 CREATE CONNECTION 命令去打开连接设计器。

( 3 )或,使用带有一个连接名字的 CREAT CONNECTION 命令去打开连接设计器。

Page 11: 第 11 章 SQL 视图、 VFP8.0 的 CursorAdapter 和客户/服务器编程

2. 显示存在的连接用户可在项目管理器选择一个数据库 (data

base) ,然后选择连接 (Connections) 。或者使用 DISPLAY CONNECTIONS 命令确定存在的连接。

例 11.8 :显示 testdata 数据库的连接。OPEN DATABASE testdataDISPLAY CONNECTIONS

Page 12: 第 11 章 SQL 视图、 VFP8.0 的 CursorAdapter 和客户/服务器编程

11.2.4 创建远程视图 (Remote View)在项目管理器,选择一个数据库 (Database) ,再选

择“远程视图” (Remote View) ,然后选“新建” (New) 去打开视图设计器。或,使用带有 REMOTE 和 ( 或 )CONNECTION 子句的 CREATE SQL VIEW 命令去建立一个远程视图。

如果在 CREATE SQL VIEW 命令中使用 CONNECTION 子句,不必再包括 REMOTE 关键字, VFP也会指定视图为远程的。

例 11.9:从远程服务器上 Testdata 数据库的 products 表建立一个远程视图。

OPEN DATABASE testdataCREATE SQL VIEW product_remote_viewCONNECTOIN remote_01 ;AS SELECT * FROM products

Page 13: 第 11 章 SQL 视图、 VFP8.0 的 CursorAdapter 和客户/服务器编程

11.2.5 更名或删除视图11.2.6 使用视图1. 在多工作区打开一个视图2. 显示视图结构3. 设置视图和连接 (Connection)属性

Page 14: 第 11 章 SQL 视图、 VFP8.0 的 CursorAdapter 和客户/服务器编程

1.3 更新视图的数据视图属性 缺省设置Table 具有可更新字段和具有至少一个主关

键字段的全部表KeyField 数据库关键字段和表的远程主关键字UpdateName 所有字段形式为表名 .列名Updatable 除了主关键字段的全部字段SendUpdates 它原始设为假 (.F.) ,只在工作期内有效。如果改变它为真 (.T.) ,则成为该工作期中所建立的全部视图的默认值

Page 15: 第 11 章 SQL 视图、 VFP8.0 的 CursorAdapter 和客户/服务器编程

11.4 集成视图 (Combining View)1.集成本地和远程数据在视图中用户通过创建基于本地视图和远程视图的新本地视

图,可以集成本地和远程数据。要创建一个集成本地和远程数据的视图,可以:

( 1 )在项目管理器选择一个数据库 (database) ,再选本地视图 (Local views) 和选“新建” (New) 去打开视图设计器。在视图中添加表、本地视图和远程视图。

( 2 )或使用 CREATE SQL VIEW 命令。

Page 16: 第 11 章 SQL 视图、 VFP8.0 的 CursorAdapter 和客户/服务器编程

2. 在一个视图中更新本地和远程数据当用户在一个多级视图中更新数据时,更新

“走”到下一级 (顶级视图所基于的视图 ) 。如果想更新多级视图的基表,必须为结构中的各视图发出 TABLEUPDATE命令。

为多级视图更新基表最容易的方法是从顶级向下关闭 (close) 视图结构,因为当关闭一个视图时, VFP 自动发出一个 TABLEUPDATE 命令。

Page 17: 第 11 章 SQL 视图、 VFP8.0 的 CursorAdapter 和客户/服务器编程

11.5 使用视图和 SQL传递进行 C/S模式编程11.5.1 使用视图 (SQLViews) 进行 C/S模式编程可以使用视图作为开发一个强有力的客户 / 服务器应用程序的核心方法。远程视图是一个功能强大的技术,它设计来使你能够从远程服务器选择恰好需要的数据下载到本地 VFP临时表 (cursor)中,然后可以使用它去查看和更新远程数据。一个视图是来自 SQL SELECT 语句的一个基本结果集。可使用参数化的 SELECT 语句下载特定的小数据集合 (参数化查询详见 VFP 的帮助 ) 。

Page 18: 第 11 章 SQL 视图、 VFP8.0 的 CursorAdapter 和客户/服务器编程

11.5.2 升迁及升迁向导 (Upsizing Wizard)

VFP提供两个升迁向导:“ Oracle升迁向导”和“ SQL Server升迁向导”。这两个向导可创建一个 Oracle 数据库或 SQL Server 数据库,实现 VFP 数据库中各表的功能。还可以重定向 VFP 视图,使其使用新建的远程数据而不是本地数据。以及实现将本地应用程序移植为客户 / 服务器应用程序等升迁。

Page 19: 第 11 章 SQL 视图、 VFP8.0 的 CursorAdapter 和客户/服务器编程

11.5.3 使用 SQL传递 (SQL Pass-through) 进行 C/S模式编程

SQL传递 (SPT)技术用 VFP 的 SQL传递函数去直接访问远程服务器。这些函数允许超过视图的功能进行附加的服务器访问和控制。例如,使用 SQL传递可以完成远程服务器上的数据定义,设置服务器属性和访问服务器存贮过程 (Procedures)等。

SQL传递是建立只读结果集和使用任何其它当地 SQL 语法最好的工具。与视图 ( 它只是来自 SQL SELECT 语句的一个结果集 ) 不同, SQL传递可使用 SQLEXEC()函数去发送任何希望的东西到服务器。

Page 20: 第 11 章 SQL 视图、 VFP8.0 的 CursorAdapter 和客户/服务器编程

11.6 VFP8.0 的 CursorAdapter 与 C/S模式编程11.6.1 VFP8.0 的 CursorAdapter概述11.6.2 CursorAdapter 的属性、事件和方法及工作本节先介绍 CursorAdapter 工作的例子,从而引导读者了解 CursorAdapter 的 PEMS ,即它的属性( Properties ) ,事件( Events )和方法( Methods )。

下面的例子可得到来自后端 SQL Server 的 Northwind 数据库 Customers 表中 Brazilian 客户的一定的字段。其 Cursor 是可更新的,所以如果在 Cursor做任何改变后关闭它,再重新运行此程序,便可以看到此变化已存贮到后端数据库中。

Page 21: 第 11 章 SQL 视图、 VFP8.0 的 CursorAdapter 和客户/服务器编程

11.6.3 使用 naive 的 CursorAdapter11.6.4 使用 ODBC 的 CursorAdapter ODBC实际上是 DataSourceType 4 个设置中最直

接的。可以设置 DataSource 为一个打开的 ODBC 连接柄( handle ) , 设置有用的属性和调用 CursorFill 去取回数据。如果“填充”好 KeyFieldList 、 Table 、 UpdatableFieldList 和 UpdateNameList 的内容, VFP将自动产生合适的 UPDATE 、 INSERT 和 DELETE 语句,并用其带来的任何变化去更新数据库。如果想使用一个存贮过程( stored procedure )代替之,则应合适地设置 *Cmd 、 *CmdDatasource 和 *CmdDatasourceType属性。

Page 22: 第 11 章 SQL 视图、 VFP8.0 的 CursorAdapter 和客户/服务器编程

11.6.5 使用 ADO 的 CursorAdapter11.6.6 使用 XML 的 CursorAdapter例 11.25 :Local lows as dataserver web service Lows =NEWOBJECT(〝Wsclient〞 ,HOME()+〝ffc\_webservices.vcx 〞 )

Lows.cWSName =〝 dataserver web serviceLows=lows.setupClient(

http://localhost/sQDataServer/dataServer.WSDL″,; 〝 dataserver〞 , 〝 dataserverSoapPort〞 )

lcXML=lows.GetCustomers()return lcXML

Page 23: 第 11 章 SQL 视图、 VFP8.0 的 CursorAdapter 和客户/服务器编程

例 11.26 :Local loXML as MSXML2.XMLHTTP LoXML =createobject(′MSXML2.XMLHTTP′)LoXML.open(′POST′,′http://localhost/northwin

d/template/′+;′getallcustomers.xnl′,.F.)loXML.setRequestHeader(′Content-type′,′text/xml′)

loXML.send()return loXML.responseText