当前位置:首页 > Delphi 2010 DataSnap白皮书1
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
共分享92篇相关文档