数据库
   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);
谁哪位能给指点下迷津啊,,,,或者有示例程序..?能不能发我一份..谢谢.

解决方案 »

  1.   

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

  2.   

    同意楼上的,我主要用update来更新
      

  3.   

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

  4.   

    您讲的通过拆分Delta,生成新的Sql语句,这个是可以,但是个人觉得很麻烦...因为ClientDateSet.ApplyUpdates是可以支持多表连接查询更新单表的,所以三层架构也是可以的.