本人做了个系统,不打算在服务器端写放太多的控件,打算写方法处理,主要是更新的问题,可能是一个表的数据,也可能是多个表的数据。比如现在就是一个表的数据吧,我把客户端的ClientDataset.delta的数据传过来,然后我如何写一个通用的方法处理类似于这种单个表的delta更新呢?参数应该是(表名,delta)对吧?那么对于多个表的处理情况呢?ado是否能自动更新多个表的数据呢?不是的,自己写有何通用的好的方法?谢谢!分不够的话可以多送的。再谢!

解决方案 »

  1.   

    SimpleObjectBroker
    李威的书里有讲!
      

  2.   

    我不明白你要这么通用的方法干什么呢?
    难道有很多同时更新多个表的情况吗?你考虑一下现实中,最常见的情况是触发 ,也就是更新了一个表会触发对别的表的处理,而这就是对企业逻辑业务的实现。所以你的思路一定要考虑是否实用于现实。另外 ado 的确支持多个表的自动更新,要将provider的resovetodataset(好象是这么拼:))设为true相关内容可以看ado/mts那本书还有你打算自己写一个对delta进行处理的方法?难 也不会比borland写的好 何必呢 打消吧  在他的基础上就可以处理大部分问题了
      

  3.   

    只要你的RemoteModule是无状态的,
    对于单个表,As_ApplyUpdates方法就可以更新!
    对于主从表,通过OwnerData参数传递必要的参数(包括从表查询语句,主键,外键等),我的应用服务器都是这样写的,如需要例子,就发邮件至[email protected]
      

  4.   

    谢谢各位!
    to 猛禽
    是的,对于这个问题我就是为了三层而三层,我不想在服务器端放大量的控件,同时我也不想在服务器端写大量的method;所以就这样了,我觉得,三层中客户端能处理的尽量客户端处理,我打算三层中各个层都负担一部分处理功能,想像能负载均摊。愿听老兄你关于三层的架构的指点。
      

  5.   

    我来了猛鸟也在呵在一个 RDM 中处理太多的逻辑是不合理的关于怎样划分对像的个数/大小我也在思考中, 目前想法是一个不可分割的对像一个 RDM 回答你的问题,要不然拿不到分呵, 还有是通用方法的吧那个 DataSetProvider 还是放下来, 设 DataSetProvier->Exported = false写个方法 ApplyUpdate(Delta :OleVariant) 在这里写到
    var 
      ErrorCount :Integer;
    begin
      dsp.ApplyUpdate(Delta, 0, ErrorCount);
      if ErrorCount <> 0 then
        raise Exception.Create(FLastError);  // FLastError 是对像一个私有方法
    end;在 dsp 的 OnUpdateError 中写到
    begin
      FLastError := E.Message;
    end;差不多就是这意思了
      

  6.   

    鸟又来了哈负载均衡目前COM 下是难做了, 只有从客户端这边对服务器作个选择。客户端已经做的逻辑在服务器不做是不对的,但实际编程中的兄弟们还是常这样干别人咋做我不知道,我们这服务器和客户机分开开发,我是不会相信其它程序员的代码的,我一定在服务器定好完整的规则
      

  7.   

    谢谢 
    猛禽和太可怕
    关于单表的更新,我已经解决了,我现在考虑多表的解决方式(据说ado有自动更新的功能,我没有试验过,要不又得自己处理代码了),我只是想用通用的方法,提高生产率。
    关于业务逻辑在中间层处理的问题,我原来打算放在我的系统中用com+处理,可是这样系统充分发挥应用服务器的功能,可是我觉得对于我这个只有几万块钱的项目没有必要搞的那么复杂。可是对于想建立各个功能对象在remoteDM的情况下,如何建立企业对象呢?我是用了一个公共的remoteDM,然后用了几个子remoteDM(属于子系统),公共方法在公共的RemoteDm,对于具体业务的封装用在子remoteDM中;请问这样做有何不妥?
    我的客户端用了一个公共socekt然后用shareconent,能用服务器方法的,我尽量写方法。
    其实我也很想象此com+那样多建立相关的业务处理对象和功能控制对象,可是我目前的系统用不著阿。
    愿听各位高见!
    谢谢各位!分可以再开窗口加的!
    身体健康!
      

  8.   

    不会吧,我是用的我名字咋我的名字换成别人的了,csdn的Bug不小心让我捏住了,我没有时间修改了
      

  9.   

    如果是这样,那还是干脆做成两层C/S的,直接用ADO的多表更新功能好了,又简单又方便。:)