Delphi 使用 Datasnap 的几种三层应用技术总结

Delphi 使用 Datasnap 进行三层应用开发,积累了几种技术,总结如下:

1、(推荐!在 Datasnap 服务端 使用 TDatasetProvider,客户端 使用   TDSProviderConnection

      1)采用 Datasnap Server ,可以使用TCP/IP、Http 通信。TDatasetProvider 能够提供 “元数据与业务数据”。

            推荐:采用(FireDac技术) TFDConnection 连接数据库,通过 TFDQuery/TFDTable 向 TDatasetProvider 提供数据集;(!执持数据库新版本)

            注意:也可以采用(DBX技术)TSQLConnect、TSQLDataSet/TSQLQuery/TSQLTable/TSQLStoredProc,向 TDatasetProvider 提供数据集;

      

      2)客户端使用(DBExpress技术 DBX)  TSQLConnection + TDSProviderConnection  ==》TClientDataSet  ==》TDataSource

           TSQLConnection  设置为 DataSnapCONNECTION,驱动 DataSnap;

           TDSProviderConnection  设置:TSQLConnection 的实例(驱动 DataSnap);ServerClassName  设置 DataSnap服务端 提供服务的 “类名称”;

            TClientDataSet   设置:RemoteServer 为 TDSProviderConnection 的实例,ProviderName 是服务端 的相应“类”下的 TDatasetProvider 实例。

                 提示1:(1 FRM)TClientDataSet 可以 绑定  TStringGrid  ,或者 (2 VCL)通过增加 TDataSource  连接 TDBGrid 。

                 提示2:客户端 TClientDataSet  的变更,如何返回服务器端,以及客户端数据集的查询、排序、过滤等,

                              建议参考《Delphi2006-DbExpress高效数据库开发》这本书;《Delphi 10.1 Berlin DataSnap 开发手册》第一章也有介绍本项技术。

 

      3)好像一个TDatasetProvider,只能提供一个Dataset,如果要建立 主Master/从Detail 数据集,需要采用下列方式:

           利用 TFDQuery 建立两数据集,一个是 主Master ,另一个的 Masterdata 属性设置为主数据集。

 

      4)(好,供参考!)服务端 可以只用一个:TFDConnection + TFDQuery + TDatasetProvider  向客户端提供数据,

               但 TDatasetProvider 的属性 Options 选择 poAllowCommandText 为 True ,即允许 TFDQuery 不管理其SQL 的值,

               直接从客户端 接收 SQL ,并向客户端返回 查询数据集。

               客户端 的 TClientDataSet  通过 CommandText  属性设置 SQL 命令,可以带参数,并从Params 获取参数值,将SQL发给服务端,并接收返回数据。

               这样,可以一个服务端 TDatasetProvider ,服务多个客户端。当然,会话 Session 采用 一次性的比较合适,或者 获取数据完成,断开 SQLConn连接。

               参考《DataSnap ClientdataSet 三层中主从表的操作》搞定主从表的设置!!! 

              

2、在 Datasnap 服务端 使用 TFDQuery,客户端 使用  TSQLConnection   或者 TDSRestConnection ,数据交换用 TStream

       参考:http://docwiki.embarcadero.com/CodeExamples/Tokyo/en/DataSnap.FireDAC_DBX_Sample  (DataSnap 联合 FireDAC

       1)采用 Datasnap Server ,可以使用TCP/IP、Http 通信。

             TFDConnection 连接数据库,通过 TFDQuery  (设置 + TFDSchemaAdapter)  提供数据集 ,  ==》TDataSource (主) 

                                                             通过 TFDQuery  (设置 + TFDSchemaAdapter,设置 MasterSource 、MasterFields 为 “主数据源/ID”) 提供数据集 ,

                                                                       ==》TDataSource (从) 

             公开服务类(Class)的 发送数据集方法 ,以 TStream 类型的方式 ,借助 TFDSchemaAdapter 发送数据,接收更新、并写入数据库。

                    function TServerMethods.StreamGet: TStream;

                    begin
                         Result := TMemoryStream.Create;
                         try
                            qCustomers.Close;    //主数据集
                            qCustomers.Open;
                            qOrders.Close;         //从数据集
                            qOrders.Open;
                            FDSchemaAdapter.SaveToStream(Result, TFDStorageFormat.sfBinary);
                            Result.Position := 0;
                         finally

                            //
                       end;
                   end;

                  以及 接收方法:

                  function TServerMethods.StreamPost(AStream: TStream): string;
                   var
                       LMemStream: TMemoryStream;
                       LErrors: Integer;
                   begin
                         Result := '';
                        // 获取 数据流 从客户端    Retreive entire stream from client
                        LMemStream := CopyStream(AStream);          //复制 数据流
                        LMemStream.Position := 0;
                      try
                          FDSchemaAdapter.LoadFromStream(LMemStream, TFDStorageFormat.sfBinary);
                          LErrors := FDSchemaAdapter.ApplyUpdates
                       finally
                          LMemStream.Free;
                          if LErrors > 0 then
                             Result := Format(sErrorsOnApplyUpdates , [GenerateErrorMessage]);
                       end;
                    end;

 

       2)客户端 可以采用两种 连接方式:1)TSQLConnection    (DBX 方式);2)TDSRestConnection   (Rest方式)

            通过两者(右点)可以 生成  服务端代理类  (Generate Datasnap Client Classes),调用 代理类的方法,获取 服务端数据流。

                 TFDTableAdapter  (+ 同一 TFDSchemaAdapter,设置 DatSTableName 为服务端 的 TFDQuery 名 ) ==》 TMemTable ==》 TDataSource (主  -- 客户)

                 TFDTableAdapter  (+ 同一 TFDSchemaAdapter)设置 DatSTableName 为服务端 的 TFDQuery 名) ==》 TMemTable ==》 TDataSource (从  -- 订单)

              如何 获取数据 ,参考 示例!(省略。。。)   绑定GRID 。 

                  LMemStream := TServerMethodsClient(ServerConnection).StreamGet  代理类通过连接组件,获取服务端 数据流 TStream;

                   FDSchemaAdapter.LoadFromStream(LMemStream, TFDStorageFormat.sfBinary)     从流中加载 数据集。            

 

 3、(考虑!)应用 Rest Datasnap 服务端  ,Http通信, TFDJsonDataSets 与 TFDJsonDelta 格式交换数据

       示例  第9章3节 (9.3)   使用TFDJsonDataSets 功能     参考《Delphi 10.1 Berlin DataSnap 开发手册》

 

4、(推荐)使用  Rest Client  连接  Restful  服务,不限定于(Delphi 产生的),关注 :TRESTResponseDataSetAdapter  的应用。

        《Delphi 10.1 Berlin FireDAC 数据库开发手册》  P109    第 3-1-2  章节  介绍了应用 ,使用 TFDMemTable 处理 Rest 获得的数据。

            使用 TRESTResponseDataSetAdapter  将 TRESTResponse数据提供给  TFDMemTable ,包含了 元数据信息。

            官方示例 :          http://docwiki.embarcadero.com/RADStudio/Tokyo/en/REST_Client_Library

          

 

转载于:https://www.cnblogs.com/hopesun/p/8711226.html

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Delphi是一种编程语言,数据快照(DataSnap)是Delphi中用于创建和部署多层次应用程序的框架。Post是其中一种请求方法,用于向服务器发送数据。 在Delphi使用DataSnap进行Post请求非常简单。首先,我们需要创建一个DataSnap服务器,它可以接收并处理来自客户端的请求。服务器可以是一个独立的应用程序或一个已有的Delphi应用程序。 当客户端需要向服务器发送数据时,可以使用DataSnap的TDSRESTConnection组件来与服务器建立连接。在连接建立后,可以使用TDSRESTRequest组件来创建一个请求,并设置RequestType为POST。然后,可以使用Params属性将数据添加到请求中。最后,通过执行TDSRESTRequest的Execute方法发送请求。 服务器端接收到这个Post请求后,可以使用DataSnap的TDSHTTPService组件来处理请求。通过创建具有处理请求逻辑的方法,服务器可以对请求中的数据进行逻辑处理并返回相应的结果。可以使用TDSHTTPService的OnHTTPCommand事件来处理Post请求。 使用DataSnap进行Post请求的好处是,可以提供安全的数据传输和灵活的数据处理方式。DataSnap还支持可扩展的数据格式,如JSON和XML,以便在不同的平台之间进行数据交换。 总结起来,Delphi中的DataSnap提供了简便的方法来进行Post请求,可以实现客户端向服务器发送数据的功能。通过使用DataSnap的相关组件和事件处理程序,我们可以轻松地创建和处理Post请求。同时,DataSnap还提供了安全和灵活的数据传输和处理方式,让跨平台的数据交换变得更加简单和可靠。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值