Delphi - 2010 - DataSnap白皮书(4)

2019-08-03 12:42

HTTP/1.1 401未验证 错误.

HTTP检验从客户端传递到服务端的用户名和密码,及其他TDSHTTPServiceAuthentication特定

信息,我们需要在DataSnap客户端的TSQLConnection控件中填写DSAuthUser和DSAuthPassword属 性.

注意我们也需要指定HostName的值,除非是在同一台电脑上测试. 2.3. DATASNAP服务部署

范例的服务端和客户端在同一台电脑上运行良好,但是实际环境中,DataSnap服务将运行在服务

器上,一或多台客户端通过网络连接服务端.服务端程序通常部署在没有安装Delphi的电脑上.这

种情况下就需要考虑不用运行时包来编译DataSnap,而仅生成一个大的可执行文件.由于我们还没

有使用任何数据操作组件,也不需要任何的其他数据库驱动或DLL文件. 2.3.1. DATASNAP 客户端部署

假设客户端与服务端运行在不同的电脑上,我们必须保证客户端可以连接到服务端.为了保证这

点,客户端的TSQLConnection组件不能仅仅指定Driver属性中的CommunicationProtocol和端口,

还需要指定HostName属性.设置IP地址或DNS.例如连接我的DataSnap服务的HostName属性

为www.bobswart.nl.(注意不需要指定http://前缀,因为在CommunicationProtocol属性中指定了 通讯协议).

3. DATASNAP和数据库

除了使用Delphi2010 DataSnap框架创建简单的服务方法,我们还可以在服务端添加数据库操作,

实现多层数据库应用—DataSnap服务连接到数据库,但DataSnap客户端是瘦客户端,不含任何数据 库驱动.

我们同样可以快速创建数据库操作的DataSnap范例,只使用SQLConnection组件和已创建的客户

端类.也可使用另外两个DataSnap组件TsqlServerMethod和

TDSProviderConnection.

首先,我们要确保服务端公布了一个数据集,打开ServerMethodsUnitDemo并在数据模块中添加

一个TSQLConnection组件.连接TSQLConnection组件到数据库和表(本例我连接到BlackFishSQL的

Employees表).将TSQLConnection组件添加到数据模块的设计区域.设置Driver属性为

BlachFishSql.然后设置Database属性为employee.jds文件的路径: C:\\Documents and Settings\\All

Users\\Documents\\RAD Studio\\7.0\\Demos\\database\\databases\\BlackfishSQL on Windows

XP, or C:\\Users\\Public\\Documents\\ RAD

Studio\\7.0\\Demos\\database\\databases\\BlackfishSQL.

将TSQLConnection的LoginPrompt属性设置为False.设置Connected属性为True验证是否能正确连 接.

下一步,添加一个TSQLDataSet组件,将其SQLConnection设置为TSQLConnection组件.

设置其CommandType为ctQuery,双击CommandText属性输入SQL语句. SELECT EMP_NO, FIRST_NAME, LAST_NAME, HIRE_DATE, JOB_COUNTRY FROM EMPLOYEE

确保在设计时设置了TSQLConnection组件的LoginPrompt和Connected属性为False,及

TSQLDataSet的Active属性为False.

现在在ServerMethodsUnitDemo单元的TServerMethods1类中添加一个public方法返回一个

TSQLDataSet组件. type

TServerMethods1 = class(TDSServerModule) SQLConnection1: TSQLConnection;

SQLDataSet1: TSQLDataSet; private

{ Private declarations } public

{ Public declarations }

function EchoString(Value: string): string; function ServerTime: TDateTime; function GetEmployees: TDataSet; end;

如你所见,TServerMethods1类中定义了一个叫做GetEmployees的方法,实现如下:

function TServerMethods1.GetEmployees: TDataSet; begin

SQLDataSet1.Open; // make sure data can be retrieved Result := SQLDataSet1 end;

重新编译服务并运行.注意如你关闭了服务但无法重新编译,可能是DataSnap服务还在运行.

3.1. TSQLSERVERMETHOD

回到DataSnap客户端,TSQLConnection组件应该已经断开到DataSnap服务端的连接(如果仍然连

接,说明你没有重新编译服务端).重新将Connected设置为True,从服务端更新信息,并重新从服务

端生成客户端类(使用右键菜单).

为了重写原来的ServerMethodsClient单元,推荐从项目中移除原来的ServerMethodsClient后

在选择’Generate DataSnap Client Classes’方法.保存了新的单元文件后不需要修改客户端代

码.生成了新文件后,可以从中看到GetEmplorees方法. type

TServerMethods1Client = class private

FDBXConnection: TDBXConnection; FInstanceOwner: Boolean;

FEchoStringCommand: TDBXCommand; FServerTimeCommand: TDBXCommand; FGetEmployeesCommand: TDBXCommand; public

constructor Create(ADBXConnection: TDBXConnection); overload; constructor Create(ADBXConnection: TDBXConnection; AInstanceOwner: Boolean); overload; destructor Destroy; override;

function EchoString(Value: string): string; function ServerTime: TDateTime; function GetEmployees: TDataSet; end;

为使用GetEmployees方法获取TDataSet,我们可以使用TsqlServerMethod组件.将

TsqlServerMethod组件添加到客户端窗体,设置其SQLConnection属性为SQLConnection1,然后打

开ServerMethodName下拉框显示可用的方法:一些DSAdmin方法(可通过设置TDSServer的

HideDSAdmin属性为True禁止),接下来是三个DSMetaData方法,七个TServerMethods.As_XXX方法

(由原来的IAppServer提供),和最后我们自己的TServerMethods1的方

法:EchoString,ServerTime,

和GetEmployees方法.

本例我们选择TServerMethods1.GetEmployees作为ServerMethodName属性的值.根据

ServerMethodName属性值,SqlServerMethod控件获取查询结果记录集. 我们使用TDataSetProvider,TClientDataSet和TDataSource来使数据显示在TDBGrid中.

在客户端添加一个TDataSetProvider控件,将其DataSet设置为SqlServerMethod控件.下一步添

加一个TClientDataSet控件,将其ProviderName设置为DataSetProvider控件.设置其

RemoteServer属性为空—--这是用于原有DataSnap的方法,在新的DataSnap架构中不再使用.

最后,放一个TDataSource控件,设置其DataSet为TClientDataSet控件,然后就可以放TGBGrid和

TDBNavigator控件了.设置其DataSource为TDataScource组件,将可以在客户端窗体中看到数据.

为了在设计时验证连接,我们设置ClientDataSet的Active属性为True.将触发SqlServerMethod

的Active为True(开始检索数据,然后自动将Active设置为False),同时会将 TSQLConnection.Connected设置为True连接到服务端.

这种方式连接一直保持,TCliendtDataSet和TSQLConnection的被激活,数据显示在TDBGrid中.

这种方式很容易以只读方式查看数据.注意这里说只读,因为TSQLServerMethod不允许

TDataSetProvide-TClientDataSet组合将客户端的数据变更传回服务端. TSQLServerMethod是轻量级方式连接获取只读数据.这样,如果你需要获取DataSnap服务器上的

数据但不需要做修改,当前这种发布一个返回TSQLDataSet结果集方法的架构就很好.

然而,有时我们需要更新数据,这时就必须使用不同的方法获取数据. 3.2. TDSPROVIDERCONNECTION


Delphi - 2010 - DataSnap白皮书(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:长方体与正方体的认识评课

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: