一.DataSnap(一)

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 !

二.DataSnap(二)

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

在上个学习的基础上,我们打开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已代替了), 简单分发你的分布式应用系统吧!

DapaSnap简介相关推荐

  1. etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理

    1. etcd 简介 etcd 官网定义: A highly-available key value store for shared configuration and service discov ...

  2. Docker学习(一)-----Docker简介与安装

    一.Docker介绍 1.1什么是docker Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植 ...

  3. 【Spring】框架简介

    [Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...

  4. TensorRT简介

    TensorRT 介绍 引用:https://arleyzhang.github.io/articles/7f4b25ce/ 1 简介 TensorRT是一个高性能的深度学习推理(Inference) ...

  5. 谷粒商城学习笔记——第一期:项目简介

    一.项目简介 1. 项目背景 市面上有5种常见的电商模式 B2B.B2C.C2B.C2C.O2O B2B 模式(Business to Business),是指商家和商家建立的商业关系.如阿里巴巴 B ...

  6. 通俗易懂的Go协程的引入及GMP模型简介

    本文根据Golang深入理解GPM模型加之自己的理解整理而来 Go协程的引入及GMP模型 一.协程的由来 1. 单进程操作系统 2. 多线程/多进程操作系统 3. 引入协程 二.golang对协程的处 ...

  7. Linux 交叉编译简介

    Linux 交叉编译简介 主机,目标,交叉编译器 主机与目标 编译器是将源代码转换为可执行代码的程序.像所有程序一样,编译器运行在特定类型的计算机上,输出的新程序也运行在特定类型的计算机上. 运行编译 ...

  8. TVM Operator Inventory (TOPI)简介

    TOPI简介 这是 TVM Operator Inventory (TOPI) 的介绍.TOPI 提供了比 TVM 具有更高抽象的 numpy 风格的,通用操作和调度.TOPI 如何在 TVM 中,编 ...

  9. 计算机视觉系列最新论文(附简介)

    计算机视觉系列最新论文(附简介) 目标检测 1. 综述:深度域适应目标检测标题:Deep Domain Adaptive Object Detection: a Survey作者:Wanyi Li, ...

最新文章

  1. mac mysql的安装
  2. BZOJ 2957楼房重建
  3. Hibernate annotation多对多配置
  4. 【iOS UIKit】UITableView属性及方法大全
  5. 使用strcat_s函数的注意事项
  6. java程序转成mac应用,如何为Java应用程序创建Mac安装程序?
  7. python课程设计矩阵对角线之和,为每个python numpy用不同的值填充矩阵对角线
  8. Golang Http Server源码阅读
  9. osea/Beat Classification 4.0-4.2
  10. vim编辑文件时显示行号
  11. 求最大公约数欧几里得算法
  12. 如何自定义cad线型_百度经验.html,如何找到自己需要的CAD线型?教你怎样自定义CAD线型...
  13. varchar2改为clob的解决步骤
  14. 全志h6对比晶晨s905_一决雌雄!64位芯片晶晨S905对比瑞芯微RK3368谁胜?
  15. 【渝粤题库】广东开放大学 电算化会计 形成性考核
  16. awesome-git 中文版,收集常用 Git 教程、工具 の 资源库
  17. 广义相对论-学习记录7-第三章-张量分析与黎曼几何4
  18. 软件经验|GDAL空间数据开源库开发介绍
  19. 一些STM32核心板选择的稳压芯片
  20. Unity限制InputField输入数字

热门文章

  1. 号称“新至强,可拓展,赢当下”的Xeon可拓展处理器有多逆天?
  2. C# ListView用法详解 很完整
  3. 分析你的浏览器历史记录,看看你喜欢访问哪些网站
  4. OpenSSL心脏滴血漏洞(CVE-2014-0160)
  5. PHPCMS模板里面使用自定义函数
  6. 朴素贝叶斯先验概率公式推导
  7. 东东学打牌 Week9作业B题
  8. 分布式NewSQL数据库实践——民生银行经典案例
  9. Deepin的wine安装Windows的EXE程序,Deepin安装sqlyog,并且打包成deb程序。
  10. 数通基础之IP网络结构初识(学习笔记)