我自己的测试代码,服务器端做一个接口方法,客户端调用该方法。2个表的 Delta,写死:(也就是直接用 ADeltas[0] 这样就可以把数组元素读出来)。以下方法是写死的,但可以写成一个通用方法,服务器端通过表名,找到对应的ClientDataSet来提交。
客户端:Intf.SaveItems(VarArrayOf([ClientDataSet1.Delta, ClientDataSet2.Delta]));
服务器端:
procedure TTestItems.SaveItems(ADeltas: Variant);
var
D1, D2: Variant;
begin
//测试服务器端事务
D1 := ADeltas[0];
D2 := ADeltas[1];
ClientDataSet1.Data := D1;
ClientDataSet2.Data := D2;
//todo: 开始事务
if ClientDataSet1.ApplyUpdates(0)>0 then raise Exception.Create('提交失败');
if ClientDataSet2.ApplyUpdates(0)>0 then raise Exception.Create('提交失败');
//todo: 结束事务
end;
-------------
通用提交:以下代码测试通过
客户端:Intf.SaveItems(VarArrayOf(['ITEMS', 'Items_Content']), VarArrayOf([ClientDataSet1.Delta, ClientDataSet2.Delta]), 2);
服务器端:
procedure TTestItems.SaveItems(TbNames, ADeltas: Variant; TbCount: Integer);
var
D1: Variant;
Tb1: string;
i: Integer;
Cld: TClientDataSet;
begin
//todo: 开始事务
for i := 0 to TbCount - 1 do
begin
Cld := Self.GetCldByTb(TbNames[i]);
Cld.Data := ADeltas[i];
if Cld.ApplyUpdates(0) > 0 then raise Exception.Create('提交失败');
end;
//todo: 结束事务
end;
客户端:Intf.SaveItems(VarArrayOf([ClientDataSet1.Delta, ClientDataSet2.Delta]));
服务器端:
procedure TTestItems.SaveItems(ADeltas: Variant);
var
D1, D2: Variant;
begin
//测试服务器端事务
D1 := ADeltas[0];
D2 := ADeltas[1];
ClientDataSet1.Data := D1;
ClientDataSet2.Data := D2;
//todo: 开始事务
if ClientDataSet1.ApplyUpdates(0)>0 then raise Exception.Create('提交失败');
if ClientDataSet2.ApplyUpdates(0)>0 then raise Exception.Create('提交失败');
//todo: 结束事务
end;
-------------
通用提交:以下代码测试通过
客户端:Intf.SaveItems(VarArrayOf(['ITEMS', 'Items_Content']), VarArrayOf([ClientDataSet1.Delta, ClientDataSet2.Delta]), 2);
服务器端:
procedure TTestItems.SaveItems(TbNames, ADeltas: Variant; TbCount: Integer);
var
D1: Variant;
Tb1: string;
i: Integer;
Cld: TClientDataSet;
begin
//todo: 开始事务
for i := 0 to TbCount - 1 do
begin
Cld := Self.GetCldByTb(TbNames[i]);
Cld.Data := ADeltas[i];
if Cld.ApplyUpdates(0) > 0 then raise Exception.Create('提交失败');
end;
//todo: 结束事务
end;
本文介绍了一种客户端与服务器端进行数据同步的方法。通过客户端将两个数据集的更改发送到服务器端,服务器端根据这些更改更新对应的数据表。文中提供了具体的代码实现,包括固定表名的测试案例和更通用的多表同步方案。
1051

被折叠的 条评论
为什么被折叠?



