Delphi 三层开发小技巧:TClientDataSet 的 Delta 妙用-单表更新
Delphi 做三层开发时,很多人都会在客户端放一个 TClientDataSet,中间层远程
数据模块就对应放一个 TDataSetProvider,然后再连起来.其实这种方法很烦琐,
而且程序痈肿不甘,不好维护.我们都知道 TClientDataSet 的 Delta 属性记录了
数据的所有修改,应用它我们就可以方便的实现一个单表更新的通用方法.
首先,在中间层添加一个方法,就叫 ApplyUpdates 吧.方法定义如下:
function ApplyUpdates(const UpdateTable:String;Delta:Variant;out
err:String):Boolean;
参数 UpdateTable 是指要更新的表名,Delta 是指传过来的 TClientDataSet 的
Delta 属性,如果更新错误 err 返回错误的内容.下面实现这个方法,首先在
DataModule 上放一个 Query,Query 连上 Connection,然后再放一个
TDataSetProvider 连 Query.代码如下:
function TRoDm.ApplyUpdates(const UpdateTable:String;Delta:Variant;out
err:String):Boolean;
const sql='select * from %s where 1<>1';
var sqlstr:string;
ErrCount:Integer;
begin
Result:=False;
sqlstr:=Format(sql,[UpdateTable]);
try
Conn.BeginTrans;
Query.Close;
Query.sql.text:=sqlstr;
Query.open;
Provider.ApplyUpdates(Delta,-1,ErrCount);
Result:=ErrCount=0;