DataSnap到了Delphi2010有了很大的变化,已经可以完全抛弃DCOM之类的东西了,在以前版本中建立一个DataSnap,需要使用DCOMConnection或者SockConnection来连接到服务器,而在Delphi2010中提供了一个新的连接组件:TDSProviderConnection,可以更方便地来连接服务器.

先来学习一个简单的DataSnap:

新建一个工程,在Delphi Project中选择DataSnap Server组,然后选择其中的DataSnap Server,点击确定,然后选择缺省设置即可.系统会生成一个工程框架.其实现在你什么代码都不用写,就已经建立好了一个DataSnap的服务器,那么这个服务器可以提供什么呢?它输出了一个类,这个类只有一个方法:

function EchoString(Value: string): string;

我们来测试一下这个服务器,建立一个普通的VCL From Application,然后在窗体中放入下面控件:

一个TSQLConnection,设置其Driver为DataSnap,并且Connected置为True.因为在本机测试,所以其他参数都不需要更改.(当然,需要先运行刚才建立的服务另,要不然会报告错误)

一个TSqlServerMethod,将其SQLConnection属性设为刚才的SQLConnection,然后在ServerMethodName属性中可以选择TServerMethods1.EchoString.这时你选择Params属性,会出现两个参数:Value和ReturnParameter,前者是方法EchoString传人的参数,后者是EchoString输出的值.

OK,到这里一切都设定好了,我们一句代码都没有编写,太说不过去了,还是放个按钮,然后在里面写下这几句代码吧:

SqlServerMethod1.ParamByName('Value').AsString:='Hello,Garfield !';
SqlServerMethod1.ExecuteMethod;
ShowMessage(SqlServerMethod1.ParamByName('ReturnParameter').AsString);

运行一下客户端,可以看到一个对话框,里面显示信息:Hello,Garfield !

我们来做个简单的数据库连接测试.

在上个学习的基础上,我们打开Server的ServerMethodUnit1模块,在设计界面放上三个控件:

SQLConnection1: TSQLConnection;
SQLDataSet1: TSQLDataSet;
DataSetProvider1: TDataSetProvider;

注意:

1、如果使用sa,如果没有密码的话会连接失败,需要建立一个带密码的用户或者将sa设置上密码.

2、如果连接SQL Server时报告错误,可以尝试安装一下MS SQL Server 2008 Native Client,这个包同样可以应用在SQL Server 2000中.

然后将SQLDataSet1的SQLConnection设置为SQLConnection1,并且在CommandText中输入命令,比如:select * from jobs (连接到pubs数据库),设置Active为True.

最后一步,将DataSetProvider1的DataSet设置为SQLDataSet1.

OK,我们的服务器就设计完成了,编译运行.

接下来, 我们来做一个客户端.在以前的DataSnap版本中(D7中好像是这样,其他版本没有测试),像刚才我们设计的东西要放在Remote Data Modul中,在连接的时候要使用DCOMConnection或者SocketConnection,现在不用了.

再打开我们上次设计的客户端程序,在窗体上放置几个数据处理控件,来吧,像一般的数据应用程序那样放入数据感知控件:

DBGrid1: TDBGrid;
ClientDataSet1: TClientDataSet;
DataSource1: TDataSource;

然后我们要放入其他连接远程应用要用到的控件:

SQLConnection1: TSQLConnection;
DSProviderConnection1: TDSProviderConnection;

设置SQLConnection1的Driver为DataSnap,Connected为True(注意运行服务器),设置DSProviderConnection1的SQLConnection为SQLConnection1,注意,下面是很重要的一步,即在ServerClassName中输入TServerMethods1,不知道Delphi为什么没有自动取出,这里需要手工录入.

再设置ClientDataSet1的RemoteServer为DSProviderConnection1,现在就可以在ProviderName中选择DataSetProvider1了,如果没有上面那一步,这里将没有列出.

好了,设置ClientDataSet1的Active为True,设置DataSource1的DataSet为ClientDataSet1,设置DBGrid1的DataSource为DataSource1(这些活都太熟了吧?)

我们已经可以在网格中看到取回的数据来了.

那么,我们可以编辑这些数据并更新回服务器吗?

让我们接着来.

在窗体上放置一个按钮,然后在Click事件中写上一句代码:

ClientDataSet1.ApplyUpdates(0);

运行客户端,然后试着修改一下数据并点击按钮....

你可能顺利的提交了数据,但如果你操作的表没有自到增长字段的话,如果有自动增长字段,比如你测试的时候也像我一样使用的是pubs数据库,然后操作的是jobs表...

天啊,出现了错误?

这是自动增长字段的问题,我们有两种解决方法:

1.Server端我们使用ADO来处理,ADO在处理自动增长字段时还是比较方便的.

2.如果比较喜欢使用dbExpress,我们需要像下面这样做个设定:

回到服务器程序,选择我SQLDataSet,然后将所以字段都加进来,然后选择自动增长字段,在属性中进行如下设置:

AutoGenerateValue设置为AutoInc;

ProviderFlags属性设置为:[pfInWhere,pfInKey];

OK,编译运行,再回到客户端测试一下吧.

其实对于自动增长字段的处理,你直接不让它出现在结果集中也可以.自己多做做测试吧.

好了,现在可以不用配置复杂的DCOM,不用运行ScktSrvr(因为DSTCPServerTransport1已代替了), 简单分发你的分布式应用系统吧!

初学,有不当的地方请高手指正!

Delphi2010 DataSnap入门的更多相关文章

  1. Delphi2010中DataSnap技术网摘

    一.为DataSnap系统服务程序添加描述 这几天一直在研究Delphi 2010的DataSnap,感觉功能真是很强大,现在足有理由证明Delphi7该下岗了. DataSnap有三种服务模式,其中 ...

  2. Delphi2010中DataSnap技术

    文章来源: https://blog.csdn.net/xieyunc/article/details/47865227?_t_t_t=0.3049736963513836 一.为DataSnap系统 ...

  3. Delphi2010中DataSnap高级技术(转)

    一. 为DataSnap系统服务程序添加描述 这几天一直在研究Delphi 2010的DataSnap,感觉功能真是很强大,现在足有理由证明Delphi7该下岗了. DataSnap有三种服务模式,其 ...

  4. Delphi 中DataSnap技术网摘

    Delphi2010中DataSnap技术网摘 一.为DataSnap系统服务程序添加描述 这几天一直在研究Delphi 2010的DataSnap,感觉功能真是很强大,现在足有理由证明Delphi7 ...

  5. Delphi2010中DataSnap高级技术(7)—TDSServerClass中Lifecycle生命周期三种属性说明

    Lifecycle 三种属性: Session.Invocation.Server 这三种属性都用在什么情况,有什么要注意的事项,Delphi2010中罕有说明. 如果乱用这三种属性,你的服务程序有可 ...

  6. DataSnap起源于MIDAS(十几篇博客)

    作为MIDAS起始于Delphi3,Delphi4是MIDAS II,Delphi5中是MIDASIII,而后基于COM远程数据模块方式使用TCP/IP,HTTP,(D)COM构建出强大的通讯能力.从 ...

  7. DataSnap高级技术(7)—TDSServerClass中Lifecycle生命周期三种属性说明

    From http://blog.csdn.net/sunstone/article/details/5282666 DataSnap高级技术(7)—TDSServerClass中Lifecycle生 ...

  8. DataSnap的如果网络断线,如何恢复?

    timer代码很简单:var adbsevertime :TDateTime;begin try adbsevertime := ClientModule1.ServerMethods1Client. ...

  9. DATASNAP压缩过滤器的使用

    ZLIBCOMPRESSION FILTER 作为范例,我们使用已随D2010提供的DataSnap过滤器.可用于在客户端和服务端压缩数据流.这里说的ZlibCompression过滤器可以在DbxC ...

随机推荐

  1. 公用表表达式(CTE)递归的生成帮助数据

    本文的作者辛苦了,版权问题特声明本文出处:http://www.cnblogs.com/wy123/p/5960825.html 工作有时候会需要一些帮助数据,必须需要连续的数字,连续间隔的时间点,连 ...

  2. Redis数据库入门教程

    [使用redis客户端] 我们直接看一个例子: 复制代码 代码如下: //这样来启动redis客户端了 $ ./redis-cli //用set指令来设置key.value 127.0.0.1:637 ...

  3. FPGA低级建模---按键去抖动

    FPGA低级建模,原则上一个模块一个功能,如按键去抖动建模中,有两个模块. 1.detect_module 这个是按键检测模块,主要检测按键的高低电平变化,现在按键是按下还是释放. 2.delay_m ...

  4. eworkflow工作流系统在iis中发布

    eworkflow工作流系统在iis中发布 win7下面的iis发布eworkflow工作流系统,要带虚拟目录的,如发布成http://localhost/eworkflow/login.aspx这样 ...

  5. OS X升级El Capitan后,git difftool无法打开diffmerge的解决方法

    在git项目下执行git difftool,出现如下报错 /Library/Developer/CommandLineTools/usr/libexec/git-core/mergetools/dif ...

  6. 单片机联网需求攀升 WIZnet全硬件TCP/IP技术崛起

    --新华龙电子为韩国WIZnet公司网络芯片授权代理商,具有20多年的专业团队IC应用开发实力-- 如今不管是在企业还是小区.街道,甚至是居民室内,以太网接口无处不在.有鉴于此,电子设备必将向更加智能 ...

  7. xampp3.2下mysql中文乱码终极解决方案

    xmapp3.2.2中mysql已经被替换成了Mariadb,网上那些显示char语句已经失灵. 另外本文主要介绍的是手动在mysql中写入中文乱码问题 那么我们将采用如下三个步骤解决乱码问题 1.打 ...

  8. msChart组件安装与编程

    首先下载mschart.ocx文件,至于它所依赖的.net环境,网上有很多,本人下载的插件给出链接,http://www.cr173.com/soft/47300.html而它所依赖的环境可以从我的云 ...

  9. org.springframework.dao.InvalidDataAccessApiUsageException: Parameter value [41] did not match expected type [java.lang.Integer (n/a)];

    题记:以前记录过一些自己遇到的BUG,这个行为,让我一看报错的提示信息就能定位到问题的所在,后来记得比较多了,好多是重复性的再加上比较忙就没有详细的记录了,今天的工作量比较小,就顺便记录一下,以便以后 ...

  10. MVC之过滤器

    1.过滤器 <a>:Authorization 默认实现 AuthorizeAttribute身份验证过滤器,首先运行,在其他过渡器的操作操作方法前执行;<b>:Action ...