XE5 搭建DataSnap服务
1 准备工作
1.1 环境准备
XE5或XE7,操作系统Windows7(64位)操作系统。
数据库MSSQL选择SQLServer2008。
如果数据库服务没有在开发电脑上,则需要在开发电脑上安装Microsoft SQL Server 2008 Native Client。因为是64位开发环境,所以需要下载64位的安装包[1]。
X64 包下载地址:
http://download.microsoft.com/download/9/9/d/99de4110-04b7-4e0e-8375-b04234fff0d8/sqlncli.msi
如果是32位开发环境,则安装X86安装包,对应下载地址:
http://download.microsoft.com/download/b/b/2/bb22098a-c071-415f-9269-2eb26cefb562/sqlncli.msi
当然,也可以将本实例中的组件SQLConnection---SQLDataSet---DataSetProvider更改为:
TFDPhysMSSQLDriverLink---TFDConnection---TFDQuery---TDataSetProvider
另外一种服务端连接数据库的替代方案是常用的 TADOConnection---TADOQuery---TDataSetProvider
当然,如果是客户端即连接数据库又进行显示的话,将TDataSetProvider换为TDataSource---TDBGrid即可,即 TADOConnection---TADOQuery---TDataSource---TDBGrid
2 搭建数据库服务
在一台电脑上搭建MSSQLServer2008或MSSQLServer2005数据库。
2.1 数据库信息
|
IP地址 |
192.168.0.123 |
|
用户名 |
test |
|
密码 |
123 |
|
数据库 |
xxx |
|
数据库中的表 |
T_Bug |
3 开发DataSnap服务
3.1 新建工程(以XE5为例)
File->New->Other…->Delphi Projects->DataSnap Server->DataSnapServer,点击OK


1向导中选择“VCL Forms Application”->Next>>

2向导中选择 TCP/IP、HTTP、Server Methods Class ->Next>>

3向导中选择默认端口211,单击测试若出现成功,则可以使用;否则自己设定一个端口,确保正常即可->Next>>

4向导中选择“TDSServerModule”->Finish

然后保存工程到指定路径。
3.2 测试DataSnap服务
浏览器中输入
http://192.168.0.198:8080/datasnap/rest/TServerMethods1/EchoString/TestData
返回结果应为{"result":["TestData"]}


3.3 配置数据库
使用DBExpress的DBX控件连接数据库

打开ServerMethodUnit1单元,添加组件:
(1)SQLConnection
(2)SQLDataSet
(3)DataSetProvider
3.3.1 SQLConnection设置

最后设置Connection为ture进行连接测试,如果不行,检查配置已经数据库服务器是否添加了针对数据库服务的防火墙例外。
为了支持客户端数据库语句操作,需要对DataSetProvider的以下几个属性进行配置,poAutoRefresh,poPropogateChange,poAllowCommandText设置为true。

3.3.2 SQLDataSet设置

3.3.3 DataSetProvider设置

3.3.4 搭建完成
编译,启动起来,待客户端开发时连接使用。
4 开发DataSnap客户端
4.1 新建工程(以XE5为例)
File->New->VCL Forms Application – Delphi

上述工程建好后,再添加SnapClient。步骤如下:
4.1.1 添加DataSnapClient
File->New->Other…->Delphi Projects->DataSnap Server->DataSnapClient Module,点击OK


向导中选择“Remote server”->Next>>

向导中选择“DataSnap stand alone server”->Next>>

向导中选择“TCP/IP”->Next>>

向导中填写信息“Host Name”填写本机的IP地址“192.168.0.198”

端口填写服务的端口“211”, 点击Test Connection成功后,点击Finish。
添加成功后,配置信息已经写入SQLConnection的属性中

4.2 添加连接服务端的组件DSProviderConnection
在tool palette中,找到“DataSnap Client”下的TDSProviderConnection,将其放在ClientModuleUnit1这个单元里。

4.2.1 配置DSProviderConnection
配置SQLConnection,双击即可。在ServerClassName中填写服务端对应DataSnap服务的类的名字TServerMethods1

最后,需要进行连接,双击Connected。

如果没有连接成功,请检查配置。
4.3 测试程序代码
4.3.1 在主单元中增加ClientModuleUnit1

在Unit1这个form里,增加控件,在Tool Palette中找到“Data Access”,在其下的TClientDataSet、TDataSource两个组件放入Form。同时在DataControl这个组中,找到TDBGrid放到Form上,用于显示数据。
为了能够共用ClientModuleUnit1中的DSProviderConnection,在Unit1的Form中添加两份相同的上述控件。

4.3.2 ClientDataSet设置
首先配置RemoteServer,正常双击即可将ClientModule1.DSProviderConnection1增加进来。
其次,配置ProviderName,双击即可设置为“DataSetProvider1”

4.3.3 DataSource设置
设置其DataSet即可。

4.3.4 DBGrid设置
设置其数据源即可,即DataSource。

4.3.5 对另外一组做同样的上述设置
4.3.6 添加两个Button,分别对两组进行测试
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientDataSet1.Close;
ClientDataSet1.CommandText := ' select top 10 * from T_Bug ';
ClientDataSet1.Open;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ClientDataSet2.Close;
ClientDataSet2.CommandText := ' select top 3 * from T_Bug ';
ClientDataSet2.Open;
end;
4.3.7 测试问题处理

该问题需要在客户端主单元中引入MidasLib即可(添加MidasLib的目的是省去发布Midas.dll)。
如果服务器使用了http协议作为datasnap通讯的话,还需在客户端程序中加上 uses DSHTTPLayer;如果使用tcp协议,无需增加DSHTTPLayer
在编译电脑上运行正常,程序在其它电脑上运行出现问题
解决办法:
--服务端
在unit ServerMethodsUnit1单元中,添加uses MidasLib;(添加MidasLib的目的是省去发布Midas.dll)
如果用的是火鸟数据库,只需拷贝dbxfb.dll和fbclient.dll
分发的服务器软件只需三个文件:服务器程序、dbxfb.dll 和 fbclient.dll
--客户端
在客户端程序中加上uses MidasLib;(添加MidasLib的目的是省去发布Midas.dll)
如果服务器使用了http协议作为datasnap通讯的话,还需在客户端程序中加上 users DSHTTPLayer;如果使用tcp协议,无需增加DSHTTPLayer
添加后运行界面如图:
参考文献
[1] DBX Error:Driver could not be properly initialized. Client library may be missing, not installed pro [C/OL]/ [2016-07-10]. https://blog.csdn.net/2001xgp/article/details/51870859.
https://www.cnblogs.com/cb168/p/4281155.html
https://www.cnblogs.com/neugls/archive/2011/09/27/2193579.html LiveBinding
XE5 搭建DataSnap服务的更多相关文章
- 如何搭建DNS服务
继NTP时间服务器后,继续搭建DNS服务,鉴于昨晚撰写时间超过预期,这次改变策略,先把自己需要用到的部分写出来(主要是基于RAC的搭建,只涉及正向和反向DNS解析),后面再添加必要的说明和阐述. 试验 ...
- JavaWeb结合七牛云存储搭建个人相册服务
JavaWeb结合七牛云存储搭建个人相册服务 一.引言1. 课程概述 相信很多人都知道网站一般会有很多图片,对于小型网站来说,图片放在网站服务器上不算什么,但当图片数量很大时,会造成服务器很臃肿,相应 ...
- Jersey 2 + Maven + Tomcat + IntelliJ IDEA 搭建RESTful服务
本文参考以下内容: [1] Starting out with Jersey & Apache Tomcat using IntelliJ [2] [Jersey]IntelliJ IDEA ...
- 原创:Equinox OSGi应用嵌入Jersey框架搭建REST服务
一.环境 eclipse版本:eclipse-luna 4.4 jre版本:1.8 二.Equinox OSGi应用嵌入Jersey框架搭建REST服务 1.新建插件工程HelloWebOSGI a. ...
- Ubuntu Server搭建svn服务以及迁移方法【转】
转自:http://www.linuxidc.com/Linux/2013-05/84693.htm Ubuntu Server搭建svn服务以及迁移方法 采用apache+svn,http访问方式. ...
- 搭建VPN服务器之PPTP
搭建VPN服务器之PPTP 1. 查看系统是否支持PPP 一般自己的系统支持,VPS需要验证. [root@oldboyedu ~]# cat /dev/ppp cat: /dev/ppp: No s ...
- 在Win7的IIS上搭建FTP服务及用户授权
FTP服务 FTP是文件传输协议(File Transfer Protocol)的简称,该协议属于应用层协议(端口号通常为21),用于Internet上的双向文件传输(即文件的上传和下载).在网络上有 ...
- 在Win7的IIS上搭建FTP服务及用户授权——转载!!
原文地址:http://blog.sina.com.cn/s/blog_6cccb1630100q0qg.html FTP服务 FTP是文件传输协议(File Transfer Protocol)的简 ...
- 如何搭建DNS服务(转)
继NTP时间服务器后,继续搭建DNS服务,鉴于昨晚撰写时间超过预期,这次改变策略,先把自己需要用到的部分写出来(主要是基于RAC的搭建,只涉及正向和反向DNS解析),后面再添加必要的说明和阐述. 试验 ...
随机推荐
- DSAPI多功能组件编程应用-HTTP监听服务端与客户端_指令版
前面介绍了DSAPI多功能组件编程应用-HTTP监听服务端与客户端的内容,这里介绍一个适用于更高效更快速的基于HTTP监听的服务端.客户端. 在本篇,你将见到前所未有的超简化超傻瓜式的HTTP监听服务 ...
- OO第二单元作业小结
前言 转眼已是第九周,第二单元的电梯系列作业已经结束,终于体验了一番多线程电梯之旅. 第一次作业是单电梯的傻瓜调度,虽然是第一次写多线程,但在课程PPT的指引下,写起来还是非常容易:第二次作业是单电梯 ...
- 物理dataguard 正常切换 脚色转换,switchover_status 状态改变
正常切换切换前: 主库:SQL> select DATABASE_ROLE from v$database;DATABASE_ROLE----------------PRIMARY SQL> ...
- 在linux中访问macos 下的分区。
花钱的解决方案是找专业的: Paragon Software 他们家有各种套件,让你在window Linux 都能访问到苹果分区里面的内容. 但是Windows删除了它的驱动之后一开机就蓝屏. ...
- Oracle设置主键自增
oracle没有mysql那样可以有自增主键,需要自己通过创建序列才能实现自增 /*创建自增序列*/ CREATE SEQUENCE CMB_CHINA_CITYS_ID MINVALUE --最小值 ...
- 【专题教程第8期】基于emWin模拟器的USB BULK上位机开发,仅需C即可,简单易实现
说明:1.如果你会emWin话的,就可以轻松制作上位机.做些通信和控制类上位机,比使用C#之类的方便程度一点不差,而且你仅会C语言就可以.2.并且成功将emWin人性化,可以做些Windows系统上的 ...
- Java小白如何一步步学好Java,听听企业Java培训师的实践经验吧
今天我准备给小主展示一篇Java培训老师的文章,希望能给Java小白一个学好Java的路径或者提示.以下就是原文: 从大学到现在,我使用Java已经将近20年,日常也带实习生,还在公司内部做train ...
- 从壹开始微服务 [ DDD ] 之七 ║项目第一次实现 & CQRS初探
前言 哈喽大家周五好,我们又见面了,感谢大家在这个周五读我的文章,经过了三周的时间,当然每周两篇的速度的情况下,咱们简单说了下DDD领域驱动设计的第一部分,主要包括了,<项目入门DDD架构浅析& ...
- 批量执行工具PSSH详解
批量执行工具PSSH详解 pssh是一个python编写可以在多台服务器上执行命令的工具,同时支持拷贝文件,是同类工具中很出色的,使用必须在各个服务器上配置好密钥认证访问. 安装pssh包 yum 安 ...
- ShareIntentUtil【调用系统自带的分享的工具类】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 根据参考资料的文章,整理了调用系统自带分享的工具类(实现了适配7.0FileProvider的功能),需要搭配<Android ...