Delphi_SocketConn三层数据保存.解决办法

Delphi_SocketConn三层数据保存.
数据库
  SqlServer2005
服务端
  TDataSetProvider-->TAdoQuery-->TAdoConnection
客户端
  TClientDataSet

动作:
  结果集(服务端)-->TClientDataSet(客户端)-->显示-->新增,修改,删除-->保存.

分析:
  1,如果 结果集是 Select * From A
  新增,修改,删除
  保存<(服务端)TDataSetProvider.ApplyUpdates(vDelta,0,vErrorInt)>
  一切Ok,没有任何问题.
  2,如果 结果集是 Select A.*,B.Name From A,B Where A.ID=B.ID
  新增,修改,删除
  保存<(服务端)TDataSetProvider.ApplyUpdates(vDelta,0,vErrorInt)>
  ------------------------------------------我只想保存针对A表的修改. 
  出错! Why?????
服务端保存函数:
function SaveSqlNote(TempAdoConn:TADOConnection; const vTabName, vSqlStr: WideString; var vDelta:OleVariant):Integer;
var
  vErrorInt:Integer;
  TempAdoQuery:TADOQuery;
  TempDsp:TDataSetProvider;
begin
  try
  TempAdoQuery:=TADOQuery.Create(nil);
  TempDsp:=TDataSetProvider.Create(nil);
  TempAdoQuery.Connection:=TempAdoConn;
  TempAdoQuery.Close;
  TempAdoQuery.SQL.Clear;
  TempAdoQuery.SQL.Text:=vSqlStr;
  TempDsp.DataSet:=TempAdoQuery;
  TempDsp.ApplyUpdates(vDelta,0,vErrorInt);
  except
  vErrorInt:=-1;
  end;
  try
  TempDsp.Free;
  TempAdoQuery.Free;
  except
  ;
  end;
  Result:=vErrorInt;
end;

服务端接口:
function TTempServer.InterfaceSaveNote(const vTableName, vSqlStr: WideString; var vDelta: OleVariant): OleVariant;
begin
  Result:=SaveSqlNote(DM.ADOConn,vTableName,vSqlStr,vDelta);
end;

客户端调用:
  vTableName:='A';
  vSqlStr:='Select * From A ';
  vDelta:=ClientDataSet1.Delta;
  vResult:=SocketConnection1.AppServer.InterfaceSaveNote(vTableName,vSqlStr,vDelta);


谁哪位能给指点下迷津啊,,,,或者有示例程序..?能不能发我一份..谢谢.


------解决方案--------------------
别指望了,midas不支持多表连接的更新。

建议你另走他途,可选方法如下:
1.用计算字段,
2.自己产生sql更新语句
3.自己封装一个clientdataset控件,在其内部维护一个专用于数据更新的内部clientdataset(只select那个要更新的表),再两者之间的数据同步。(我就是这么干的)



------解决方案--------------------
同意楼上的,我主要用update来更新
------解决方案--------------------
设计上就不对,更新等一定要用SQL语句去实现,这是原则问题,对于扩展,维护都是有益的。再说根本不可能实现多表更新的,因为几个表有相同的字段,控件哪知道你要更新哪个呀。