多层数据库应用基于Delphi DataSnap方法调用的实现(二)更新数据集

本文介绍如何在Delphi DataSnap框架下,不依赖TDataSetProvider的ApplyUpdates功能,而是通过手动解析Delta数据包,生成并执行SQL语句来更新数据库。详细展示了更新、插入和删除操作的实现代码,强调了这种方法的灵活性和解决多表联合查询更新问题的优势。
摘要由CSDN通过智能技术生成

    传统的数据集的读取和更新,是通过中间层的TDataSetProvider来完成的。TDataSetProvider负责从它上游的数据集读取数据生成Data包,再传给客户端;另一方面,在客户端提交更新时(TClientDataSet.ApplyUpdates),TDataSetProvider还负责解析上传的Delta包,并最终实现数据库的更新。现在在我们当前的方法调用方式下,不能再通过TDataSetProvider.ApplyUpdates来自动完成更新了,但是,我们还可以借用TDataSetProvider解析Delta数据包的功能,手动生成SQL语句来完成数据库的更新。手动更新看似复杂,实际上编码并不多,而且这种方式具有很大的灵活性,同时还解决了在传统方式下,多表联合查询不能完全自动更新的软肋。

 

下面来看看示例代码:

 

中间层代码

 

...
interface

uses
  SysUtils, Classes, DSServer, DBXOracle, FMTBcd, DB, SqlExpr, WideStrings, Provider,
  CodeSiteLogging, DBClient;

type
{$METHODINFO ON}
  TServerMethods1 = class(TDataModule)
    SQLConnection1: TSQLConnection;
    SQLDataSet1: TSQLDataSet;
    DataSetProvider1: TDataSetProvider;
    procedure DataSetProvider1BeforeUpdateRecord(Sender: TObject; SourceDS: TDataSet;
      DeltaDS: TCustomClientDataSet; UpdateKind: TUpdateKind; var Applied: Boolean);
  private
    { Private declarations }
    FOnDeltaRecordUpdate: TBeforeUpdateRecordEvent;
    procedure UpdateEmployeesDelta(Sender: TObject; SourceDS: TDataSet;
    DeltaDS: TCustomClientDataSet; UpdateKind: TUpdateKind;
      var Applied: Boolean);
  public
    { Public declarations }
    function GetEmployeeFullName(EmployeeId: Integer): string;
    function GetEmployees: TDataSet;
    function Up

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值