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服务的更多相关文章

  1. 如何搭建DNS服务

    继NTP时间服务器后,继续搭建DNS服务,鉴于昨晚撰写时间超过预期,这次改变策略,先把自己需要用到的部分写出来(主要是基于RAC的搭建,只涉及正向和反向DNS解析),后面再添加必要的说明和阐述. 试验 ...

  2. JavaWeb结合七牛云存储搭建个人相册服务

    JavaWeb结合七牛云存储搭建个人相册服务 一.引言1. 课程概述 相信很多人都知道网站一般会有很多图片,对于小型网站来说,图片放在网站服务器上不算什么,但当图片数量很大时,会造成服务器很臃肿,相应 ...

  3. Jersey 2 + Maven + Tomcat + IntelliJ IDEA 搭建RESTful服务

    本文参考以下内容: [1] Starting out with Jersey & Apache Tomcat using IntelliJ [2] [Jersey]IntelliJ IDEA ...

  4. 原创:Equinox OSGi应用嵌入Jersey框架搭建REST服务

    一.环境 eclipse版本:eclipse-luna 4.4 jre版本:1.8 二.Equinox OSGi应用嵌入Jersey框架搭建REST服务 1.新建插件工程HelloWebOSGI a. ...

  5. Ubuntu Server搭建svn服务以及迁移方法【转】

    转自:http://www.linuxidc.com/Linux/2013-05/84693.htm Ubuntu Server搭建svn服务以及迁移方法 采用apache+svn,http访问方式. ...

  6. 搭建VPN服务器之PPTP

    搭建VPN服务器之PPTP 1. 查看系统是否支持PPP 一般自己的系统支持,VPS需要验证. [root@oldboyedu ~]# cat /dev/ppp cat: /dev/ppp: No s ...

  7. 在Win7的IIS上搭建FTP服务及用户授权

    FTP服务 FTP是文件传输协议(File Transfer Protocol)的简称,该协议属于应用层协议(端口号通常为21),用于Internet上的双向文件传输(即文件的上传和下载).在网络上有 ...

  8. 在Win7的IIS上搭建FTP服务及用户授权——转载!!

    原文地址:http://blog.sina.com.cn/s/blog_6cccb1630100q0qg.html FTP服务 FTP是文件传输协议(File Transfer Protocol)的简 ...

  9. 如何搭建DNS服务(转)

    继NTP时间服务器后,继续搭建DNS服务,鉴于昨晚撰写时间超过预期,这次改变策略,先把自己需要用到的部分写出来(主要是基于RAC的搭建,只涉及正向和反向DNS解析),后面再添加必要的说明和阐述. 试验 ...

随机推荐

  1. 对EF的封装

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  2. Dynamics 365 CE的插件/自定义工作流活动中调用Web API示例代码

    微软动态CRM专家罗勇 ,回复325或者20190428可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me! 现在Web API越来越流行,有时候为了程序更加健壮,需要在插件 ...

  3. ArcGIS API for JavaScript 入门教程[5] 再讲数据——Map类之底图与高程

    [回顾]前4篇交代了JsAPI的背景.资源如何获取,简介了数据与视图分离的概念与实现,剖析了页面的大骨架. 这篇开始,讲Map类. 转载注明出处,博客园/CSDN/B站/知乎:秋意正寒 目录:http ...

  4. Android Glide详细使用教程

    此处我只是做个记录,后边再补充 原文地址:http://www.jufanshare.com/content/35.html 这篇文章写的比较清楚,还附有Demo代码.算是不错的Android Gli ...

  5. 可能是最全面的G1学习笔记

    引子 最近遇到很多朋友过来咨询G1调优的问题,我自己去年有专门学过一次G1,但是当时只是看了个皮毛,因此自己也有不少问题.总体来讲,对于G1我有几个疑惑,希望能够在这篇文章中得到解决. G1出现的初衷 ...

  6. Linux 操作系统基础

    list : ls 目录: 文件,路径映射. ls : -l : lang 长格式, 显示完整信息. 文件类型: -: 普通文件(f) d: 目录文件 b: 块设备文件(block) c: 字块设备文 ...

  7. 深度优先搜索(DFS)与广度优先搜索(BFS)的Java实现

    1.基础部分 在图中实现最基本的操作之一就是搜索从一个指定顶点可以到达哪些顶点,比如从武汉出发的高铁可以到达哪些城市,一些城市可以直达,一些城市不能直达.现在有一份全国高铁模拟图,要从某个城市(顶点) ...

  8. Kali Linux 渗透测试手册(1.1)安装虚拟机

    翻译来自:掣雷小组 成员信息: thr0cyte, Gr33k, 花花, 小丑, R1ght0us, 7089bAt, 一.配置KALI Linux和渗透测试环境 在这一章,我们将覆盖以下内容: 在W ...

  9. spring boot添加 LocalDateTime 等 java8 时间类序列化和反序列化的支持

    由于项目将原有的  Date类型的字段改造为 LocalDate,LocalDateTime,LocalTime 类型, 发现  spring  对项目的时间格式无法自动转换,故需手动配置下. 在sp ...

  10. redis bind连不上的坑

    由于需要在内网其他服务器上连接redis服务器(192.168.1.110),本想直接在redis配置文件中加上目标的IP地址: bind 192.168.1.166 就可以了,实际上不正确. red ...