DataSnap 2009是从Delphi2009开始提供的新的DataSnap,对原有DataSnap大副改进,虽然保留了原来的基于COM的方式,但默认是使用新的不基于COM的方式,这使得它成为轻量级的、灵活的多层应用技术。这也为将来的跨平台提供了基础。
Delphi2010继续新的DataSnap,应该叫DataSnap 2009呢?还是DataSnap 2010?命名不太明确。我更希望它叫DataSnap2.0。
一、新的DataSnap的第一种用法是服务器方法调用(server methods invoke),这个有向导,使用起来很简单。
工具条上点击New Items:
服务方法类的继承,我们就选默认的TDSServerModule,因为这个封装得最全面,后面一个比一个简单还需要我们写多余的代码。
ServerContainerUnit 容器内已经给我们放置好了服务器端的控件,DSServerClass1.LifeCycle属性有3个选项:Session、Server、 Invocation,我们选默认的Session,这个使得我们的ServerMethods类的实例的生命周期是一个连接会话。而Server是只产 生一个实例服务于整个Server的运行期,我们的ServerMethods类需要对多个线程同时访问是安全的,也就是不能因为多线程访问我们的类而导 致出错。Invocation是每次调用都产生一个实例,虽然节省内存,但显然在大访问量的情况下效率低下。
如果我们建立Service服务程序,在这个单元内还自动生成了控制DataSnap启停的语句。
ServerMethodsUnit单元内已经为我们写好了一个EchoString方法,我们依样画葫芦就行了。
运行这个服务器,点击菜单Run,Run Without Debugging。
建立客户端,生成一个普通窗体程序,放置一个TSQLConnection控件,设置它的Driver为Datasnap,我们就可以勾选Connected属性连接服务器了。
在TSQLConnection控件上点击右键,选择Generate DataSnap client classes,Delphi自动生成代理类,通过调用代理对象,我们就可以像调用本地方法一样调用服务器上的方法。
二、新的DataSnap的第二种用法是IAppServer接口的应用,这可以使新的DataSnap可以像原来的旧的DataSnap一样,直接用数据控件连接远程服务器,读取、编辑、更新数据。
⒈用DataSnap向导生成服务器框架程序,在ServerMethodsUnit单元的数据模块窗体上,放上TSQLConnection、TSQLQuery、TDataSetProvide。
设置好它们的关联,另外DataSetProvider1的Options要选中poAllowCommandText,以允许远程客户端发送命令。
我们可以看到,这些和旧的DataSnap的用法上基本上是一样的。
2.设置客户端。
新建立一个VCL Forms程序,在窗体上放置TSQLConnection并设置连接刚才的服务器。放置一个TDSProviderConnection,这个控件具有 和服务器上的TDataSetProvider对接的功能,设置它的SQLConnection属性为刚才放置的SQLConnection1。另外要设 置它的ServerClassName属性,这个比较关键,必须设置,否则打开数据集时会出现:Exception class EOleException with message 'Remote error: .AS_GetRecords method not found in the server method list'. 。这个属性在Object Inspector内没有下拉列表框,即使已经连接到服务器也没有,必须手工输入,这个或许是需要改进的地方。这里我们输入向导自动生成的服务器的类 名:TServerMethods2。
然后放置TClientDataSet控件,设置它的RemoteServer属性为刚才放置的 DSProviderConnection1,如果已经连接服务器了,就可以在ProviderName属性下拉框,选择 DataSetProvider1,这个DataSetProvider1就是服务器那一端的那个DataSetProvider1。
以后再放置TDataSource、TDBGrid、TDBNavigator,并关联,我们就轻车熟路了。
放置一个按钮,命名为btnSave,双击写事件:ClientDataSet1.ApplyUpdates(0);。
如图:
这 里我连接的BlackFish数据库Employee,数据库文件位于C:\Documents and Settings\All Users\Documents\RAD Studio\7.0\Demos\database\databases\BlackfishSQL\employee.jds。连接的Country 表。
我们可以运行客户端,修改数据,点导航按钮的保存后,再点击btnSave保存到服务器数据库。然后我们用Data Explorer查看数据库表,确实已经被修改了。
请发表评论