Delphi XE 10 跨平台三层数据库应用 datasnap

时间:2024-03-19 08:35:36

(1)生成DataSnap服务器的框架

初学者都是呆子,还是用向导吧,主菜单“File”->“New”->“Other…”得到“New Items”向导对话框。见图一。

Delphi XE 10 跨平台三层数据库应用 datasnap图一、向导

一般选择有窗口的Forms程序,如果是正式场合,建议Service程序。见 图二。

Delphi XE 10 跨平台三层数据库应用 datasnap图二、选择应用类型 

如果服务器程序运行在Windows平台就选“VCLapplication”,如果要跨平台,还是选“FireMonkeyapplication”,但生成的文件要大一些。见图三。

Delphi XE 10 跨平台三层数据库应用 datasnap图三、选择应用基本库源 

​默认TCP/IP为通讯协议,简单快速,菜鸟专用的Sample Methods用于测试,见图四。

Delphi XE 10 跨平台三层数据库应用 datasnap图四、选择通讯等参数

​缺省211端口,别忘了“Test Port”一下更健康,见图五。

Delphi XE 10 跨平台三层数据库应用 datasnap图五、测试端口 

不要使用默认的“TComponent”,而用TDSServerModule作为数据服务提供主体,非常方便以后变更为能挣钱的Service应用服务。

Delphi XE 10 跨平台三层数据库应用 datasnap图六、选择服务模式

​Finish这个向导后,硬盘一阵轰鸣,自动生成了工程及其三个主文件,图七:

ServerContainerUnit1.pas放的是网络服务相关控件,非高手莫入。

ServerMehtodsUnit1.pas就是我们第二步主要的活动场所。

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

在上个学习的基础上,我们打开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(这些活都太熟了吧?)

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