230 likes | 415 Views
第 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) 。
E N D
第11章SQL视图、VFP8.0的CursorAdapter和客户/服务器编程第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)。 (4)在ODBC SQL Server安装对话框,键入数据源名称(Data Source Name,例如:SQL2000)、说明(Description,例如:SQL server Version 2000)和其它合适的信息,然后选确定。 (5)在数据源对话框选关闭(Close)。
11.2 创建和使用视图(SQL View) 一、本地视图和远程视图 远程视图:使用远程SQL句法从远程ODBC数据源选择信息。 本地视图:使用VFP SQL句法从表或视图选择信息。
数据库中使用的视图设计器与查询设计器基本类似,不同点:视图不象查询,它是可修改的,在SQL View中修改数据后,VFP会自动修改与视图有关的基表(即视图建立在之上的表)中的数据;视图只能作为数据库的一部分保存下来而不是作为一个单独的文件(选择文件+保存菜单项去存贮视图,视图名不能含路径),而查询可以作为单独的QPR文件存贮;视图可以包含远程服务器中的表,用户在自己的计算机上所作的修改可以送回到服务器。
二、创建本地视图(Local View) 为创建本地视图,可在菜单“文件”(File)→“打开”(open),打开一个项目后在项目管理器(Project Manager)选择一个数据库(Database),然后选本地视图(Local View),再选“新建”(New)去打开视图设计器(View Designer);或者使用CREATE SQL VIEW命令带AS子句。
例11.2:建立一个包括Products表中全部字段的视图:例11.2:建立一个包括Products表中全部字段的视图: CREATE SQL VIEW Product_View As; SELECT * FROM testdata!products
三、创建多表视图 用户若想访问存贮在两个或更多的表中的相关信息时,可创建多表视图。在用视图设计器创建一个视图时,添加多个表,或者用CREATE SQL VIEW命令能建立多表视图。通过修改已存在的视图或通过创建新视图,创建多表视图。
1.修改一个视图 例11.3:用程序码在视图设计器中显示Product_view视图: OPEN DATABASE testdata MODIFY VIEW Product_view
2.用语言创建一个多表视图 (1)在WHERE子句中使用联接条件 例11.4:如果想知道订单的信息,包括接收订单雇员和发出订单顾客的信息,可建立一个使用Customer、Orders和Employee表的视图,用WHERE子句指出连接条件(即视图中只包含满足此条件的记录)。 OPEN DATABASE testdata CREATE 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
(2)用FROM子句指定视图的联接条件 例11.5: OPEN DATABASE testdata CREATE 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 testdata CREATE SQL VIEW cust_orders_view AS; SELECT * FROM testdata! customer; LEFT OUTER JOIN TESTDATA! Orders; ON customer.cust_id=order.cust_id
11.2.3 定义一个连接(Connection) 1.定义一个连接(Connection) 可采用如下方法之一: (1)在项目管理器数据库(Database)列表中,选择连接(Connection),然后选“新建”(New)去打开连接设计器(Connection Designer)。 (2)或,打开一个数据库,并使用CREATE CONNECTION命令去打开连接设计器。 (3)或,使用带有一个连接名字的CREAT CONNECTION命令去打开连接设计器。
2.显示存在的连接 用户可在项目管理器选择一个数据库(database),然后选择连接(Connections)。或者使用DISPLAY CONNECTIONS命令确定存在的连接。 例11.8:显示 testdata数据库的连接。 OPEN DATABASE testdata DISPLAY CONNECTIONS
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 testdata CREATE SQL VIEW product_remote_view CONNECTOIN remote_01; AS SELECT * FROM products
11.2.5 更名或删除视图 11.2.6 使用视图 1.在多工作区打开一个视图 2.显示视图结构 3.设置视图和连接(Connection)属性
1.3 更新视图的数据 视图属性 缺省设置 Table 具有可更新字段和具有至少一个主关键字段的全部表 KeyField 数据库关键字段和表的远程主关键字 UpdateName 所有字段形式为表名.列名 Updatable 除了主关键字段的全部字段 SendUpdates 它原始设为假(.F.),只在工作期内有效。如果改变它为真(.T.),则成为该工作期中所建立的全部视图的默认值
11.4 集成视图(Combining View) 1.集成本地和远程数据在视图中 用户通过创建基于本地视图和远程视图的新本地视图,可以集成本地和远程数据。要创建一个集成本地和远程数据的视图,可以: (1)在项目管理器选择一个数据库(database),再选本地视图(Local views)和选“新建”(New)去打开视图设计器。在视图中添加表、本地视图和远程视图。 (2)或使用CREATE SQL VIEW命令。
2.在一个视图中更新本地和远程数据 当用户在一个多级视图中更新数据时,更新“走”到下一级(顶级视图所基于的视图)。如果想更新多级视图的基表,必须为结构中的各视图发出TABLEUPDATE命令。 为多级视图更新基表最容易的方法是从顶级向下关闭(close)视图结构,因为当关闭一个视图时,VFP自动发出一个TABLEUPDATE命令。
11.5 使用视图和 SQL传递进行C/S模式编程 11.5.1 使用视图(SQLViews) 进行C/S模式编程 可以使用视图作为开发一个强有力的客户/服务器应用程序的核心方法。远程视图是一个功能强大的技术,它设计来使你能够从远程服务器选择恰好需要的数据下载到本地VFP临时表(cursor)中,然后可以使用它去查看和更新远程数据。一个视图是来自SQL SELECT语句的一个基本结果集。可使用参数化的SELECT语句下载特定的小数据集合(参数化查询详见VFP的帮助)。
11.5.2 升迁及升迁向导(Upsizing Wizard) VFP提供两个升迁向导:“Oracle升迁向导”和“SQL Server升迁向导”。这两个向导可创建一个Oracle数据库或SQL Server数据库,实现VFP数据库中各表的功能。还可以重定向VFP视图,使其使用新建的远程数据而不是本地数据。以及实现将本地应用程序移植为客户/服务器应用程序等升迁。
11.5.3 使用SQL传递(SQL Pass-through) 进行C/S模式编程 SQL传递(SPT)技术用 VFP的 SQL传递函数去直接访问远程服务器。这些函数允许超过视图的功能进行附加的服务器访问和控制。例如,使用SQL传递可以完成远程服务器上的数据定义,设置服务器属性和访问服务器存贮过程(Procedures)等。 SQL传递是建立只读结果集和使用任何其它当地SQL语法最好的工具。与视图(它只是来自SQL SELECT语句的一个结果集)不同,SQL传递可使用 SQLEXEC()函数去发送任何希望的东西到服务器。
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做任何改变后关闭它,再重新运行此程序,便可以看到此变化已存贮到后端数据库中。
11.6.3 使用naive的CursorAdapter 11.6.4 使用ODBC的CursorAdapter ODBC实际上是DataSourceType 4个设置中最直接的。可以设置DataSource为一个打开的ODBC连接柄(handle),设置有用的属性和调用CursorFill去取回数据。如果“填充”好KeyFieldList、Table、UpdatableFieldList和UpdateNameList的内容,VFP将自动产生合适的UPDATE、INSERT和DELETE语句,并用其带来的任何变化去更新数据库。如果想使用一个存贮过程(stored procedure)代替之,则应合适地设置*Cmd、*CmdDatasource和*CmdDatasourceType属性。
11.6.5 使用ADO的CursorAdapter 11.6.6 使用XML的CursorAdapter 例11.25: Local lows as dataserver web service Lows =NEWOBJECT(〝Wsclient〞,HOME()+〝ffc\_webservices.vcx〞) Lows.cWSName =〝dataserver web service Lows=lows.setupClient(http://localhost/sQDataServer/dataServer.WSDL″,; 〝dataserver〞, 〝dataserverSoapPort〞) lcXML=lows.GetCustomers() return lcXML
例11.26: Local loXML as MSXML2.XMLHTTP LoXML =createobject(′MSXML2.XMLHTTP′) LoXML.open(′POST′,′http://localhost/northwind/template/′+; ′getallcustomers.xnl′,.F.) loXML.setRequestHeader(′Content-type′,′text/xml′) loXML.send() return loXML.responseText