Delphi2010 DataSnap入门 (二)

简介: 我们来做个简单的数据库连接测试.在上个学习的基础上,我们打开Server的ServerMethodUnit1模块,在设计界面放上三个控件:SQLConnection1: TSQLConnection;SQLDataSet1: TSQLDataSe...

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

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

 

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

相关文章
|
9月前
|
人工智能 API 开发者
阿里CEO吴泳铭-2024互联网大会发言:AI的最大价值是推动生产力变革
11月21日,2024年世界互联网大会“互联网企业家论坛”在乌镇召开。阿里巴巴CEO吴泳铭表示,AI的最大价值在于推动各行各业的生产力变革,而非仅限于开发超级APP。他强调,发展AI需建设繁荣的技术、产品和市场生态。目前,30多万家企业已接入阿里“通义”大模型,应用于代码开发、药物研发等场景。阿里巴巴坚持开源路线,全球开发者基于“通义千问”开发的衍生模型已突破7.8万个。吴泳铭认为,AI的发展需要行业共同努力,建设繁荣生态以实现高质量持续发展。
|
10月前
|
弹性计算 运维 Cloud Native
云原生架构的崛起与未来展望
在数字化转型的浪潮中,云原生架构凭借其高效、灵活和可扩展的特性,正逐渐成为企业IT战略的核心。本文旨在探讨云原生架构的定义、关键特性、实施优势以及面临的挑战,同时展望未来的发展趋势。通过深入分析,我们期望为读者提供一个关于云原生架构全面而深入的视角,助力企业在云计算时代做出更明智的决策。
219 30
|
10月前
|
机器学习/深度学习 传感器 人工智能
开源AI视频监控系统在监狱安全中的应用——实时情绪与行为分析、暴力预警技术详解
针对监狱环境中囚犯情绪波动和复杂人际互动带来的监控挑战,传统CCTV系统难以有效预警暴力事件。AI视频监控系统基于深度学习与计算机视觉技术,实现对行为、情绪的实时分析,尤其在低光环境下表现优异。该系统通过多设备协同、数据同步及自适应训练,确保高精度识别(95%以上)、快速响应(<5秒),并具备24小时不间断运行能力,极大提升了监狱安全管理的效率与准确性。
804 1
|
存储 C语言
C语言中a 和&a 有什么区别
在C语言中,"a" 是一个变量的名字,代表存储在内存中的某个值。而"&a" 则是获取该变量的内存地址,即变量a在计算机内存中的具体位置。这两者的主要区别在于:"a" 操作的是变量中的值,"&a" 操作的是变量的内存地址。
1594 23
|
12月前
|
物联网
物联网卡不能更换地区使用吗
物联网卡(IoT SIM卡)是否能更换地区使用,主要取决于几个关键因素,包括物联网服务提供商的政策、物联网卡的类型(如预付费、后付费)、网络覆盖范围、以及是否存在地理限制等。以下是一些常见的考虑点和操作步骤:
|
人工智能 自动驾驶 安全
人工智能的最终目标:超越人类智能的未来
人工智能(AI)已经成为当今世界最引人注目的技术领域之一,其应用范围涵盖了从医疗保健到自动驾驶汽车的各个领域。然而,尽管AI在许多任务上已经表现出惊人的能力,但其最终目标是什么?这是一个备受争议的问题,但大多数研究人员和科技领袖都同意,人工智能的最终目标是超越人类智能。
|
前端开发 数据库 UED
无感token实现方案
无感token实现方案
|
SQL 存储 安全
详解:驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server 建立安全连接。
详解:驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server 建立安全连接。
6197 0
|
人工智能 自然语言处理 算法
天猫精灵开放平台-之小百科测评
天猫精灵开放平台 智能应用开发平台是阿里巴巴人工智能实验室(AI-Labs)面向软硬件厂商和开发者推出的,将人工智能中ASR(语音识别)、NLP(自然语言处理)、TTS(语音合成)等自然语言处理技术整合、将 AI 能力和设备控制能力对外共享的开放式平台,帮助开发者以最高效率创建智能应用。帮助设备商丰富应用生态,提升设备的用户价值。 平台针对不同类型的开发者提供了丰富的开发工具,协助开发者完成语音技能的开发、智能设备的接入、云端服务的接入等。依托强大的底层技术、智能的算法引擎、完善的云端服务和成熟的软硬件标准系统,AliGenie 会持续不断的将全面、易用的核心技术能力进行输出,为开发者带去
天猫精灵开放平台-之小百科测评